mirror of
				https://github.com/python/cpython.git
				synced 2025-11-01 06:01:29 +00:00 
			
		
		
		
	 293dd23477
			
		
	
	
		293dd23477
		
			
		
	
	
	
	
		
			
			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()
 |