|
2 | 2 |
|
3 | 3 | test('table row', function () { |
4 | 4 | assertTemplateResult( |
5 | | - '<tr class="row1"><td class="col1"> 1 </td><td class="col2"> 2 </td><td class="col3"> 3 </td></tr><tr class="row2"><td class="col1"> 4 </td><td class="col2"> 5 </td><td class="col3"> 6 </td></tr>', |
| 5 | + <<<'HTML' |
| 6 | + <tr class="row1"> |
| 7 | + <td class="col1"> 1 </td> |
| 8 | + <td class="col2"> 2 </td> |
| 9 | + <td class="col3"> 3 </td> |
| 10 | + </tr> |
| 11 | + <tr class="row2"> |
| 12 | + <td class="col1"> 4 </td> |
| 13 | + <td class="col2"> 5 </td> |
| 14 | + <td class="col3"> 6 </td> |
| 15 | + </tr> |
| 16 | + HTML, |
6 | 17 | '{% tablerow n in numbers cols:3%} {{n}} {% endtablerow %}', |
7 | 18 | ['numbers' => [1, 2, 3, 4, 5, 6]], |
8 | 19 | ); |
9 | 20 |
|
10 | 21 | assertTemplateResult( |
11 | | - '<tr class="row1"></tr>', |
| 22 | + "<tr class=\"row1\">\n</tr>", |
12 | 23 | '{% tablerow n in numbers cols:3%} {{n}} {% endtablerow %}', |
13 | 24 | ['numbers' => []], |
14 | 25 | ); |
15 | 26 | }); |
16 | 27 |
|
17 | 28 | test('table row with different cols', function () { |
18 | 29 | assertTemplateResult( |
19 | | - '<tr class="row1"><td class="col1"> 1 </td><td class="col2"> 2 </td><td class="col3"> 3 </td><td class="col4"> 4 </td><td class="col5"> 5 </td></tr><tr class="row2"><td class="col1"> 6 </td></tr>', |
| 30 | + <<<'HTML' |
| 31 | + <tr class="row1"> |
| 32 | + <td class="col1"> 1 </td> |
| 33 | + <td class="col2"> 2 </td> |
| 34 | + <td class="col3"> 3 </td> |
| 35 | + <td class="col4"> 4 </td> |
| 36 | + <td class="col5"> 5 </td> |
| 37 | + </tr> |
| 38 | + <tr class="row2"> |
| 39 | + <td class="col1"> 6 </td> |
| 40 | + </tr> |
| 41 | + HTML, |
20 | 42 | '{% tablerow n in numbers cols:5%} {{n}} {% endtablerow %}', |
21 | 43 | ['numbers' => [1, 2, 3, 4, 5, 6]], |
22 | 44 | ); |
23 | 45 | }); |
24 | 46 |
|
25 | 47 | test('table col counter', function () { |
26 | 48 | assertTemplateResult( |
27 | | - '<tr class="row1"><td class="col1">1</td><td class="col2">2</td></tr><tr class="row2"><td class="col1">1</td><td class="col2">2</td></tr><tr class="row3"><td class="col1">1</td><td class="col2">2</td></tr>', |
| 49 | + <<<'HTML' |
| 50 | + <tr class="row1"> |
| 51 | + <td class="col1">1</td> |
| 52 | + <td class="col2">2</td> |
| 53 | + </tr> |
| 54 | + <tr class="row2"> |
| 55 | + <td class="col1">1</td> |
| 56 | + <td class="col2">2</td> |
| 57 | + </tr> |
| 58 | + <tr class="row3"> |
| 59 | + <td class="col1">1</td> |
| 60 | + <td class="col2">2</td> |
| 61 | + </tr> |
| 62 | + HTML, |
28 | 63 | '{% tablerow n in numbers cols:2%}{{tablerowloop.col}}{% endtablerow %}', |
29 | 64 | ['numbers' => [1, 2, 3, 4, 5, 6]], |
30 | 65 | ); |
31 | 66 | }); |
32 | 67 |
|
33 | 68 | test('quoted fragment', function () { |
34 | 69 | assertTemplateResult( |
35 | | - '<tr class="row1"><td class="col1"> 1 </td><td class="col2"> 2 </td><td class="col3"> 3 </td></tr><tr class="row2"><td class="col1"> 4 </td><td class="col2"> 5 </td><td class="col3"> 6 </td></tr>', |
| 70 | + <<<'HTML' |
| 71 | + <tr class="row1"> |
| 72 | + <td class="col1"> 1 </td> |
| 73 | + <td class="col2"> 2 </td> |
| 74 | + <td class="col3"> 3 </td> |
| 75 | + </tr> |
| 76 | + <tr class="row2"> |
| 77 | + <td class="col1"> 4 </td> |
| 78 | + <td class="col2"> 5 </td> |
| 79 | + <td class="col3"> 6 </td> |
| 80 | + </tr> |
| 81 | + HTML, |
36 | 82 | '{% tablerow n in collections.frontpage cols:3%} {{n}} {% endtablerow %}', |
37 | 83 | ['collections' => ['frontpage' => [1, 2, 3, 4, 5, 6]]], |
38 | 84 | ); |
39 | 85 | assertTemplateResult( |
40 | | - '<tr class="row1"><td class="col1"> 1 </td><td class="col2"> 2 </td><td class="col3"> 3 </td></tr><tr class="row2"><td class="col1"> 4 </td><td class="col2"> 5 </td><td class="col3"> 6 </td></tr>', |
| 86 | + <<<'HTML' |
| 87 | + <tr class="row1"> |
| 88 | + <td class="col1"> 1 </td> |
| 89 | + <td class="col2"> 2 </td> |
| 90 | + <td class="col3"> 3 </td> |
| 91 | + </tr> |
| 92 | + <tr class="row2"> |
| 93 | + <td class="col1"> 4 </td> |
| 94 | + <td class="col2"> 5 </td> |
| 95 | + <td class="col3"> 6 </td> |
| 96 | + </tr> |
| 97 | + HTML, |
41 | 98 | "{% tablerow n in collections['frontpage'] cols:3%} {{n}} {% endtablerow %}", |
42 | 99 | ['collections' => ['frontpage' => [1, 2, 3, 4, 5, 6]]], |
43 | 100 | ); |
44 | 101 | }); |
45 | 102 |
|
46 | 103 | test('enumerable drop', function () { |
47 | 104 | assertTemplateResult( |
48 | | - '<tr class="row1"><td class="col1"> 1 </td><td class="col2"> 2 </td><td class="col3"> 3 </td></tr><tr class="row2"><td class="col1"> 4 </td><td class="col2"> 5 </td><td class="col3"> 6 </td></tr>', |
| 105 | + <<<'HTML' |
| 106 | + <tr class="row1"> |
| 107 | + <td class="col1"> 1 </td> |
| 108 | + <td class="col2"> 2 </td> |
| 109 | + <td class="col3"> 3 </td> |
| 110 | + </tr> |
| 111 | + <tr class="row2"> |
| 112 | + <td class="col1"> 4 </td> |
| 113 | + <td class="col2"> 5 </td> |
| 114 | + <td class="col3"> 6 </td> |
| 115 | + </tr> |
| 116 | + HTML, |
49 | 117 | '{% tablerow n in numbers cols:3%} {{n}} {% endtablerow %}', |
50 | 118 | ['numbers' => new \Keepsuit\Liquid\Tests\Stubs\IteratorDrop([1, 2, 3, 4, 5, 6])], |
51 | 119 | ); |
52 | 120 | }); |
53 | 121 |
|
54 | 122 | test('offset and limit', function () { |
55 | 123 | assertTemplateResult( |
56 | | - '<tr class="row1"><td class="col1"> 1 </td><td class="col2"> 2 </td><td class="col3"> 3 </td></tr><tr class="row2"><td class="col1"> 4 </td><td class="col2"> 5 </td><td class="col3"> 6 </td></tr>', |
| 124 | + <<<'HTML' |
| 125 | + <tr class="row1"> |
| 126 | + <td class="col1"> 1 </td> |
| 127 | + <td class="col2"> 2 </td> |
| 128 | + <td class="col3"> 3 </td> |
| 129 | + </tr> |
| 130 | + <tr class="row2"> |
| 131 | + <td class="col1"> 4 </td> |
| 132 | + <td class="col2"> 5 </td> |
| 133 | + <td class="col3"> 6 </td> |
| 134 | + </tr> |
| 135 | + HTML, |
57 | 136 | '{% tablerow n in numbers cols:3 offset:1 limit:6%} {{n}} {% endtablerow %}', |
58 | 137 | ['numbers' => [0, 1, 2, 3, 4, 5, 6, 7]], |
59 | 138 | ); |
60 | 139 | }); |
61 | 140 |
|
62 | 141 | test('blank string not iterable', function () { |
63 | 142 | assertTemplateResult( |
64 | | - '<tr class="row1"></tr>', |
| 143 | + "<tr class=\"row1\">\n</tr>", |
65 | 144 | '{% tablerow char in characters cols:3 %}I WILL NOT BE OUTPUT{% endtablerow %}', |
66 | 145 | ['characters' => ''], |
67 | 146 | ); |
68 | 147 | }); |
69 | 148 |
|
70 | 149 | test('cols null constant same as evaluated null expression', function () { |
71 | | - $expect = '<tr class="row1"><td class="col1">false</td><td class="col2">false</td></tr>'; |
| 150 | + $expect = <<<'HTML' |
| 151 | + <tr class="row1"> |
| 152 | + <td class="col1">false</td> |
| 153 | + <td class="col2">false</td> |
| 154 | + </tr> |
| 155 | + HTML; |
72 | 156 |
|
73 | 157 | assertTemplateResult( |
74 | 158 | $expect, |
|
82 | 166 | }); |
83 | 167 |
|
84 | 168 | test('nil limit is treated as zero', function () { |
85 | | - $expect = '<tr class="row1"></tr>'; |
| 169 | + $expect = "<tr class=\"row1\">\n</tr>"; |
86 | 170 |
|
87 | 171 | assertTemplateResult( |
88 | 172 | $expect, |
|
96 | 180 | }); |
97 | 181 |
|
98 | 182 | test('nil offset is treated as zero', function () { |
99 | | - $expect = '<tr class="row1"><td class="col1">1:false</td><td class="col2">2:true</td></tr>'; |
| 183 | + $expect = <<<'HTML' |
| 184 | + <tr class="row1"> |
| 185 | + <td class="col1">1:false</td> |
| 186 | + <td class="col2">2:true</td> |
| 187 | + </tr> |
| 188 | + HTML; |
100 | 189 |
|
101 | 190 | assertTemplateResult( |
102 | 191 | $expect, |
|
128 | 217 | LIQUID; |
129 | 218 |
|
130 | 219 | $expect = <<<'HTML' |
131 | | - <tr class="row1"><td class="col1"> |
| 220 | + <tr class="row1"> |
| 221 | + <td class="col1"> |
132 | 222 | col: 1 |
133 | 223 | col0: 0 |
134 | 224 | col_first: true |
|
141 | 231 | rindex: 2 |
142 | 232 | rindex0: 1 |
143 | 233 | row: 1 |
144 | | - </td><td class="col2"> |
| 234 | + </td> |
| 235 | + <td class="col2"> |
145 | 236 | col: 2 |
146 | 237 | col0: 1 |
147 | 238 | col_first: false |
|
154 | 245 | rindex: 1 |
155 | 246 | rindex0: 0 |
156 | 247 | row: 1 |
157 | | - </td></tr> |
| 248 | + </td> |
| 249 | + </tr> |
158 | 250 | HTML; |
159 | 251 |
|
160 | 252 | assertTemplateResult($expect, $template); |
|
177 | 269 | renderErrors: true, |
178 | 270 | ); |
179 | 271 | }); |
| 272 | + |
| 273 | +test('tablerow handles interrupts', function () { |
| 274 | + assertTemplateResult( |
| 275 | + "<tr class=\"row1\">\n<td class=\"col1\"> 1 </td>\n</tr>", |
| 276 | + '{% tablerow n in (1..3) cols:2 %} {{n}} {% break %} {{n}} {% endtablerow %}' |
| 277 | + ); |
| 278 | + |
| 279 | + assertTemplateResult( |
| 280 | + "<tr class=\"row1\">\n<td class=\"col1\"> 1 </td>\n<td class=\"col2\"> 2 </td>\n</tr>\n<tr class=\"row2\">\n<td class=\"col1\"> 3 </td>\n</tr>", |
| 281 | + '{% tablerow n in (1..3) cols:2 %} {{n}} {% continue %} {{n}} {% endtablerow %}', |
| 282 | + ); |
| 283 | +}); |
| 284 | + |
| 285 | +test('tablerow does not leak interrupts', function () { |
| 286 | + $template = <<<'LIQUID' |
| 287 | + {% for i in (1..2) -%} |
| 288 | + {% for j in (1..2) -%} |
| 289 | + {% tablerow k in (1..3) %}{% break %}{% endtablerow %} |
| 290 | + loop j={{ j }} |
| 291 | + {% endfor -%} |
| 292 | + loop i={{ i }} |
| 293 | + {% endfor -%} |
| 294 | + after loop |
| 295 | + LIQUID; |
| 296 | + |
| 297 | + $expected = <<<'HTML' |
| 298 | + <tr class="row1"> |
| 299 | + <td class="col1"></td> |
| 300 | + </tr> |
| 301 | + loop j=1 |
| 302 | + <tr class="row1"> |
| 303 | + <td class="col1"></td> |
| 304 | + </tr> |
| 305 | + loop j=2 |
| 306 | + loop i=1 |
| 307 | + <tr class="row1"> |
| 308 | + <td class="col1"></td> |
| 309 | + </tr> |
| 310 | + loop j=1 |
| 311 | + <tr class="row1"> |
| 312 | + <td class="col1"></td> |
| 313 | + </tr> |
| 314 | + loop j=2 |
| 315 | + loop i=2 |
| 316 | + after loop |
| 317 | + HTML; |
| 318 | + |
| 319 | + assertTemplateResult($expected, $template); |
| 320 | +}); |
0 commit comments