@@ -227,56 +227,61 @@ def test_fnmatch_windows_paths(self):
227
227
self .assertMatches (fnm , r"dir\foo.py" , True )
228
228
229
229
230
+ @pytest .fixture (params = [False , True ], name = "rel_yn" )
231
+ def relative_setting (request ):
232
+ """Parameterized fixture to choose whether PathAliases is relative or not."""
233
+ return request .param
234
+
235
+
230
236
class PathAliasesTest (CoverageTest ):
231
237
"""Tests for coverage/files.py:PathAliases"""
232
238
233
239
run_in_temp_dir = False
234
240
235
- def assert_mapped (self , aliases , inp , out ):
241
+ def assert_mapped (self , aliases , inp , out , relative = False ):
236
242
"""Assert that `inp` mapped through `aliases` produces `out`.
237
243
238
- `out` is canonicalized first, since aliases always produce
239
- canonicalized paths.
244
+ `out` is canonicalized first, since aliases produce canonicalized
245
+ paths by default .
240
246
241
247
"""
242
- aliases .pprint ()
243
- print (inp )
244
- print (out )
245
- assert aliases .map (inp ) == files .canonical_filename (out )
248
+ mapped = aliases .map (inp )
249
+ expected = files .canonical_filename (out ) if not relative else out
250
+ assert mapped == expected
246
251
247
252
def assert_unchanged (self , aliases , inp ):
248
253
"""Assert that `inp` mapped through `aliases` is unchanged."""
249
254
assert aliases .map (inp ) == inp
250
255
251
- def test_noop (self ):
252
- aliases = PathAliases ()
256
+ def test_noop (self , rel_yn ):
257
+ aliases = PathAliases (relative = rel_yn )
253
258
self .assert_unchanged (aliases , '/ned/home/a.py' )
254
259
255
- def test_nomatch (self ):
256
- aliases = PathAliases ()
260
+ def test_nomatch (self , rel_yn ):
261
+ aliases = PathAliases (relative = rel_yn )
257
262
aliases .add ('/home/*/src' , './mysrc' )
258
263
self .assert_unchanged (aliases , '/home/foo/a.py' )
259
264
260
- def test_wildcard (self ):
261
- aliases = PathAliases ()
265
+ def test_wildcard (self , rel_yn ):
266
+ aliases = PathAliases (relative = rel_yn )
262
267
aliases .add ('/ned/home/*/src' , './mysrc' )
263
- self .assert_mapped (aliases , '/ned/home/foo/src/a.py' , './mysrc/a.py' )
268
+ self .assert_mapped (aliases , '/ned/home/foo/src/a.py' , './mysrc/a.py' , relative = rel_yn )
264
269
265
- aliases = PathAliases ()
270
+ aliases = PathAliases (relative = rel_yn )
266
271
aliases .add ('/ned/home/*/src/' , './mysrc' )
267
- self .assert_mapped (aliases , '/ned/home/foo/src/a.py' , './mysrc/a.py' )
272
+ self .assert_mapped (aliases , '/ned/home/foo/src/a.py' , './mysrc/a.py' , relative = rel_yn )
268
273
269
- def test_no_accidental_match (self ):
270
- aliases = PathAliases ()
274
+ def test_no_accidental_match (self , rel_yn ):
275
+ aliases = PathAliases (relative = rel_yn )
271
276
aliases .add ('/home/*/src' , './mysrc' )
272
277
self .assert_unchanged (aliases , '/home/foo/srcetc' )
273
278
274
- def test_multiple_patterns (self ):
275
- aliases = PathAliases ()
279
+ def test_multiple_patterns (self , rel_yn ):
280
+ aliases = PathAliases (relative = rel_yn )
276
281
aliases .add ('/home/*/src' , './mysrc' )
277
282
aliases .add ('/lib/*/libsrc' , './mylib' )
278
- self .assert_mapped (aliases , '/home/foo/src/a.py' , './mysrc/a.py' )
279
- self .assert_mapped (aliases , '/lib/foo/libsrc/a.py' , './mylib/a.py' )
283
+ self .assert_mapped (aliases , '/home/foo/src/a.py' , './mysrc/a.py' , relative = rel_yn )
284
+ self .assert_mapped (aliases , '/lib/foo/libsrc/a.py' , './mylib/a.py' , relative = rel_yn )
280
285
281
286
def test_cant_have_wildcard_at_end (self ):
282
287
aliases = PathAliases ()
@@ -295,80 +300,85 @@ def test_no_accidental_munging(self):
295
300
self .assert_mapped (aliases , r'c:\Zoo\boo\foo.py' , 'src/foo.py' )
296
301
self .assert_mapped (aliases , r'/home/ned$/foo.py' , 'src/foo.py' )
297
302
298
- def test_paths_are_os_corrected (self ):
299
- aliases = PathAliases ()
303
+ def test_paths_are_os_corrected (self , rel_yn ):
304
+ aliases = PathAliases (relative = rel_yn )
300
305
aliases .add ('/home/ned/*/src' , './mysrc' )
301
306
aliases .add (r'c:\ned\src' , './mysrc' )
302
- self .assert_mapped (aliases , r'C:\Ned\src\sub\a.py' , './mysrc/sub/a.py' )
307
+ self .assert_mapped (aliases , r'C:\Ned\src\sub\a.py' , './mysrc/sub/a.py' , relative = rel_yn )
303
308
304
- aliases = PathAliases ()
309
+ aliases = PathAliases (relative = rel_yn )
305
310
aliases .add ('/home/ned/*/src' , r'.\mysrc' )
306
311
aliases .add (r'c:\ned\src' , r'.\mysrc' )
307
- self .assert_mapped (aliases , r'/home/ned/foo/src/sub/a.py' , r'.\mysrc\sub\a.py' )
312
+ self .assert_mapped (aliases , r'/home/ned/foo/src/sub/a.py' , r'.\mysrc\sub\a.py' , relative = rel_yn )
308
313
309
- def test_windows_on_linux (self ):
314
+ def test_windows_on_linux (self , rel_yn ):
310
315
# https://github.com/nedbat/coveragepy/issues/618
311
316
lin = "*/project/module/"
312
317
win = "*\\ project\\ module\\ "
313
318
314
319
# Try the paths in both orders.
315
320
for paths in [[lin , win ], [win , lin ]]:
316
- aliases = PathAliases ()
321
+ aliases = PathAliases (relative = rel_yn )
317
322
for path in paths :
318
323
aliases .add (path , "project/module" )
319
324
self .assert_mapped (
320
325
aliases ,
321
326
"C:\\ a\\ path\\ somewhere\\ coveragepy_test\\ project\\ module\\ tests\\ file.py" ,
322
- "project/module/tests/file.py"
327
+ "project/module/tests/file.py" ,
328
+ relative = rel_yn ,
323
329
)
324
330
325
- def test_linux_on_windows (self ):
331
+ def test_linux_on_windows (self , rel_yn ):
326
332
# https://github.com/nedbat/coveragepy/issues/618
327
333
lin = "*/project/module/"
328
334
win = "*\\ project\\ module\\ "
329
335
330
336
# Try the paths in both orders.
331
337
for paths in [[lin , win ], [win , lin ]]:
332
- aliases = PathAliases ()
338
+ aliases = PathAliases (relative = rel_yn )
333
339
for path in paths :
334
340
aliases .add (path , "project\\ module" )
335
341
self .assert_mapped (
336
342
aliases ,
337
343
"C:/a/path/somewhere/coveragepy_test/project/module/tests/file.py" ,
338
- "project\\ module\\ tests\\ file.py"
344
+ "project\\ module\\ tests\\ file.py" ,
345
+ relative = rel_yn ,
339
346
)
340
347
341
- def test_multiple_wildcard (self ):
342
- aliases = PathAliases ()
348
+ def test_multiple_wildcard (self , rel_yn ):
349
+ aliases = PathAliases (relative = rel_yn )
343
350
aliases .add ('/home/jenkins/*/a/*/b/*/django' , './django' )
344
351
self .assert_mapped (
345
352
aliases ,
346
353
'/home/jenkins/xx/a/yy/b/zz/django/foo/bar.py' ,
347
- './django/foo/bar.py'
354
+ './django/foo/bar.py' ,
355
+ relative = rel_yn ,
348
356
)
349
357
350
- def test_windows_root_paths (self ):
351
- aliases = PathAliases ()
358
+ def test_windows_root_paths (self , rel_yn ):
359
+ aliases = PathAliases (relative = rel_yn )
352
360
aliases .add ('X:\\ ' , '/tmp/src' )
353
361
self .assert_mapped (
354
362
aliases ,
355
363
"X:\\ a\\ file.py" ,
356
- "/tmp/src/a/file.py"
364
+ "/tmp/src/a/file.py" ,
365
+ relative = rel_yn ,
357
366
)
358
367
self .assert_mapped (
359
368
aliases ,
360
369
"X:\\ file.py" ,
361
- "/tmp/src/file.py"
370
+ "/tmp/src/file.py" ,
371
+ relative = rel_yn ,
362
372
)
363
373
364
- def test_leading_wildcard (self ):
365
- aliases = PathAliases ()
374
+ def test_leading_wildcard (self , rel_yn ):
375
+ aliases = PathAliases (relative = rel_yn )
366
376
aliases .add ('*/d1' , './mysrc1' )
367
377
aliases .add ('*/d2' , './mysrc2' )
368
- self .assert_mapped (aliases , '/foo/bar/d1/x.py' , './mysrc1/x.py' )
369
- self .assert_mapped (aliases , '/foo/bar/d2/y.py' , './mysrc2/y.py' )
378
+ self .assert_mapped (aliases , '/foo/bar/d1/x.py' , './mysrc1/x.py' , relative = rel_yn )
379
+ self .assert_mapped (aliases , '/foo/bar/d2/y.py' , './mysrc2/y.py' , relative = rel_yn )
370
380
371
- def test_dot (self ):
381
+ def test_dot (self , rel_yn ):
372
382
cases = ['.' , '..' , '../other' ]
373
383
if not env .WINDOWS :
374
384
# The root test case was added for the manylinux Docker images,
@@ -382,7 +392,7 @@ def test_dot(self):
382
392
the_file = os .path .abspath (os .path .realpath (the_file ))
383
393
384
394
assert '~' not in the_file # to be sure the test is pure.
385
- self .assert_mapped (aliases , the_file , '/the/source/a.py' )
395
+ self .assert_mapped (aliases , the_file , '/the/source/a.py' , relative = rel_yn )
386
396
387
397
388
398
class FindPythonFilesTest (CoverageTest ):
0 commit comments