Commit ea169801 authored by R David Murray's avatar R David Murray

#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).
parents 690598ab 776c0df4
...@@ -8,6 +8,7 @@ import os ...@@ -8,6 +8,7 @@ import os
import sys import sys
import imp import imp
import unittest import unittest
from unittest import mock
import sysconfig import sysconfig
import tempfile import tempfile
from test import support from test import support
...@@ -40,7 +41,7 @@ class TestSundryScripts(unittest.TestCase): ...@@ -40,7 +41,7 @@ class TestSundryScripts(unittest.TestCase):
# added for a script it should be added to the whitelist below. # added for a script it should be added to the whitelist below.
# scripts that have independent tests. # scripts that have independent tests.
whitelist = ['reindent.py'] whitelist = ['reindent.py', 'pdeps.py', 'gprof2html']
# scripts that can't be imported without running # scripts that can't be imported without running
blacklist = ['make_ctype.py'] blacklist = ['make_ctype.py']
# scripts that use windows-only modules # scripts that use windows-only modules
...@@ -99,6 +100,28 @@ class PdepsTests(unittest.TestCase): ...@@ -99,6 +100,28 @@ class PdepsTests(unittest.TestCase):
self.pdeps.inverse({'a': []}) 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(): def test_main():
support.run_unittest(*[obj for obj in globals().values() support.run_unittest(*[obj for obj in globals().values()
if isinstance(obj, type)]) if isinstance(obj, type)])
......
...@@ -19,17 +19,19 @@ trailer = """\ ...@@ -19,17 +19,19 @@ trailer = """\
</html> </html>
""" """
def add_escapes(input): def add_escapes(filename):
for line in input: with open(filename) as fp:
yield cgi.escape(line) for line in fp:
yield cgi.escape(line)
def main(): def main():
filename = "gprof.out" filename = "gprof.out"
if sys.argv[1:]: if sys.argv[1:]:
filename = sys.argv[1] filename = sys.argv[1]
outputfilename = filename + ".html" outputfilename = filename + ".html"
input = add_escapes(file(filename)) input = add_escapes(filename)
output = file(outputfilename, "w") output = open(outputfilename, "w")
output.write(header % filename) output.write(header % filename)
for line in input: for line in input:
output.write(line) output.write(line)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment