summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2015-01-17 16:44:34 -0500
committerNed Batchelder <ned@nedbatchelder.com>2015-01-17 16:44:34 -0500
commita7fc111387f1f782f3404a21c103cac4812f9e74 (patch)
treef8ee2033ab7d6227cb4e42512461aa904b8ab836
parenta13742532a3a283f2e690256d38fe5c9ffcf2049 (diff)
downloadpython-coveragepy-git-a7fc111387f1f782f3404a21c103cac4812f9e74.tar.gz
When finding the source for a frame, really check if it exists
-rw-r--r--coverage/control.py17
-rw-r--r--tests/test_codeunit.py17
-rw-r--r--tests/test_summary.py4
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):