@@ -15,137 +15,145 @@ def dump(tree, tabs=0):
15
15
16
16
class JinjaTestCase (unittest .TestCase ):
17
17
def setUp (self ):
18
- self .parser = html5lib .HTMLParser (strict = False , namespaceHTMLElements = False )
18
+ self .parser = html5lib .HTMLParser (strict = True , namespaceHTMLElements = False )
19
19
20
20
def test_var_1 (self ):
21
21
html_string = """<h1>{{ hi }}</h1>"""
22
22
23
23
tree = self .parser .parseFragment (html_string )
24
24
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
+ }])
31
35
32
36
def test_var_2 (self ):
33
37
html_string = """<h1>{{ a.b }}</h1>"""
34
38
35
39
tree = self .parser .parseFragment (html_string )
36
40
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
+ }])
43
51
44
52
def test_filter_1 (self ):
45
53
html_string = """<h1>{{ hi | yo }}</h1>"""
46
54
47
55
tree = self .parser .parseFragment (html_string )
48
56
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
+ }])
64
73
65
74
def test_filter_2 (self ):
66
75
html_string = """<h1>{{ hi | yo("hi") }}</h1>"""
67
76
68
77
tree = self .parser .parseFragment (html_string )
69
78
dump (tree )
70
79
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
+ }] )
91
100
92
101
def test_filter_3 (self ):
93
102
html_string = """<h1>{{ hi | yo("hi", "mike") }}</h1>"""
94
103
95
104
tree = self .parser .parseFragment (html_string )
96
105
dump (tree )
97
106
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
+ }] )
121
130
122
131
def test_jinja_block (self ):
123
132
html_string = """
124
133
{% block title %}Hi{% endblock %}
125
134
"""
126
135
127
136
tree = self .parser .parseFragment (html_string )
128
- dump (tree )
129
-
130
- block = tree [0 ]
131
137
132
- self .assertEqual (block .tag , 'jinjablock' )
133
- self .assertEqual (block .text , 'Hi' )
138
+ self .assertTree (tree , [{
139
+ 'tag' : 'jinjablock' ,
140
+ 'text' : 'Hi'
141
+ }])
134
142
135
143
def test_jinja_block_in_title (self ):
136
144
html_string = """
137
145
<title>{% block title %}{% endblock %}</title>
138
146
"""
139
147
140
148
tree = self .parser .parseFragment (html_string )
141
- dump (tree )
142
-
143
- title = tree [0 ]
144
- block = title [0 ]
145
149
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
+ }])
149
157
150
158
def test_jinja_for (self ):
151
159
html_string = """
@@ -155,14 +163,104 @@ def test_jinja_for(self):
155
163
"""
156
164
157
165
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 )
158
200
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' ])
159
261
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' ])
163
264
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