@@ -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,90 @@ 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 (
313
+ aliases ,
314
+ r'/home/ned/foo/src/sub/a.py' ,
315
+ r'.\mysrc\sub\a.py' ,
316
+ relative = rel_yn ,
317
+ )
308
318
309
- def test_windows_on_linux (self ):
319
+ def test_windows_on_linux (self , rel_yn ):
310
320
# https://github.com/nedbat/coveragepy/issues/618
311
321
lin = "*/project/module/"
312
322
win = "*\\ project\\ module\\ "
313
323
314
324
# Try the paths in both orders.
315
325
for paths in [[lin , win ], [win , lin ]]:
316
- aliases = PathAliases ()
326
+ aliases = PathAliases (relative = rel_yn )
317
327
for path in paths :
318
328
aliases .add (path , "project/module" )
319
329
self .assert_mapped (
320
330
aliases ,
321
331
"C:\\ a\\ path\\ somewhere\\ coveragepy_test\\ project\\ module\\ tests\\ file.py" ,
322
- "project/module/tests/file.py"
332
+ "project/module/tests/file.py" ,
333
+ relative = rel_yn ,
323
334
)
324
335
325
- def test_linux_on_windows (self ):
336
+ def test_linux_on_windows (self , rel_yn ):
326
337
# https://github.com/nedbat/coveragepy/issues/618
327
338
lin = "*/project/module/"
328
339
win = "*\\ project\\ module\\ "
329
340
330
341
# Try the paths in both orders.
331
342
for paths in [[lin , win ], [win , lin ]]:
332
- aliases = PathAliases ()
343
+ aliases = PathAliases (relative = rel_yn )
333
344
for path in paths :
334
345
aliases .add (path , "project\\ module" )
335
346
self .assert_mapped (
336
347
aliases ,
337
348
"C:/a/path/somewhere/coveragepy_test/project/module/tests/file.py" ,
338
- "project\\ module\\ tests\\ file.py"
349
+ "project\\ module\\ tests\\ file.py" ,
350
+ relative = rel_yn ,
339
351
)
340
352
341
- def test_multiple_wildcard (self ):
342
- aliases = PathAliases ()
353
+ def test_multiple_wildcard (self , rel_yn ):
354
+ aliases = PathAliases (relative = rel_yn )
343
355
aliases .add ('/home/jenkins/*/a/*/b/*/django' , './django' )
344
356
self .assert_mapped (
345
357
aliases ,
346
358
'/home/jenkins/xx/a/yy/b/zz/django/foo/bar.py' ,
347
- './django/foo/bar.py'
359
+ './django/foo/bar.py' ,
360
+ relative = rel_yn ,
348
361
)
349
362
350
- def test_windows_root_paths (self ):
351
- aliases = PathAliases ()
363
+ def test_windows_root_paths (self , rel_yn ):
364
+ aliases = PathAliases (relative = rel_yn )
352
365
aliases .add ('X:\\ ' , '/tmp/src' )
353
366
self .assert_mapped (
354
367
aliases ,
355
368
"X:\\ a\\ file.py" ,
356
- "/tmp/src/a/file.py"
369
+ "/tmp/src/a/file.py" ,
370
+ relative = rel_yn ,
357
371
)
358
372
self .assert_mapped (
359
373
aliases ,
360
374
"X:\\ file.py" ,
361
- "/tmp/src/file.py"
375
+ "/tmp/src/file.py" ,
376
+ relative = rel_yn ,
362
377
)
363
378
364
- def test_leading_wildcard (self ):
365
- aliases = PathAliases ()
379
+ def test_leading_wildcard (self , rel_yn ):
380
+ aliases = PathAliases (relative = rel_yn )
366
381
aliases .add ('*/d1' , './mysrc1' )
367
382
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' )
383
+ self .assert_mapped (aliases , '/foo/bar/d1/x.py' , './mysrc1/x.py' , relative = rel_yn )
384
+ self .assert_mapped (aliases , '/foo/bar/d2/y.py' , './mysrc2/y.py' , relative = rel_yn )
370
385
371
- def test_dot (self ):
386
+ def test_dot (self , rel_yn ):
372
387
cases = ['.' , '..' , '../other' ]
373
388
if not env .WINDOWS :
374
389
# The root test case was added for the manylinux Docker images,
@@ -382,7 +397,7 @@ def test_dot(self):
382
397
the_file = os .path .abspath (os .path .realpath (the_file ))
383
398
384
399
assert '~' not in the_file # to be sure the test is pure.
385
- self .assert_mapped (aliases , the_file , '/the/source/a.py' )
400
+ self .assert_mapped (aliases , the_file , '/the/source/a.py' , relative = rel_yn )
386
401
387
402
388
403
class FindPythonFilesTest (CoverageTest ):
0 commit comments