summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-04-15 13:22:51 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-04-15 13:22:51 -0400
commit0b79941f37f6bd9a56afac0178713d082a0db0fb (patch)
treea4091e9455505d09a132732cbeed5d2a377190e0
parentdbf28ca29e5e372e5beec8b1d5b4abe5620d556d (diff)
downloadpython-coveragepy-0b79941f37f6bd9a56afac0178713d082a0db0fb.tar.gz
If a module was loaded from a .pyc, report its file as .py
-rw-r--r--coverage/codeunit.py3
-rw-r--r--coverage/control.py3
-rw-r--r--test/test_coverage.py51
3 files changed, 54 insertions, 3 deletions
diff --git a/coverage/codeunit.py b/coverage/codeunit.py
index 221d677..96ed43b 100644
--- a/coverage/codeunit.py
+++ b/coverage/codeunit.py
@@ -57,6 +57,9 @@ class CodeUnit:
f = morf.__file__
else:
f = morf
+ # .pyc files should always refer to a .py instead.
+ if f.endswith('.pyc'):
+ f = f[:-1]
self.filename = file_locator.canonical_filename(f)
if hasattr(morf, '__name__'):
diff --git a/coverage/control.py b/coverage/control.py
index db9b0a6..cb13f2f 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -119,9 +119,6 @@ class coverage:
filename = code_unit.filename
ext = os.path.splitext(filename)[1]
source = None
- if ext == '.pyc':
- filename = filename[:-1]
- ext = '.py'
if ext == '.py':
if not os.path.exists(filename):
source = self.file_locator.get_zip_data(filename)
diff --git a/test/test_coverage.py b/test/test_coverage.py
index 2974296..3b1898a 100644
--- a/test/test_coverage.py
+++ b/test/test_coverage.py
@@ -22,6 +22,11 @@ class CoverageTest(unittest.TestCase):
self.tempdir.makedirs()
self.olddir = os.getcwd()
os.chdir(self.tempdir)
+
+ # Modules should be importable from this temp directory.
+ self.oldsyspath = sys.path[:]
+ sys.path.insert(0, '')
+
# Keep a counter to make every call to checkCoverage unique.
self.n = 0
@@ -29,6 +34,7 @@ class CoverageTest(unittest.TestCase):
def tearDown(self):
coverage.end_recursive()
+ sys.path = self.oldsyspath
# Get rid of the temporary directory.
os.chdir(self.olddir)
self.temproot.rmtree()
@@ -1810,6 +1816,51 @@ class ApiTests(CoverageTest):
self.assertEqual(statements, [1])
self.assertEqual(missing, [1])
+ def testFileNames(self):
+
+ self.makeFile("mymain", """\
+ import mymod
+ a = 1
+ """)
+
+ self.makeFile("mymod", """\
+ fooey = 17
+ """)
+
+ # Import the python file, executing it.
+ cov = coverage.coverage()
+ cov.start()
+ self.importModule("mymain")
+ cov.stop()
+
+ filename, _, _, _ = cov.analysis("mymain.py")
+ self.assertEqual(os.path.basename(filename), "mymain.py")
+ filename, _, _, _ = cov.analysis("mymod.py")
+ self.assertEqual(os.path.basename(filename), "mymod.py")
+
+ filename, _, _, _ = cov.analysis(sys.modules["mymain"])
+ self.assertEqual(os.path.basename(filename), "mymain.py")
+ filename, _, _, _ = cov.analysis(sys.modules["mymod"])
+ self.assertEqual(os.path.basename(filename), "mymod.py")
+
+ # Import the python file, executing it again, once it's been compiled
+ # already.
+ cov = coverage.coverage()
+ cov.start()
+ self.importModule("mymain")
+ cov.stop()
+
+ filename, _, _, _ = cov.analysis("mymain.py")
+ self.assertEqual(os.path.basename(filename), "mymain.py")
+ filename, _, _, _ = cov.analysis("mymod.py")
+ self.assertEqual(os.path.basename(filename), "mymod.py")
+
+ filename, _, _, _ = cov.analysis(sys.modules["mymain"])
+ self.assertEqual(os.path.basename(filename), "mymain.py")
+ filename, _, _, _ = cov.analysis(sys.modules["mymod"])
+ self.assertEqual(os.path.basename(filename), "mymod.py")
+
+
class CmdLineTests(CoverageTest):
def help_fn(self, error=None):