summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/files.py11
-rw-r--r--tests/test_data.py10
-rw-r--r--tests/test_files.py38
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):