summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2009-10-25 12:09:05 -0400
committerNed Batchelder <ned@nedbatchelder.com>2009-10-25 12:09:05 -0400
commit4b65b820c1ebbc7f270c6909884a5ffa1f64a341 (patch)
tree9ea458ce936b67b47050f8b8391d1e9eab518bc3
parent0ad0062c5b17c94db1fae7cb073b0b6b417e6c4f (diff)
downloadpython-coveragepy-4b65b820c1ebbc7f270c6909884a5ffa1f64a341.tar.gz
Report errors finding source files to execute more nicely. Fixes issue #23.
-rw-r--r--coverage/execfile.py6
-rw-r--r--test/test_coverage.py6
-rw-r--r--test/test_execfile.py3
3 files changed, 14 insertions, 1 deletions
diff --git a/coverage/execfile.py b/coverage/execfile.py
index cf8e1ec..ddcfa14 100644
--- a/coverage/execfile.py
+++ b/coverage/execfile.py
@@ -3,6 +3,7 @@
import imp, os, sys
from coverage.backward import exec_function
+from coverage.misc import NoSource
try:
@@ -35,7 +36,10 @@ def run_python_file(filename, args):
sys.path[0] = os.path.dirname(filename)
try:
- source = open(filename, 'rU').read()
+ try:
+ source = open(filename, 'rU').read()
+ except IOError:
+ raise NoSource("No file to run: %r" % filename)
exec_function(source, filename, main_mod.__dict__)
finally:
# Restore the old __main__
diff --git a/test/test_coverage.py b/test/test_coverage.py
index 92aef08..4225c46 100644
--- a/test/test_coverage.py
+++ b/test/test_coverage.py
@@ -1748,6 +1748,12 @@ class ProcessTest(CoverageTest):
self.assert_matches(out, "No source for code: '.*fleeting'")
self.assert_("Traceback" not in out)
+ def test_running_missing_file(self):
+ out = self.run_command("coverage run xyzzy.py")
+ self.assert_matches(out, "No file to run: .*xyzzy.py")
+ self.assert_("Traceback" not in out)
+
+
class RecursionTest(CoverageTest):
"""Check what happens when recursive code gets near limits."""
diff --git a/test/test_execfile.py b/test/test_execfile.py
index 1dde705..5e9f4fd 100644
--- a/test/test_execfile.py
+++ b/test/test_execfile.py
@@ -3,6 +3,7 @@
import os, sys
from coverage.execfile import run_python_file
+from coverage.misc import NoSource
sys.path.insert(0, os.path.split(__file__)[0]) # Force relative import for Py3k
from coveragetest import CoverageTest
@@ -59,3 +60,5 @@ class RunTest(CoverageTest):
run_python_file('nl.py', ['nl.py'])
self.assertEqual(self.stdout(), "Hello, world!\n"*3)
+ def test_no_such_file(self):
+ self.assertRaises(NoSource, run_python_file, "xyzzy.py", [])