summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/cmdline.py5
-rw-r--r--coverage/execfile.py11
-rw-r--r--test/test_execfile.py19
-rw-r--r--test/try_execfile.py5
4 files changed, 37 insertions, 3 deletions
diff --git a/coverage/cmdline.py b/coverage/cmdline.py
index 2d4977c7..53693981 100644
--- a/coverage/cmdline.py
+++ b/coverage/cmdline.py
@@ -4,6 +4,7 @@ import getopt, os, sys
from coverage.annotate import AnnotateReporter
from coverage.summary import SummaryReporter
+from coverage.execfile import run_python_file
USAGE = r"""
Coverage version %(__version__)s
@@ -127,10 +128,8 @@ class CoverageScript:
return ERR
# Create the runtime environment the script on the cmdline expects.
sys.argv = args
- sys.path[0] = os.path.dirname(sys.argv[0])
- import __main__ # TODO: I think this is useless...
self.coverage.start()
- execfile(sys.argv[0], __main__.__dict__)
+ run_python_file(sys.argv[0])
self.coverage.stop()
if settings.get('combine'):
diff --git a/coverage/execfile.py b/coverage/execfile.py
new file mode 100644
index 00000000..bcf5bf4f
--- /dev/null
+++ b/coverage/execfile.py
@@ -0,0 +1,11 @@
+"""Execute files of Python code."""
+
+import os, sys
+
+def run_python_file(filename):
+ mod_globals = {
+ '__name__': '__main__',
+ '__file__': filename,
+ }
+ sys.path[0] = os.path.dirname(filename)
+ execfile(filename, mod_globals)
diff --git a/test/test_execfile.py b/test/test_execfile.py
new file mode 100644
index 00000000..90340f57
--- /dev/null
+++ b/test/test_execfile.py
@@ -0,0 +1,19 @@
+from coverage.execfile import run_python_file
+import cStringIO, os, sys, unittest
+
+here = os.path.dirname(__file__)
+
+class RunTests(unittest.TestCase):
+ def setUp(self):
+ self.oldstdout = sys.stdout
+ self.stdout = sys.stdout = cStringIO.StringIO()
+
+ def tearDown(self):
+ self.stdout = self.oldstdout
+
+ def test_run_python_file(self):
+ tryfile = os.path.join(here, "try_execfile.py")
+ run_python_file(tryfile)
+ mod_globs = eval(self.stdout.getvalue())
+ self.assertEqual(mod_globs['__name__'], "__main__")
+ self.assertEqual(os.path.basename(mod_globs['__file__']), "try_execfile.py")
diff --git a/test/try_execfile.py b/test/try_execfile.py
new file mode 100644
index 00000000..523823e4
--- /dev/null
+++ b/test/try_execfile.py
@@ -0,0 +1,5 @@
+globals_to_check = {
+ '__name__': __name__,
+ '__file__': __file__,
+}
+print repr(globals_to_check)