mirror of https://github.com/python/cpython
#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:
commit
ea169801e1
|
@ -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)])
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue