annotate test/test_misc.py @ 6983:3129d73e8535

flake8 plus tests for cgitb.py flake8 fixes for cgitb.py. Also set up tests for functions in unit. Need tests before making some other changes in cgitb.py.
author John Rouillard <rouilj@ieee.org>
date Wed, 14 Sep 2022 22:35:23 -0400
parents 5986ddd0d2e7
children 83720f0aee06
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5155
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
1 # misc tests
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
2
6983
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
3 import re
6654
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
4 import sys
6983
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
5 import unittest
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
6
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
7 import roundup.anypy.cmp_
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
8
6654
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
9 from roundup.anypy.strings import StringIO # define StringIO
6983
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
10 from roundup.cgi import cgitb
5155
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
11 from roundup.cgi.accept_language import parse
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
12
6983
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
13
5155
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
14 class AcceptLanguageTest(unittest.TestCase):
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
15 def testParse(self):
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
16 self.assertEqual(parse("da, en-gb;q=0.8, en;q=0.7"),
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
17 ['da', 'en_gb', 'en'])
6347
3b945aee0919 accept_language parse; fix priority order; preserve insertion order
John Rouillard <rouilj@ieee.org>
parents: 5481
diff changeset
18 self.assertEqual(parse("da, en-gb;q=0.7, en;q=0.8"),
3b945aee0919 accept_language parse; fix priority order; preserve insertion order
John Rouillard <rouilj@ieee.org>
parents: 5481
diff changeset
19 ['da', 'en', 'en_gb'])
5155
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
20 self.assertEqual(parse("en;q=0.2, fr;q=1"), ['fr', 'en'])
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
21 self.assertEqual(parse("zn; q = 0.2 ,pt-br;q =1"), ['pt_br', 'zn'])
6347
3b945aee0919 accept_language parse; fix priority order; preserve insertion order
John Rouillard <rouilj@ieee.org>
parents: 5481
diff changeset
22 self.assertEqual(parse("pt-br;q =1, zn; q = 0.2"), ['pt_br', 'zn'])
3b945aee0919 accept_language parse; fix priority order; preserve insertion order
John Rouillard <rouilj@ieee.org>
parents: 5481
diff changeset
23 self.assertEqual(parse("pt-br,zn;q= 0.1, en-US;q=0.5"),
3b945aee0919 accept_language parse; fix priority order; preserve insertion order
John Rouillard <rouilj@ieee.org>
parents: 5481
diff changeset
24 ['pt_br', 'en_US', 'zn'])
3b945aee0919 accept_language parse; fix priority order; preserve insertion order
John Rouillard <rouilj@ieee.org>
parents: 5481
diff changeset
25 # verify that items with q=1.0 are in same output order as input
3b945aee0919 accept_language parse; fix priority order; preserve insertion order
John Rouillard <rouilj@ieee.org>
parents: 5481
diff changeset
26 self.assertEqual(parse("pt-br,en-US; q=0.5, zn;q= 1.0" ),
3b945aee0919 accept_language parse; fix priority order; preserve insertion order
John Rouillard <rouilj@ieee.org>
parents: 5481
diff changeset
27 ['pt_br', 'zn', 'en_US'])
3b945aee0919 accept_language parse; fix priority order; preserve insertion order
John Rouillard <rouilj@ieee.org>
parents: 5481
diff changeset
28 self.assertEqual(parse("zn;q=1.0;q= 1.0,pt-br,en-US; q=0.5" ),
3b945aee0919 accept_language parse; fix priority order; preserve insertion order
John Rouillard <rouilj@ieee.org>
parents: 5481
diff changeset
29 ['zn', 'pt_br', 'en_US'])
5155
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
30 self.assertEqual(parse("es-AR"), ['es_AR'])
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
31 self.assertEqual(parse("es-es-cat"), ['es_es_cat'])
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
32 self.assertEqual(parse(""), [])
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
33 self.assertEqual(parse(None),[])
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
34 self.assertEqual(parse(" "), [])
e1e3531b4d9b add tests for roundup/cgi/accept_language.py copied from embedded doctests already in file.
John Rouillard <rouilj@ieee.org>
parents:
diff changeset
35 self.assertEqual(parse("en,"), ['en'])
5481
9a09719b0d8e helper to allow comparing dicts and None values in Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5155
diff changeset
36
9a09719b0d8e helper to allow comparing dicts and None values in Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5155
diff changeset
37 class CmpTest(unittest.TestCase):
9a09719b0d8e helper to allow comparing dicts and None values in Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5155
diff changeset
38 def testCmp(self):
9a09719b0d8e helper to allow comparing dicts and None values in Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5155
diff changeset
39 roundup.anypy.cmp_._test()
6654
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
40
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
41 class VersionCheck(unittest.TestCase):
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
42 def test_Version_Check(self):
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
43
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
44 # test for valid versions
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
45 from roundup.version_check import VERSION_NEEDED
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
46 self.assertEqual((2, 7), VERSION_NEEDED)
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
47 del(sys.modules['roundup.version_check'])
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
48
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
49
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
50 # fake an invalid version
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
51 real_ver = sys.version_info
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
52 sys.version_info = (2, 1)
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
53
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
54 # exit is called on failure, but that breaks testing so
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
55 # just return and discard the exit code.
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
56 real_exit = sys.exit
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
57 sys.exit = lambda code: code
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
58
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
59 # error case uses print(), capture and check
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
60 capturedOutput = StringIO()
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
61 sys.stdout = capturedOutput
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
62 from roundup.version_check import VERSION_NEEDED
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
63 sys.stdout = sys.__stdout__
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
64 self.assertIn("Roundup requires Python 2.7", capturedOutput.getvalue())
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
65
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
66 # reset to valid values for future tests
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
67 sys.exit = real_exit
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
68 sys.version_info = real_ver
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
69
5986ddd0d2e7 Check version_check.
John Rouillard <rouilj@ieee.org>
parents: 6347
diff changeset
70
6983
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
71 class CgiTbCheck(unittest.TestCase):
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
72
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
73 def test_NiceDict(self):
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
74 d = cgitb.niceDict(" ", { "two": "three", "four": "five" })
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
75
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
76 expected = (
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
77 "<tr><td><strong>four</strong></td><td>'five'</td></tr>\n"
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
78 "<tr><td><strong>two</strong></td><td>'three'</td></tr>"
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
79 )
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
80
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
81 self.assertEqual(expected, d)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
82
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
83 def test_breaker(self):
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
84 b = cgitb.breaker()
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
85
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
86 expected = ('<body bgcolor="white"><font color="white" size="-5">'
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
87 ' > </font> </table></table></table></table></table>')
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
88
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
89 self.assertEqual(expected, b)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
90
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
91 def test_pt_html(self):
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
92 """ templating error """
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
93 try:
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
94 f = 5
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
95 d = a + 4
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
96 except Exception:
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
97 p = cgitb.pt_html(context=2)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
98
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
99 expected2 = """<h1>Templating Error</h1>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
100 <p><b>&lt;type 'exceptions.NameError'&gt;</b>: global name 'a' is not defined</p>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
101 <p class="help">Debugging information follows</p>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
102 <ol>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
103
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
104 </ol>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
105 <table style="font-size: 80%; color: gray">
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
106 <tr><th class="header" align="left">Full traceback:</th></tr>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
107 <tr><td><pre>Traceback (most recent call last):
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
108 File "XX/test/test_misc.py", line XX, in test_pt_html
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
109 d = a + 4
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
110 NameError: global name 'a' is not defined
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
111 </pre></td></tr>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
112 </table>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
113 <p>&nbsp;</p>"""
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
114
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
115 expected3 = """<h1>Templating Error</h1>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
116 <p><b>&lt;class 'NameError'&gt;</b>: name 'a' is not defined</p>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
117 <p class="help">Debugging information follows</p>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
118 <ol>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
119
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
120 </ol>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
121 <table style="font-size: 80%; color: gray">
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
122 <tr><th class="header" align="left">Full traceback:</th></tr>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
123 <tr><td><pre>Traceback (most recent call last):
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
124 File "XX/test/test_misc.py", line XX, in test_pt_html
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
125 d = a + 4
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
126 NameError: name 'a' is not defined
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
127 </pre></td></tr>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
128 </table>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
129 <p>&nbsp;</p>"""
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
130
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
131 # allow file directory prefix and line number to change
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
132 p = re.sub(r'(File ")/.*/(test/test_misc.py",)', r'\1XX/\2', p)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
133 p = re.sub(r'(", line )\d*,', r'\1XX,', p)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
134
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
135 print(p)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
136
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
137 if sys.version_info > (3, 0, 0):
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
138 self.assertEqual(expected3, p)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
139 else:
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
140 self.assertEqual(expected2, p)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
141
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
142 def test_html(self):
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
143 """ templating error """
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
144 # enabiling this will cause the test to fail as the variable
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
145 # is included in the live outpu but not in expected.
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
146 # self.maxDiff = None
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
147
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
148 try:
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
149 f = 5
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
150 d = a + 4
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
151 except Exception:
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
152 h = cgitb.html(context=2)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
153
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
154 expected2 = """
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
155 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
156 <tr bgcolor="#777777">
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
157 <td valign=bottom>&nbsp;<br>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
158 <font color="#ffffff" face="helvetica, arial">&nbsp;<br><font size=+1><strong>NameError</strong>: global name 'a' is not defined</font></font></td
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
159 ><td align=right valign=bottom
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
160 ><font color="#ffffff" face="helvetica, arial">Python 2.7.17<br>/usr/bin/python2</font></td></tr></table>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
161 <p>A problem occurred while running a Python script. Here is the sequence of function calls leading up to the error, with the most recent (innermost) call first. The exception attributes are:<br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__class__&nbsp;= &lt;type 'exceptions.NameError'&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__delattr__&nbsp;= &lt;method-wrapper '__delattr__' of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__dict__&nbsp;= {} <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__doc__&nbsp;= 'Name not found globally.' <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__format__&nbsp;= &lt;built-in method __format__ of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__getattribute__&nbsp;= &lt;method-wrapper '__getattribute__' of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__getitem__&nbsp;= &lt;method-wrapper '__getitem__' of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__getslice__&nbsp;= &lt;method-wrapper '__getslice__' of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__hash__&nbsp;= &lt;method-wrapper '__hash__' of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__init__&nbsp;= &lt;method-wrapper '__init__' of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__new__&nbsp;= &lt;built-in method __new__ of type object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__reduce__&nbsp;= &lt;built-in method __reduce__ of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__reduce_ex__&nbsp;= &lt;built-in method __reduce_ex__ of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__repr__&nbsp;= &lt;method-wrapper '__repr__' of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__setattr__&nbsp;= &lt;method-wrapper '__setattr__' of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__setstate__&nbsp;= &lt;built-in method __setstate__ of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__sizeof__&nbsp;= &lt;built-in method __sizeof__ of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__str__&nbsp;= &lt;method-wrapper '__str__' of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__subclasshook__&nbsp;= &lt;built-in method __subclasshook__ of type object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__unicode__&nbsp;= &lt;built-in method __unicode__ of exceptions.NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>args&nbsp;= ("global name 'a' is not defined",) <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>message&nbsp;= "global name 'a' is not defined"<p>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
162 <table width="100%" bgcolor="#dddddd" cellspacing=0 cellpadding=2 border=0>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
163 <tr><td><a href="file:XX/test/test_misc.py">XX/test/test_misc.py</a> in <strong>test_html</strong>(self=&lt;test.test_misc.CgiTbCheck testMethod=test_html&gt;)</td></tr></table>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
164 <tt><small><font color="#909090">&nbsp;&nbsp;XX</font></small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;f&nbsp;=&nbsp;5<br>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
165 </tt>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
166
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
167
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
168 <table width="100%" bgcolor="white" cellspacing=0 cellpadding=0 border=0>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
169 <tr><td><tt><small><font color="#909090">&nbsp;&nbsp;XX</font></small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;=&nbsp;a&nbsp;+&nbsp;4<br>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
170 </tt></td></tr></table>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
171 <tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt><small><font color="#909090"><strong>d</strong>&nbsp;= <em>undefined</em>, <em>global</em> <strong>a</strong>&nbsp;= <em>undefined</em></font></small><br><p>&nbsp;</p>"""
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
172
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
173 expected3 = """
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
174 <table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
175 <tr bgcolor="#777777">
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
176 <td valign=bottom>&nbsp;<br>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
177 <font color="#ffffff" face="helvetica, arial">&nbsp;<br><font size=+1><strong>NameError</strong>: name 'a' is not defined</font></font></td
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
178 ><td align=right valign=bottom
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
179 ><font color="#ffffff" face="helvetica, arial">Python 3.6.9<br>/usr/bin/python3</font></td></tr></table>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
180 <p>A problem occurred while running a Python script. Here is the sequence of function calls leading up to the error, with the most recent (innermost) call first. The exception attributes are:<br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__cause__&nbsp;= None <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__class__&nbsp;= &lt;class 'NameError'&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__context__&nbsp;= None <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__delattr__&nbsp;= &lt;method-wrapper '__delattr__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__dict__&nbsp;= {} <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__dir__&nbsp;= &lt;built-in method __dir__ of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__doc__&nbsp;= 'Name not found globally.' <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__eq__&nbsp;= &lt;method-wrapper '__eq__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__format__&nbsp;= &lt;built-in method __format__ of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__ge__&nbsp;= &lt;method-wrapper '__ge__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__getattribute__&nbsp;= &lt;method-wrapper '__getattribute__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__gt__&nbsp;= &lt;method-wrapper '__gt__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__hash__&nbsp;= &lt;method-wrapper '__hash__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__init__&nbsp;= &lt;method-wrapper '__init__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__init_subclass__&nbsp;= &lt;built-in method __init_subclass__ of type object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__le__&nbsp;= &lt;method-wrapper '__le__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__lt__&nbsp;= &lt;method-wrapper '__lt__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__ne__&nbsp;= &lt;method-wrapper '__ne__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__new__&nbsp;= &lt;built-in method __new__ of type object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__reduce__&nbsp;= &lt;built-in method __reduce__ of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__reduce_ex__&nbsp;= &lt;built-in method __reduce_ex__ of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__repr__&nbsp;= &lt;method-wrapper '__repr__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__setattr__&nbsp;= &lt;method-wrapper '__setattr__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__setstate__&nbsp;= &lt;built-in method __setstate__ of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__sizeof__&nbsp;= &lt;built-in method __sizeof__ of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__str__&nbsp;= &lt;method-wrapper '__str__' of NameError object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__subclasshook__&nbsp;= &lt;built-in method __subclasshook__ of type object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__suppress_context__&nbsp;= False <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>__traceback__&nbsp;= &lt;traceback object&gt; <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>args&nbsp;= ("name 'a' is not defined",) <br><tt><small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</small>&nbsp;</tt>with_traceback&nbsp;= &lt;built-in method with_traceback of NameError object&gt;<p>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
181 <table width="100%" bgcolor="#dddddd" cellspacing=0 cellpadding=2 border=0>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
182 <tr><td><a href="file:XX/test/test_misc.py">XX/test/test_misc.py</a> in <strong>test_html</strong>(self=&lt;test.test_misc.CgiTbCheck testMethod=test_html&gt;)</td></tr></table>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
183 <tt><small><font color="#909090">&nbsp;&nbsp;XX</font></small>&nbsp;<br>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
184 </tt>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
185
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
186
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
187 <table width="100%" bgcolor="white" cellspacing=0 cellpadding=0 border=0>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
188 <tr><td><tt><small><font color="#909090">&nbsp;&nbsp;XX</font></small>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:<br>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
189 </tt></td></tr></table>
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
190 <p>&nbsp;</p>"""
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
191
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
192 # strip file path prefix from href and text
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
193 # /home/user/develop/roundup/test/test_misc.py in test_html
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
194 h = re.sub(r'(file:)/.*/(test/test_misc.py")', r'\1XX/\2', h)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
195 h = re.sub(r'(/test_misc.py">)/.*/(test/test_misc.py</a>)',
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
196 r'\1XX/\2', h)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
197 # replace code line numbers with XX
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
198 h = re.sub(r'(&nbsp;)\d*(</font>)', r'\1XX\2', h)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
199
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
200 print(h)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
201
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
202 if sys.version_info > (3, 0, 0):
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
203 self.assertEqual(expected3, h)
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
204 else:
3129d73e8535 flake8 plus tests for cgitb.py
John Rouillard <rouilj@ieee.org>
parents: 6654
diff changeset
205 self.assertEqual(expected2, h)

Roundup Issue Tracker: http://roundup-tracker.org/