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

View File

@ -19,17 +19,19 @@ trailer = """\
</html>
"""
def add_escapes(input):
for line in input:
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)