summaryrefslogtreecommitdiff
path: root/tests/test_files.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_files.py')
-rw-r--r--tests/test_files.py102
1 files changed, 63 insertions, 39 deletions
diff --git a/tests/test_files.py b/tests/test_files.py
index ae56e728..b658853a 100644
--- a/tests/test_files.py
+++ b/tests/test_files.py
@@ -1,19 +1,24 @@
+# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+# For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
+
"""Tests for files.py"""
import os
import os.path
+from coverage import files
from coverage.files import (
- FileLocator, TreeMatcher, FnmatchMatcher, ModuleMatcher, PathAliases,
- find_python_files, abs_file
+ TreeMatcher, FnmatchMatcher, ModuleMatcher, PathAliases,
+ find_python_files, abs_file, actual_path
)
from coverage.misc import CoverageException
+from coverage import env
from tests.coveragetest import CoverageTest
-class FileLocatorTest(CoverageTest):
- """Tests of `FileLocator`."""
+class FilesTest(CoverageTest):
+ """Tests of coverage.files."""
def abs_path(self, p):
"""Return the absolute path for `p`."""
@@ -21,11 +26,11 @@ class FileLocatorTest(CoverageTest):
def test_simple(self):
self.make_file("hello.py")
- fl = FileLocator()
- self.assertEqual(fl.relative_filename("hello.py"), "hello.py")
+ files.set_relative_directory()
+ self.assertEqual(files.relative_filename("hello.py"), "hello.py")
a = self.abs_path("hello.py")
self.assertNotEqual(a, "hello.py")
- self.assertEqual(fl.relative_filename(a), "hello.py")
+ self.assertEqual(files.relative_filename(a), "hello.py")
def test_peer_directories(self):
self.make_file("sub/proj1/file1.py")
@@ -34,20 +39,20 @@ class FileLocatorTest(CoverageTest):
a2 = self.abs_path("sub/proj2/file2.py")
d = os.path.normpath("sub/proj1")
os.chdir(d)
- fl = FileLocator()
- self.assertEqual(fl.relative_filename(a1), "file1.py")
- self.assertEqual(fl.relative_filename(a2), a2)
+ files.set_relative_directory()
+ self.assertEqual(files.relative_filename(a1), "file1.py")
+ self.assertEqual(files.relative_filename(a2), a2)
def test_filepath_contains_absolute_prefix_twice(self):
# https://bitbucket.org/ned/coveragepy/issue/194
# Build a path that has two pieces matching the absolute path prefix.
# Technically, this test doesn't do that on Windows, but drive
# letters make that impractical to achieve.
- fl = FileLocator()
+ files.set_relative_directory()
d = abs_file(os.curdir)
trick = os.path.splitdrive(d)[1].lstrip(os.path.sep)
rel = os.path.join('sub', trick, 'file1.py')
- self.assertEqual(fl.relative_filename(abs_file(rel)), rel)
+ self.assertEqual(files.relative_filename(abs_file(rel)), rel)
class MatcherTest(CoverageTest):
@@ -55,11 +60,11 @@ class MatcherTest(CoverageTest):
def setUp(self):
super(MatcherTest, self).setUp()
- self.fl = FileLocator()
+ files.set_relative_directory()
def assertMatches(self, matcher, filepath, matches):
"""The `matcher` should agree with `matches` about `filepath`."""
- canonical = self.fl.canonical_filename(filepath)
+ canonical = files.canonical_filename(filepath)
self.assertEqual(
matcher.match(canonical), matches,
"File %s should have matched as %s" % (filepath, matches)
@@ -73,10 +78,9 @@ class MatcherTest(CoverageTest):
(self.make_file("sub3/file4.py"), True),
(self.make_file("sub3/file5.c"), False),
]
- fl = FileLocator()
trees = [
- fl.canonical_filename("sub"),
- fl.canonical_filename("sub3/file4.py"),
+ files.canonical_filename("sub"),
+ files.canonical_filename("sub3/file4.py"),
]
tm = TreeMatcher(trees)
self.assertEqual(tm.info(), trees)
@@ -146,34 +150,48 @@ 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 assert_not_mapped(self, aliases, inp):
+ """Assert that `inp` mapped through `aliases` is unchanged."""
+ self.assertEqual(aliases.map(inp), inp)
+
def test_noop(self):
aliases = PathAliases()
- self.assertEqual(aliases.map('/ned/home/a.py'), '/ned/home/a.py')
+ self.assert_not_mapped(aliases, '/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_not_mapped(aliases, '/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_not_mapped(aliases, '/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()
@@ -189,34 +207,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')
-
-
-class RelativePathAliasesTest(CoverageTest):
- """Tests for coverage/files.py:PathAliases, with relative files."""
-
- run_in_temp_dir = False
+ self.assert_mapped(aliases, '/foo/bar/d1/x.py', './mysrc1/x.py')
+ self.assert_mapped(aliases, '/foo/bar/d2/y.py', './mysrc2/y.py')
def test_dot(self):
for d in ('.', '..', '../other', '~'):
@@ -227,7 +237,7 @@ class RelativePathAliasesTest(CoverageTest):
the_file = os.path.abspath(os.path.realpath(the_file))
assert '~' not in the_file # to be sure the test is pure.
- self.assertEqual(aliases.map(the_file), '/the/source/a.py')
+ self.assert_mapped(aliases, the_file, '/the/source/a.py')
class FindPythonFilesTest(CoverageTest):
@@ -248,3 +258,17 @@ class FindPythonFilesTest(CoverageTest):
"sub/ssub/__init__.py", "sub/ssub/s.py",
"sub/windows.pyw",
])
+
+
+class WindowsFileTest(CoverageTest):
+ """Windows-specific tests of file name handling."""
+
+ run_in_temp_dir = False
+
+ def setUp(self):
+ if not env.WINDOWS:
+ self.skip("Only need to run Windows tests on Windows.")
+ super(WindowsFileTest, self).setUp()
+
+ def test_actual_path(self):
+ self.assertEquals(actual_path(r'c:\Windows'), actual_path(r'C:\wINDOWS'))