diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2015-01-17 16:44:34 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2015-01-17 16:44:34 -0500 |
commit | a7fc111387f1f782f3404a21c103cac4812f9e74 (patch) | |
tree | f8ee2033ab7d6227cb4e42512461aa904b8ab836 | |
parent | a13742532a3a283f2e690256d38fe5c9ffcf2049 (diff) | |
download | python-coveragepy-git-a7fc111387f1f782f3404a21c103cac4812f9e74.tar.gz |
When finding the source for a frame, really check if it exists
-rw-r--r-- | coverage/control.py | 17 | ||||
-rw-r--r-- | tests/test_codeunit.py | 17 | ||||
-rw-r--r-- | tests/test_summary.py | 4 |
3 files changed, 25 insertions, 13 deletions
diff --git a/coverage/control.py b/coverage/control.py index 63c9d382..1044fad0 100644 --- a/coverage/control.py +++ b/coverage/control.py @@ -308,11 +308,18 @@ class Coverage(object): def _source_for_file(self, filename): """Return the source file for `filename`.""" - if not filename.endswith(".py"): - if filename[-4:-1] == ".py": - filename = filename[:-1] - elif filename.endswith("$py.class"): # jython - filename = filename[:-9] + ".py" + if filename.endswith(".py"): + return filename + elif filename.endswith((".pyc", ".pyo")): + try_filename = filename[:-1] + if os.path.exists(try_filename): + return try_filename + if sys.platform == "win32": + try_filename += "w" + if os.path.exists(try_filename): + return try_filename + elif filename.endswith("$py.class"): # Jython + filename = filename[:-9] + ".py" return filename def _name_for_module(self, module_globals, filename): diff --git a/tests/test_codeunit.py b/tests/test_codeunit.py index 1a064fca..ea65d85f 100644 --- a/tests/test_codeunit.py +++ b/tests/test_codeunit.py @@ -12,6 +12,11 @@ from tests.coveragetest import CoverageTest # Unable to import 'aa' (No module named aa) +def native(filename): + """Make `filename` into a native form.""" + return filename.replace("/", os.sep) + + class CodeUnitTest(CoverageTest): """Tests for coverage.codeunit""" @@ -59,9 +64,9 @@ class CodeUnitTest(CoverageTest): acu = PythonCodeUnit(aa) bcu = PythonCodeUnit(aa.bb) ccu = PythonCodeUnit(aa.bb.cc) - self.assertEqual(acu.name, "aa.py") - self.assertEqual(bcu.name, "aa/bb.py") - self.assertEqual(ccu.name, "aa/bb/cc.py") + self.assertEqual(acu.name, native("aa.py")) + self.assertEqual(bcu.name, native("aa/bb.py")) + self.assertEqual(ccu.name, native("aa/bb/cc.py")) self.assertEqual(acu.flat_rootname(), "aa_py") self.assertEqual(bcu.flat_rootname(), "aa_bb_py") self.assertEqual(ccu.flat_rootname(), "aa_bb_cc_py") @@ -77,9 +82,9 @@ class CodeUnitTest(CoverageTest): acu = PythonCodeUnit(aa.afile) bcu = PythonCodeUnit(aa.bb.bfile) ccu = PythonCodeUnit(aa.bb.cc.cfile) - self.assertEqual(acu.name, "aa/afile.py") - self.assertEqual(bcu.name, "aa/bb/bfile.py") - self.assertEqual(ccu.name, "aa/bb/cc/cfile.py") + self.assertEqual(acu.name, native("aa/afile.py")) + self.assertEqual(bcu.name, native("aa/bb/bfile.py")) + self.assertEqual(ccu.name, native("aa/bb/cc/cfile.py")) self.assertEqual(acu.flat_rootname(), "aa_afile_py") self.assertEqual(bcu.flat_rootname(), "aa_bb_bfile_py") self.assertEqual(ccu.flat_rootname(), "aa_bb_cc_cfile_py") diff --git a/tests/test_summary.py b/tests/test_summary.py index 8c9cf6d7..fa5b4461 100644 --- a/tests/test_summary.py +++ b/tests/test_summary.py @@ -435,8 +435,8 @@ class SummaryTest(CoverageTest): report = self.get_report(cov) self.assertNotIn("NoSource", report) report = report.splitlines() - self.assertIn("start 2 0 100%", report) - self.assertIn("mod 1 0 100%", report) + self.assertIn("start.pyw 2 0 100%", report) + self.assertIn("mod.pyw 1 0 100%", report) class SummaryTest2(CoverageTest): |