Skip to content

Commit c12b08f

Browse files
committed
Refactored unit tests
1 parent 24ecb5b commit c12b08f

File tree

1 file changed

+189
-91
lines changed

1 file changed

+189
-91
lines changed

html5lib/tests/test_jinja.py

Lines changed: 189 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -15,137 +15,145 @@ def dump(tree, tabs=0):
1515

1616
class JinjaTestCase(unittest.TestCase):
1717
def setUp(self):
18-
self.parser = html5lib.HTMLParser(strict=False, namespaceHTMLElements=False)
18+
self.parser = html5lib.HTMLParser(strict=True, namespaceHTMLElements=False)
1919

2020
def test_var_1(self):
2121
html_string = """<h1>{{ hi }}</h1>"""
2222

2323
tree = self.parser.parseFragment(html_string)
2424

25-
h1 = tree[0]
26-
jt = h1[0]
27-
var1 = jt[0]
28-
self.assertEqual(h1.tag, "h1")
29-
self.assertEqual(var1.tag, 'jinjavariable')
30-
self.assertEqual(var1.attrib['value'], 'hi')
25+
self.assertTree(tree, [{
26+
'tag': 'h1',
27+
'children': [{
28+
'tag': 'jinjavariabletag',
29+
'children': [{
30+
'tag': 'jinjavariable',
31+
'value': 'hi'
32+
}]
33+
}]
34+
}])
3135

3236
def test_var_2(self):
3337
html_string = """<h1>{{ a.b }}</h1>"""
3438

3539
tree = self.parser.parseFragment(html_string)
3640

37-
h1 = tree[0]
38-
jt = h1[0]
39-
var1 = jt[0]
40-
self.assertEqual(h1.tag, "h1")
41-
self.assertEqual(var1.tag, 'jinjavariable')
42-
self.assertEqual(var1.attrib['value'], 'a.b')
41+
self.assertTree(tree, [{
42+
'tag': 'h1',
43+
'children': [{
44+
'tag': 'jinjavariabletag',
45+
'children': [{
46+
'tag': 'jinjavariable',
47+
'value': 'a.b'
48+
}]
49+
}]
50+
}])
4351

4452
def test_filter_1(self):
4553
html_string = """<h1>{{ hi | yo }}</h1>"""
4654

4755
tree = self.parser.parseFragment(html_string)
4856

49-
h1 = tree[0]
50-
self.assertEqual(h1.tag, "h1")
51-
52-
jt = h1[0]
53-
54-
hi = jt[0]
55-
pipe1 = jt[1]
56-
yo = jt[2]
57-
58-
self.assertEqual(hi.tag, 'jinjavariable')
59-
self.assertEqual(hi.attrib['value'], 'hi')
60-
self.assertEqual(pipe1.tag, 'jinjapipe')
61-
self.assertEqual(pipe1.attrib['value'], '|')
62-
self.assertEqual(yo.tag, 'jinjafilter')
63-
self.assertEqual(yo.attrib['value'], 'yo')
57+
self.assertTree(tree, [{
58+
'tag': 'h1',
59+
'children': [{
60+
'tag': 'jinjavariabletag',
61+
'children': [{
62+
'tag': 'jinjavariable',
63+
'value': 'hi'
64+
}, {
65+
'tag': 'jinjapipe',
66+
'value': '|'
67+
}, {
68+
'tag': 'jinjafilter',
69+
'value': 'yo'
70+
}]
71+
}]
72+
}])
6473

6574
def test_filter_2(self):
6675
html_string = """<h1>{{ hi | yo("hi") }}</h1>"""
6776

6877
tree = self.parser.parseFragment(html_string)
6978
dump(tree)
7079

