diff options
-rw-r--r-- | coverage/files.py | 11 | ||||
-rw-r--r-- | tests/test_data.py | 10 | ||||
-rw-r--r-- | tests/test_files.py | 38 |
3 files changed, 35 insertions, 24 deletions
diff --git a/coverage/files.py b/coverage/files.py index 665e2f33..c9afefd8 100644 --- a/coverage/files.py +++ b/coverage/files.py @@ -237,12 +237,9 @@ class PathAliases(object): A `PathAliases` object tracks a list of pattern/result pairs, and can map a path through those aliases to produce a unified path. - `locator` is a FileLocator that is used to canonicalize the results. - """ - def __init__(self, locator=None): + def __init__(self): self.aliases = [] - self.locator = locator def add(self, pattern, result): """Add the `pattern`/`result` pair to the list of aliases. @@ -295,6 +292,9 @@ class PathAliases(object): The separator style in the result is made to match that of the result in the alias. + Returns: + The mapped path. This is always a canonical filename. + """ for regex, result, pattern_sep, result_sep in self.aliases: m = regex.match(path) @@ -302,8 +302,7 @@ class PathAliases(object): new = path.replace(m.group(0), result) if pattern_sep != result_sep: new = new.replace(pattern_sep, result_sep) - if self.locator: - new = self.locator.canonical_filename(new) + new = canonical_filename(new) return new return path diff --git a/tests/test_data.py b/tests/test_data.py index 776f7b59..ff8255ba 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -4,7 +4,7 @@ import os from coverage.backward import pickle from coverage.data import CoverageData -from coverage.files import PathAliases +from coverage.files import PathAliases, canonical_filename from tests.coveragetest import CoverageTest @@ -156,10 +156,14 @@ class DataTest(DataTestHelpers, CoverageTest): aliases.add("/home/ned/proj/src/", "./") aliases.add(r"c:\ned\test", "./") covdata3.combine_parallel_data(aliases=aliases) + + apy = canonical_filename('./a.py') + sub_bpy = canonical_filename('./sub/b.py') + self.assert_summary( - covdata3, {'./a.py': 4, './sub/b.py': 2}, fullpath=True + covdata3, { apy: 4, sub_bpy: 2, }, fullpath=True ) - self.assert_measured_files(covdata3, ['./a.py', './sub/b.py']) + self.assert_measured_files(covdata3, [apy,sub_bpy]) class DataTestInTempDir(DataTestHelpers, CoverageTest): diff --git a/tests/test_files.py b/tests/test_files.py index 483ede9f..6549c0ad 100644 --- a/tests/test_files.py +++ b/tests/test_files.py @@ -147,34 +147,44 @@ class PathAliasesTest(CoverageTest): run_in_temp_dir = False + def assert_mapped(self, aliases, inp, out): + """Assert that `inp` mapped through `aliases` produces `out`. + + `out` is canonicalized first, since aliases always produce + canonicalized paths. + + """ + self.assertEqual(aliases.map(inp), files.canonical_filename(out)) + def test_noop(self): aliases = PathAliases() - self.assertEqual(aliases.map('/ned/home/a.py'), '/ned/home/a.py') + self.assert_mapped(aliases, '/ned/home/a.py', '/ned/home/a.py') def test_nomatch(self): aliases = PathAliases() aliases.add('/home/*/src', './mysrc') - self.assertEqual(aliases.map('/home/foo/a.py'), '/home/foo/a.py') + self.assert_mapped(aliases, '/home/foo/a.py', '/home/foo/a.py') def test_wildcard(self): aliases = PathAliases() aliases.add('/ned/home/*/src', './mysrc') - self.assertEqual(aliases.map('/ned/home/foo/src/a.py'), './mysrc/a.py') + self.assert_mapped(aliases, '/ned/home/foo/src/a.py', './mysrc/a.py') + aliases = PathAliases() aliases.add('/ned/home/*/src/', './mysrc') - self.assertEqual(aliases.map('/ned/home/foo/src/a.py'), './mysrc/a.py') + self.assert_mapped(aliases, '/ned/home/foo/src/a.py', './mysrc/a.py') def test_no_accidental_match(self): aliases = PathAliases() aliases.add('/home/*/src', './mysrc') - self.assertEqual(aliases.map('/home/foo/srcetc'), '/home/foo/srcetc') + self.assert_mapped(aliases, '/home/foo/srcetc', '/home/foo/srcetc') def test_multiple_patterns(self): aliases = PathAliases() aliases.add('/home/*/src', './mysrc') aliases.add('/lib/*/libsrc', './mylib') - self.assertEqual(aliases.map('/home/foo/src/a.py'), './mysrc/a.py') - self.assertEqual(aliases.map('/lib/foo/libsrc/a.py'), './mylib/a.py') + self.assert_mapped(aliases, '/home/foo/src/a.py', './mysrc/a.py') + self.assert_mapped(aliases, '/lib/foo/libsrc/a.py', './mylib/a.py') def test_cant_have_wildcard_at_end(self): aliases = PathAliases() @@ -190,28 +200,26 @@ class PathAliasesTest(CoverageTest): aliases = PathAliases() aliases.add(r'c:\Zoo\boo', 'src/') aliases.add('/home/ned$', 'src/') - self.assertEqual(aliases.map(r'c:\Zoo\boo\foo.py'), 'src/foo.py') - self.assertEqual(aliases.map(r'/home/ned$/foo.py'), 'src/foo.py') + self.assert_mapped(aliases, r'c:\Zoo\boo\foo.py', 'src/foo.py') + self.assert_mapped(aliases, r'/home/ned$/foo.py', 'src/foo.py') def test_paths_are_os_corrected(self): aliases = PathAliases() aliases.add('/home/ned/*/src', './mysrc') aliases.add(r'c:\ned\src', './mysrc') - mapped = aliases.map(r'C:\Ned\src\sub\a.py') - self.assertEqual(mapped, './mysrc/sub/a.py') + self.assert_mapped(aliases, r'C:\Ned\src\sub\a.py', './mysrc/sub/a.py') aliases = PathAliases() aliases.add('/home/ned/*/src', r'.\mysrc') aliases.add(r'c:\ned\src', r'.\mysrc') - mapped = aliases.map(r'/home/ned/foo/src/sub/a.py') - self.assertEqual(mapped, r'.\mysrc\sub\a.py') + self.assert_mapped(aliases, r'/home/ned/foo/src/sub/a.py', r'.\mysrc\sub\a.py') def test_leading_wildcard(self): aliases = PathAliases() aliases.add('*/d1', './mysrc1') aliases.add('*/d2', './mysrc2') - self.assertEqual(aliases.map('/foo/bar/d1/x.py'), './mysrc1/x.py') - self.assertEqual(aliases.map('/foo/bar/d2/y.py'), './mysrc2/y.py') + self.assert_mapped(aliases, '/foo/bar/d1/x.py', './mysrc1/x.py') + self.assert_mapped(aliases, '/foo/bar/d2/y.py', './mysrc2/y.py') class RelativePathAliasesTest(CoverageTest): |