#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).
This commit is contained in:
R David Murray 2012-04-11 15:17:37 -04:00
commit ea169801e1
2 changed files with 31 additions and 6 deletions

View file

@ -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):
# 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):
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)])

View file

@ -19,17 +19,19 @@ trailer = """\
</html> </html>
""" """
def add_escapes(input): def add_escapes(filename):
for line in input: with open(filename) as fp:
for line in fp:
yield cgi.escape(line) 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)