71-
h1 = tree[0]
72-
self.assertEqual(h1.tag, "h1")
73-
74-
jt = h1[0]
75-
76-
hi = jt[0]
77-
pipe1 = jt[1]
78-
yo = jt[2]
79-
80-
self.assertEqual(hi.tag, 'jinjavariable')
81-
self.assertEqual(hi.attrib['value'], 'hi')
82-
self.assertEqual(pipe1.tag, 'jinjapipe')
83-
self.assertEqual(pipe1.attrib['value'], '|')
84-
self.assertEqual(yo.tag, 'jinjafilter')
85-
self.assertEqual(yo.attrib['value'], 'yo')
86-
87-
arg1 = yo[0]
88-
89-
self.assertEqual(arg1.tag, 'jinjaargument')
90-
self.assertEqual(arg1.attrib['value'], '"hi"')
80+
self.assertTree(tree, [{
81+
'tag': 'h1',
82+
'children': [{
83+
'tag': 'jinjavariabletag',
84+
'children': [{
85+
'tag': 'jinjavariable',
86+
'value': 'hi'
87+
}, {
88+
'tag': 'jinjapipe',
89+
'value': '|'
90+
}, {
91+
'tag': 'jinjafilter',
92+
'value': 'yo',
93+
'children': [{
94+
'tag': 'jinjaargument',
95+
'value': '"hi"'
96+
}]
97+
}]
98+
}]
99+
}])
91100

92101
def test_filter_3(self):
93102
html_string = """<h1>{{ hi | yo("hi", "mike") }}</h1>"""
94103

95104
tree = self.parser.parseFragment(html_string)
96105
dump(tree)
97106

98-
h1 = tree[0]
99-
self.assertEqual(h1.tag, "h1")
100-
101-
jt = h1[0]
102-
103-
hi = jt[0]
104-
pipe1 = jt[1]
105-
yo = jt[2]
106-
107-
self.assertEqual(hi.tag, 'jinjavariable')
108-
self.assertEqual(hi.attrib['value'], 'hi')
109-
self.assertEqual(pipe1.tag, 'jinjapipe')
110-
self.assertEqual(pipe1.attrib['value'], '|')
111-
self.assertEqual(yo.tag, 'jinjafilter')
112-
self.assertEqual(yo.attrib['value'], 'yo')
113-
114-
arg1 = yo[0]
115-
arg2 = yo[1]
116-
117-
self.assertEqual(arg1.tag, 'jinjaargument')
118-
self.assertEqual(arg1.attrib['value'], '"hi"')
119-
self.assertEqual(arg2.tag, 'jinjaargument')
120-
self.assertEqual(arg2.attrib['value'], '"mike"')
107+
self.assertTree(tree, [{
108+
'tag': 'h1',
109+
'children': [{
110+
'tag': 'jinjavariabletag',
111+
'children': [{
112+
'tag': 'jinjavariable',
113+
'value': 'hi'
114+
}, {
115+
'tag': 'jinjapipe',
116+
'value': '|'
117+
}, {
118+
'tag': 'jinjafilter',
119+
'value': 'yo',
120+
'children': [{
121+
'tag': 'jinjaargument',
122+
'value': '"hi"'
123+
}, {
124+
'tag': 'jinjaargument',
125+
'value': '"mike"'
126+
}]
127+
}]
128+
}]
129+
}])
121130

122131
def test_jinja_block(self):
123132
html_string = """
124133
{% block title %}Hi{% endblock %}
125134
"""
126135

127136
tree = self.parser.parseFragment(html_string)
128-
dump(tree)
129-
130-
block = tree[0]
131137

132-
self.assertEqual(block.tag, 'jinjablock')
133-
self.assertEqual(block.text, 'Hi')
138+
self.assertTree(tree, [{
139+
'tag': 'jinjablock',
140+
'text': 'Hi'
141+
}])
134142

135143
def test_jinja_block_in_title(self):
136144
html_string = """
137145
<title>{% block title %}{% endblock %}</title>
138146
"""
139147

140148
tree = self.parser.parseFragment(html_string)
141-
dump(tree)
142-
143-
title = tree[0]
144-
block = title[0]
145149

