diff options
author | R David Murray <rdmurray@bitdance.com> | 2012-04-11 19:17:37 (GMT) |
---|---|---|
committer | R David Murray <rdmurray@bitdance.com> | 2012-04-11 19:17:37 (GMT) |
commit | ea169801e14712b9685f369fd41940a11cefcbd0 (patch) | |
tree | 031efe3b2e754106643b8f20e58eb1ec01422c3f | |
parent | 690598aba28c0b0fcc01888ccd0233df4bb7f95f (diff) | |
parent | 776c0df42bbcf7060c49954378bfd1185a20c050 (diff) | |
download | cpython-ea169801e14712b9685f369fd41940a11cefcbd0.zip cpython-ea169801e14712b9685f369fd41940a11cefcbd0.tar.gz cpython-ea169801e14712b9685f369fd41940a11cefcbd0.tar.bz2 |
#14508: make gprof2html script runnable under python3
Not that I haven't tested it to make sure it works, just that it
can run against an empty source file.
Initial patch by Popa.Claudiu.
Here we also add a test (which uses mock, which is why I didn't
check it in on 3.2).
-rw-r--r-- | Lib/test/test_tools.py | 25 | ||||
-rwxr-xr-x | Tools/scripts/gprof2html.py | 12 |
2 files changed, 31 insertions, 6 deletions
diff --git a/Lib/test/test_tools.py b/Lib/test/test_tools.py index cfe13ac..8ccabfb 100644 --- a/Lib/test/test_tools.py +++ b/Lib/test/test_tools.py @@ -8,6 +8,7 @@ import os import sys import imp import unittest +from unittest import mock import sysconfig import tempfile from test import support @@ -40,7 +41,7 @@ class TestSundryScripts(unittest.TestCase): # added for a script it should be added to the whitelist below. # scripts that have independent tests. - whitelist = ['reindent.py'] + whitelist = ['reindent.py', 'pdeps.py', 'gprof2html'] # scripts that can't be imported without running blacklist = ['make_ctype.py'] # scripts that use windows-only modules @@ -99,6 +100,28 @@ class PdepsTests(unittest.TestCase): self.pdeps.inverse({'a': []}) +class Gprof2htmlTests(unittest.TestCase): + + def setUp(self): + path = os.path.join(scriptsdir, 'gprof2html.py') + self.gprof = imp.load_source('gprof2html', path) + oldargv = sys.argv + def fixup(): + sys.argv = oldargv + self.addCleanup(fixup) + sys.argv = [] + + def test_gprof(self): + # Issue #14508: this used to fail with an NameError. + with mock.patch.object(self.gprof, 'webbrowser') as wmock, \ + tempfile.TemporaryDirectory() as tmpdir: + fn = os.path.join(tmpdir, 'abc') + open(fn, 'w').close() + sys.argv = ['gprof2html', fn] + self.gprof.main() + self.assertTrue(wmock.open.called) + + def test_main(): support.run_unittest(*[obj for obj in globals().values() if isinstance(obj, type)]) diff --git a/Tools/scripts/gprof2html.py b/Tools/scripts/gprof2html.py index f3c7202..6c899d9 100755 --- a/Tools/scripts/gprof2html.py +++ b/Tools/scripts/gprof2html.py @@ -19,17 +19,19 @@ trailer = """\ </html> """ -def add_escapes(input): - for line in input: - yield cgi.escape(line) +def add_escapes(filename): + with open(filename) as fp: + for line in fp: + yield cgi.escape(line) + def main(): filename = "gprof.out" if sys.argv[1:]: filename = sys.argv[1] outputfilename = filename + ".html" - input = add_escapes(file(filename)) - output = file(outputfilename, "w") + input = add_escapes(filename) + output = open(outputfilename, "w") output.write(header % filename) for line in input: output.write(line) |