mirror of
https://github.com/python/cpython.git
synced 2025-07-18 16:55:20 +00:00

Capturing exceptions into names can lead to reference cycles though the __traceback__ attribute of the exceptions in some obscure cases that have been reported previously and fixed individually. As these variables are not used anyway, we can remove the binding to reduce the chances of creating reference cycles. See for example GH-13135
68 lines
2.5 KiB
Python
68 lines
2.5 KiB
Python
from test.support import temp_dir
|
|
from test.support.script_helper import assert_python_failure
|
|
import unittest
|
|
import sys
|
|
import cgitb
|
|
|
|
class TestCgitb(unittest.TestCase):
|
|
|
|
def test_fonts(self):
|
|
text = "Hello Robbie!"
|
|
self.assertEqual(cgitb.small(text), "<small>{}</small>".format(text))
|
|
self.assertEqual(cgitb.strong(text), "<strong>{}</strong>".format(text))
|
|
self.assertEqual(cgitb.grey(text),
|
|
'<font color="#909090">{}</font>'.format(text))
|
|
|
|
def test_blanks(self):
|
|
self.assertEqual(cgitb.small(""), "")
|
|
self.assertEqual(cgitb.strong(""), "")
|
|
self.assertEqual(cgitb.grey(""), "")
|
|
|
|
def test_html(self):
|
|
try:
|
|
raise ValueError("Hello World")
|
|
except ValueError as err:
|
|
# If the html was templated we could do a bit more here.
|
|
# At least check that we get details on what we just raised.
|
|
html = cgitb.html(sys.exc_info())
|
|
self.assertIn("ValueError", html)
|
|
self.assertIn(str(err), html)
|
|
|
|
def test_text(self):
|
|
try:
|
|
raise ValueError("Hello World")
|
|
except ValueError:
|
|
text = cgitb.text(sys.exc_info())
|
|
self.assertIn("ValueError", text)
|
|
self.assertIn("Hello World", text)
|
|
|
|
def test_syshook_no_logdir_default_format(self):
|
|
with temp_dir() as tracedir:
|
|
rc, out, err = assert_python_failure(
|
|
'-c',
|
|
('import cgitb; cgitb.enable(logdir=%s); '
|
|
'raise ValueError("Hello World")') % repr(tracedir))
|
|
out = out.decode(sys.getfilesystemencoding())
|
|
self.assertIn("ValueError", out)
|
|
self.assertIn("Hello World", out)
|
|
self.assertIn("<strong><module></strong>", out)
|
|
# By default we emit HTML markup.
|
|
self.assertIn('<p>', out)
|
|
self.assertIn('</p>', out)
|
|
|
|
def test_syshook_no_logdir_text_format(self):
|
|
# Issue 12890: we were emitting the <p> tag in text mode.
|
|
with temp_dir() as tracedir:
|
|
rc, out, err = assert_python_failure(
|
|
'-c',
|
|
('import cgitb; cgitb.enable(format="text", logdir=%s); '
|
|
'raise ValueError("Hello World")') % repr(tracedir))
|
|
out = out.decode(sys.getfilesystemencoding())
|
|
self.assertIn("ValueError", out)
|
|
self.assertIn("Hello World", out)
|
|
self.assertNotIn('<p>', out)
|
|
self.assertNotIn('</p>', out)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|