mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
#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
2 changed files with 31 additions and 6 deletions
|
@ -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)])
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue