diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2009-04-03 23:32:19 -0400 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2009-04-03 23:32:19 -0400 |
commit | a56bfefc8d9dac39be06037f2fc074d048b522bc (patch) | |
tree | d1423b45a514ac4d71f06a693bcc1e54c70a02c3 | |
parent | 4910434d33d0928374bf966c00c07feda5b32d77 (diff) | |
download | python-coveragepy-git-a56bfefc8d9dac39be06037f2fc074d048b522bc.tar.gz |
Factor execfile out of cmdline, so that we can call python main programs properly: now they get the correct value for __file__.
-rw-r--r-- | coverage/cmdline.py | 5 | ||||
-rw-r--r-- | coverage/execfile.py | 11 | ||||
-rw-r--r-- | test/test_execfile.py | 19 | ||||
-rw-r--r-- | test/try_execfile.py | 5 |
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) |