146-
self.assertEqual(title.tag, 'title')
147-
self.assertEqual(block.tag, 'jinjablock')
148-
self.assertEqual(block.attrib['value'], 'title')
150+
self.assertTree(tree, [{
151+
'tag': 'title',
152+
'children': [{
153+
'tag': 'jinjablock',
154+
'value': 'title'
155+
}]
156+
}])
149157

150158
def test_jinja_for(self):
151159
html_string = """
@@ -155,14 +163,104 @@ def test_jinja_for(self):
155163
"""
156164

157165
tree = self.parser.parseFragment(html_string)
166+
167+
self.assertTree(tree, [{
168+
'tag': 'jinjafor',
169+
'value': 'a in b',
170+
'children': [{
171+
'tag': 'jinjavariabletag',
172+
'children': [{
173+
'tag': 'jinjavariable',
174+
'value': 'a'
175+
}]
176+
}]
177+
}])
178+
179+
def test_complete_doc(self):
180+
html_string = """
181+
<!DOCTYPE html>
182+
<html lang="en">
183+
<head>
184+
<title>My Webpage</title>
185+
</head>
186+
<body>
187+
<ul id="navigation">
188+
{% for item in navigation %}
189+
<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
190+
{% endfor %}
191+
</ul>
192+
193+
<h1>My Webpage</h1>
194+
{{ a_variable }}
195+
</body>
196+
</html>
197+
"""
198+
199+
tree = self.parser.parse(html_string)
158200
dump(tree)
201+
self.assertTree(tree, [{
202+
'tag': 'head',
203+
'children': [{
204+
'tag': 'title',
205+
'text': 'My Webpage'
206+
}]
207+
}, {
208+
'tag': 'body',
209+
'children': [{
210+
'tag': 'ul',
211+
'children': [{
212+
'tag': 'jinjafor',
213+
'value': 'item in navigation',
214+
'children': [{
215+
'tag': 'li',
216+
'children': [{
217+
'tag': 'a',
218+
'children': [{
219+
'tag': 'jinjavariabletag',
220+
'children': [{
221+
'tag': 'jinjavariable',
222+
'value': 'item.caption'
223+
}]
224+
}]
225+
}]
226+
}]
227+
}]
228+
}, {
229+
'tag': 'h1',
230+
'text': 'My Webpage'
231+
}, {
232+
'tag': 'jinjavariabletag',
233+
'children': [{
234+
'tag': 'jinjavariable',
235+
'value': 'a_variable'
236+
}]
237+
}]
238+
}])
239+
240+
def test_jinja_if(self):
241+
html_string = """
242+
{% if True %}yay{% endif %}
243+
"""
244+
245+
tree = self.parser.parseFragment(html_string)
246+
dump(tree)
247+
248+
self.assertTree(tree, [{
249+
'tag': 'jinjaif',
250+
'text': 'yay'
251+
}])
252+
253+
def assertTree(self, root, spec):
254+
self.assertEqual(len(root), len(spec))
255+
256+
for child, spec_child in zip(root, spec):
257+
self.assertEqual(child.tag, spec_child['tag'])
258+
259+
if 'text' in spec_child:
260+
self.assertEqual(child.text, spec_child['text'])
159261

160-
block = tree[0]
161-
var = block[0]
162-
var1 = var[0]
262+
if 'value' in spec_child:
263+
self.assertEqual(child.attrib['value'], spec_child['value'])
163264

164-
self.assertEqual(block.tag, 'jinjafor')
165-
self.assertEqual(block.attrib['value'], 'a in b')
166-
self.assertEqual(var.tag, 'jinjavariabletag')
167-
self.assertEqual(var1.tag, 'jinjavariable')
168-
self.assertEqual(var1.attrib['value'], 'a')
265+
if 'children' in spec_child:
266+
self.assertTree(child, spec_child['children'])

0 commit comments

Comments
 (0)