liquid 3.0.6 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +4 -4
  2. data/History.md +98 -58
  3. data/README.md +31 -0
  4. data/lib/liquid/block.rb +31 -124
  5. data/lib/liquid/block_body.rb +75 -59
  6. data/lib/liquid/condition.rb +23 -22
  7. data/lib/liquid/context.rb +50 -46
  8. data/lib/liquid/document.rb +19 -9
  9. data/lib/liquid/drop.rb +17 -16
  10. data/lib/liquid/errors.rb +20 -24
  11. data/lib/liquid/expression.rb +15 -3
  12. data/lib/liquid/extensions.rb +13 -7
  13. data/lib/liquid/file_system.rb +11 -11
  14. data/lib/liquid/forloop_drop.rb +42 -0
  15. data/lib/liquid/i18n.rb +5 -5
  16. data/lib/liquid/interrupts.rb +1 -2
  17. data/lib/liquid/lexer.rb +6 -4
  18. data/lib/liquid/locales/en.yml +5 -1
  19. data/lib/liquid/parse_context.rb +37 -0
  20. data/lib/liquid/parser_switching.rb +4 -4
  21. data/lib/liquid/profiler/hooks.rb +7 -7
  22. data/lib/liquid/profiler.rb +18 -19
  23. data/lib/liquid/range_lookup.rb +16 -1
  24. data/lib/liquid/resource_limits.rb +23 -0
  25. data/lib/liquid/standardfilters.rb +121 -61
  26. data/lib/liquid/strainer.rb +14 -7
  27. data/lib/liquid/tablerowloop_drop.rb +62 -0
  28. data/lib/liquid/tag.rb +9 -8
  29. data/lib/liquid/tags/assign.rb +17 -4
  30. data/lib/liquid/tags/break.rb +0 -3
  31. data/lib/liquid/tags/capture.rb +1 -1
  32. data/lib/liquid/tags/case.rb +19 -12
  33. data/lib/liquid/tags/comment.rb +2 -2
  34. data/lib/liquid/tags/cycle.rb +6 -6
  35. data/lib/liquid/tags/decrement.rb +1 -4
  36. data/lib/liquid/tags/for.rb +95 -75
  37. data/lib/liquid/tags/if.rb +49 -44
  38. data/lib/liquid/tags/ifchanged.rb +0 -2
  39. data/lib/liquid/tags/include.rb +61 -52
  40. data/lib/liquid/tags/raw.rb +32 -4
  41. data/lib/liquid/tags/table_row.rb +12 -30
  42. data/lib/liquid/tags/unless.rb +3 -4
  43. data/lib/liquid/template.rb +42 -54
  44. data/lib/liquid/tokenizer.rb +31 -0
  45. data/lib/liquid/utils.rb +52 -8
  46. data/lib/liquid/variable.rb +46 -45
  47. data/lib/liquid/variable_lookup.rb +7 -5
  48. data/lib/liquid/version.rb +1 -1
  49. data/lib/liquid.rb +9 -7
  50. data/test/integration/assign_test.rb +8 -8
  51. data/test/integration/blank_test.rb +14 -14
  52. data/test/integration/context_test.rb +2 -2
  53. data/test/integration/document_test.rb +19 -0
  54. data/test/integration/drop_test.rb +42 -40
  55. data/test/integration/error_handling_test.rb +99 -46
  56. data/test/integration/filter_test.rb +60 -20
  57. data/test/integration/hash_ordering_test.rb +9 -9
  58. data/test/integration/output_test.rb +26 -27
  59. data/test/integration/parsing_quirks_test.rb +15 -13
  60. data/test/integration/render_profiling_test.rb +20 -20
  61. data/test/integration/security_test.rb +9 -7
  62. data/test/integration/standard_filter_test.rb +179 -40
  63. data/test/integration/tags/break_tag_test.rb +1 -2
  64. data/test/integration/tags/continue_tag_test.rb +0 -1
  65. data/test/integration/tags/for_tag_test.rb +133 -98
  66. data/test/integration/tags/if_else_tag_test.rb +75 -77
  67. data/test/integration/tags/include_tag_test.rb +34 -30
  68. data/test/integration/tags/increment_tag_test.rb +10 -11
  69. data/test/integration/tags/raw_tag_test.rb +7 -1
  70. data/test/integration/tags/standard_tag_test.rb +121 -122
  71. data/test/integration/tags/statements_test.rb +3 -5
  72. data/test/integration/tags/table_row_test.rb +20 -19
  73. data/test/integration/tags/unless_else_tag_test.rb +6 -6
  74. data/test/integration/template_test.rb +190 -49
  75. data/test/integration/trim_mode_test.rb +525 -0
  76. data/test/integration/variable_test.rb +23 -13
  77. data/test/test_helper.rb +33 -5
  78. data/test/unit/block_unit_test.rb +8 -5
  79. data/test/unit/condition_unit_test.rb +86 -77
  80. data/test/unit/context_unit_test.rb +48 -57
  81. data/test/unit/file_system_unit_test.rb +3 -3
  82. data/test/unit/i18n_unit_test.rb +2 -2
  83. data/test/unit/lexer_unit_test.rb +11 -8
  84. data/test/unit/parser_unit_test.rb +2 -2
  85. data/test/unit/regexp_unit_test.rb +1 -1
  86. data/test/unit/strainer_unit_test.rb +80 -1
  87. data/test/unit/tag_unit_test.rb +7 -2
  88. data/test/unit/tags/case_tag_unit_test.rb +1 -1
  89. data/test/unit/tags/for_tag_unit_test.rb +2 -2
  90. data/test/unit/tags/if_tag_unit_test.rb +1 -1
  91. data/test/unit/template_unit_test.rb +14 -5
  92. data/test/unit/tokenizer_unit_test.rb +24 -7
  93. data/test/unit/variable_unit_test.rb +60 -43
  94. metadata +19 -14
  95. data/lib/liquid/module_ex.rb +0 -62
  96. data/lib/liquid/token.rb +0 -18
  97. data/test/unit/module_ex_unit_test.rb +0 -87
  98. /data/{MIT-LICENSE → LICENSE} +0 -0
@@ -0,0 +1,525 @@
1
+ require 'test_helper'
2
+
3
+ class TrimModeTest < Minitest::Test
4
+ include Liquid
5
+
6
+ # Make sure the trim isn't applied to standard output
7
+ def test_standard_output
8
+ text = <<-END_TEMPLATE
9
+ <div>
10
+ <p>
11
+ {{ 'John' }}
12
+ </p>
13
+ </div>
14
+ END_TEMPLATE
15
+ expected = <<-END_EXPECTED
16
+ <div>
17
+ <p>
18
+ John
19
+ </p>
20
+ </div>
21
+ END_EXPECTED
22
+ assert_template_result(expected, text)
23
+ end
24
+
25
+ def test_variable_output_with_multiple_blank_lines
26
+ text = <<-END_TEMPLATE
27
+ <div>
28
+ <p>
29
+
30
+
31
+ {{- 'John' -}}
32
+
33
+
34
+ </p>
35
+ </div>
36
+ END_TEMPLATE
37
+ expected = <<-END_EXPECTED
38
+ <div>
39
+ <p>John</p>
40
+ </div>
41
+ END_EXPECTED
42
+ assert_template_result(expected, text)
43
+ end
44
+
45
+ def test_tag_output_with_multiple_blank_lines
46
+ text = <<-END_TEMPLATE
47
+ <div>
48
+ <p>
49
+
50
+
51
+ {%- if true -%}
52
+ yes
53
+ {%- endif -%}
54
+
55
+
56
+ </p>
57
+ </div>
58
+ END_TEMPLATE
59
+ expected = <<-END_EXPECTED
60
+ <div>
61
+ <p>yes</p>
62
+ </div>
63
+ END_EXPECTED
64
+ assert_template_result(expected, text)
65
+ end
66
+
67
+ # Make sure the trim isn't applied to standard tags
68
+ def test_standard_tags
69
+ whitespace = ' '
70
+ text = <<-END_TEMPLATE
71
+ <div>
72
+ <p>
73
+ {% if true %}
74
+ yes
75
+ {% endif %}
76
+ </p>
77
+ </div>
78
+ END_TEMPLATE
79
+ expected = <<-END_EXPECTED
80
+ <div>
81
+ <p>
82
+ #{whitespace}
83
+ yes
84
+ #{whitespace}
85
+ </p>
86
+ </div>
87
+ END_EXPECTED
88
+ assert_template_result(expected, text)
89
+
90
+ text = <<-END_TEMPLATE
91
+ <div>
92
+ <p>
93
+ {% if false %}
94
+ no
95
+ {% endif %}
96
+ </p>
97
+ </div>
98
+ END_TEMPLATE
99
+ expected = <<-END_EXPECTED
100
+ <div>
101
+ <p>
102
+ #{whitespace}
103
+ </p>
104
+ </div>
105
+ END_EXPECTED
106
+ assert_template_result(expected, text)
107
+ end
108
+
109
+ # Make sure the trim isn't too agressive
110
+ def test_no_trim_output
111
+ text = '<p>{{- \'John\' -}}</p>'
112
+ expected = '<p>John</p>'
113
+ assert_template_result(expected, text)
114
+ end
115
+
116
+ # Make sure the trim isn't too agressive
117
+ def test_no_trim_tags
118
+ text = '<p>{%- if true -%}yes{%- endif -%}</p>'
119
+ expected = '<p>yes</p>'
120
+ assert_template_result(expected, text)
121
+
122
+ text = '<p>{%- if false -%}no{%- endif -%}</p>'
123
+ expected = '<p></p>'
124
+ assert_template_result(expected, text)
125
+ end
126
+
127
+ def test_single_line_outer_tag
128
+ text = '<p> {%- if true %} yes {% endif -%} </p>'
129
+ expected = '<p> yes </p>'
130
+ assert_template_result(expected, text)
131
+
132
+ text = '<p> {%- if false %} no {% endif -%} </p>'
133
+ expected = '<p></p>'
134
+ assert_template_result(expected, text)
135
+ end
136
+
137
+ def test_single_line_inner_tag
138
+ text = '<p> {% if true -%} yes {%- endif %} </p>'
139
+ expected = '<p> yes </p>'
140
+ assert_template_result(expected, text)
141
+
142
+ text = '<p> {% if false -%} no {%- endif %} </p>'
143
+ expected = '<p> </p>'
144
+ assert_template_result(expected, text)
145
+ end
146
+
147
+ def test_single_line_post_tag
148
+ text = '<p> {% if true -%} yes {% endif -%} </p>'
149
+ expected = '<p> yes </p>'
150
+ assert_template_result(expected, text)
151
+
152
+ text = '<p> {% if false -%} no {% endif -%} </p>'
153
+ expected = '<p> </p>'
154
+ assert_template_result(expected, text)
155
+ end
156
+
157
+ def test_single_line_pre_tag
158
+ text = '<p> {%- if true %} yes {%- endif %} </p>'
159
+ expected = '<p> yes </p>'
160
+ assert_template_result(expected, text)
161
+
162
+ text = '<p> {%- if false %} no {%- endif %} </p>'
163
+ expected = '<p> </p>'
164
+ assert_template_result(expected, text)
165
+ end
166
+
167
+ def test_pre_trim_output
168
+ text = <<-END_TEMPLATE
169
+ <div>
170
+ <p>
171
+ {{- 'John' }}
172
+ </p>
173
+ </div>
174
+ END_TEMPLATE
175
+ expected = <<-END_EXPECTED
176
+ <div>
177
+ <p>John
178
+ </p>
179
+ </div>
180
+ END_EXPECTED
181
+ assert_template_result(expected, text)
182
+ end
183
+
184
+ def test_pre_trim_tags
185
+ text = <<-END_TEMPLATE
186
+ <div>
187
+ <p>
188
+ {%- if true %}
189
+ yes
190
+ {%- endif %}
191
+ </p>
192
+ </div>
193
+ END_TEMPLATE
194
+ expected = <<-END_EXPECTED
195
+ <div>
196
+ <p>
197
+ yes
198
+ </p>
199
+ </div>
200
+ END_EXPECTED
201
+ assert_template_result(expected, text)
202
+
203
+ text = <<-END_TEMPLATE
204
+ <div>
205
+ <p>
206
+ {%- if false %}
207
+ no
208
+ {%- endif %}
209
+ </p>
210
+ </div>
211
+ END_TEMPLATE
212
+ expected = <<-END_EXPECTED
213
+ <div>
214
+ <p>
215
+ </p>
216
+ </div>
217
+ END_EXPECTED
218
+ assert_template_result(expected, text)
219
+ end
220
+
221
+ def test_post_trim_output
222
+ text = <<-END_TEMPLATE
223
+ <div>
224
+ <p>
225
+ {{ 'John' -}}
226
+ </p>
227
+ </div>
228
+ END_TEMPLATE
229
+ expected = <<-END_EXPECTED
230
+ <div>
231
+ <p>
232
+ John</p>
233
+ </div>
234
+ END_EXPECTED
235
+ assert_template_result(expected, text)
236
+ end
237
+
238
+ def test_post_trim_tags
239
+ text = <<-END_TEMPLATE
240
+ <div>
241
+ <p>
242
+ {% if true -%}
243
+ yes
244
+ {% endif -%}
245
+ </p>
246
+ </div>
247
+ END_TEMPLATE
248
+ expected = <<-END_EXPECTED
249
+ <div>
250
+ <p>
251
+ yes
252
+ </p>
253
+ </div>
254
+ END_EXPECTED
255
+ assert_template_result(expected, text)
256
+
257
+ text = <<-END_TEMPLATE
258
+ <div>
259
+ <p>
260
+ {% if false -%}
261
+ no
262
+ {% endif -%}
263
+ </p>
264
+ </div>
265
+ END_TEMPLATE
266
+ expected = <<-END_EXPECTED
267
+ <div>
268
+ <p>
269
+ </p>
270
+ </div>
271
+ END_EXPECTED
272
+ assert_template_result(expected, text)
273
+ end
274
+
275
+ def test_pre_and_post_trim_tags
276
+ text = <<-END_TEMPLATE
277
+ <div>
278
+ <p>
279
+ {%- if true %}
280
+ yes
281
+ {% endif -%}
282
+ </p>
283
+ </div>
284
+ END_TEMPLATE
285
+ expected = <<-END_EXPECTED
286
+ <div>
287
+ <p>
288
+ yes
289
+ </p>
290
+ </div>
291
+ END_EXPECTED
292
+ assert_template_result(expected, text)
293
+
294
+ text = <<-END_TEMPLATE
295
+ <div>
296
+ <p>
297
+ {%- if false %}
298
+ no
299
+ {% endif -%}
300
+ </p>
301
+ </div>
302
+ END_TEMPLATE
303
+ expected = <<-END_EXPECTED
304
+ <div>
305
+ <p></p>
306
+ </div>
307
+ END_EXPECTED
308
+ assert_template_result(expected, text)
309
+ end
310
+
311
+ def test_post_and_pre_trim_tags
312
+ text = <<-END_TEMPLATE
313
+ <div>
314
+ <p>
315
+ {% if true -%}
316
+ yes
317
+ {%- endif %}
318
+ </p>
319
+ </div>
320
+ END_TEMPLATE
321
+ expected = <<-END_EXPECTED
322
+ <div>
323
+ <p>
324
+ yes
325
+ </p>
326
+ </div>
327
+ END_EXPECTED
328
+ assert_template_result(expected, text)
329
+
330
+ whitespace = ' '
331
+ text = <<-END_TEMPLATE
332
+ <div>
333
+ <p>
334
+ {% if false -%}
335
+ no
336
+ {%- endif %}
337
+ </p>
338
+ </div>
339
+ END_TEMPLATE
340
+ expected = <<-END_EXPECTED
341
+ <div>
342
+ <p>
343
+ #{whitespace}
344
+ </p>
345
+ </div>
346
+ END_EXPECTED
347
+ assert_template_result(expected, text)
348
+ end
349
+
350
+ def test_trim_output
351
+ text = <<-END_TEMPLATE
352
+ <div>
353
+ <p>
354
+ {{- 'John' -}}
355
+ </p>
356
+ </div>
357
+ END_TEMPLATE
358
+ expected = <<-END_EXPECTED
359
+ <div>
360
+ <p>John</p>
361
+ </div>
362
+ END_EXPECTED
363
+ assert_template_result(expected, text)
364
+ end
365
+
366
+ def test_trim_tags
367
+ text = <<-END_TEMPLATE
368
+ <div>
369
+ <p>
370
+ {%- if true -%}
371
+ yes
372
+ {%- endif -%}
373
+ </p>
374
+ </div>
375
+ END_TEMPLATE
376
+ expected = <<-END_EXPECTED
377
+ <div>
378
+ <p>yes</p>
379
+ </div>
380
+ END_EXPECTED
381
+ assert_template_result(expected, text)
382
+
383
+ text = <<-END_TEMPLATE
384
+ <div>
385
+ <p>
386
+ {%- if false -%}
387
+ no
388
+ {%- endif -%}
389
+ </p>
390
+ </div>
391
+ END_TEMPLATE
392
+ expected = <<-END_EXPECTED
393
+ <div>
394
+ <p></p>
395
+ </div>
396
+ END_EXPECTED
397
+ assert_template_result(expected, text)
398
+ end
399
+
400
+ def test_whitespace_trim_output
401
+ text = <<-END_TEMPLATE
402
+ <div>
403
+ <p>
404
+ {{- 'John' -}},
405
+ {{- '30' -}}
406
+ </p>
407
+ </div>
408
+ END_TEMPLATE
409
+ expected = <<-END_EXPECTED
410
+ <div>
411
+ <p>John,30</p>
412
+ </div>
413
+ END_EXPECTED
414
+ assert_template_result(expected, text)
415
+ end
416
+
417
+ def test_whitespace_trim_tags
418
+ text = <<-END_TEMPLATE
419
+ <div>
420
+ <p>
421
+ {%- if true -%}
422
+ yes
423
+ {%- endif -%}
424
+ </p>
425
+ </div>
426
+ END_TEMPLATE
427
+ expected = <<-END_EXPECTED
428
+ <div>
429
+ <p>yes</p>
430
+ </div>
431
+ END_EXPECTED
432
+ assert_template_result(expected, text)
433
+
434
+ text = <<-END_TEMPLATE
435
+ <div>
436
+ <p>
437
+ {%- if false -%}
438
+ no
439
+ {%- endif -%}
440
+ </p>
441
+ </div>
442
+ END_TEMPLATE
443
+ expected = <<-END_EXPECTED
444
+ <div>
445
+ <p></p>
446
+ </div>
447
+ END_EXPECTED
448
+ assert_template_result(expected, text)
449
+ end
450
+
451
+ def test_complex_trim_output
452
+ text = <<-END_TEMPLATE
453
+ <div>
454
+ <p>
455
+ {{- 'John' -}}
456
+ {{- '30' -}}
457
+ </p>
458
+ <b>
459
+ {{ 'John' -}}
460
+ {{- '30' }}
461
+ </b>
462
+ <i>
463
+ {{- 'John' }}
464
+ {{ '30' -}}
465
+ </i>
466
+ </div>
467
+ END_TEMPLATE
468
+ expected = <<-END_EXPECTED
469
+ <div>
470
+ <p>John30</p>
471
+ <b>
472
+ John30
473
+ </b>
474
+ <i>John
475
+ 30</i>
476
+ </div>
477
+ END_EXPECTED
478
+ assert_template_result(expected, text)
479
+ end
480
+
481
+ def test_complex_trim
482
+ text = <<-END_TEMPLATE
483
+ <div>
484
+ {%- if true -%}
485
+ {%- if true -%}
486
+ <p>
487
+ {{- 'John' -}}
488
+ </p>
489
+ {%- endif -%}
490
+ {%- endif -%}
491
+ </div>
492
+ END_TEMPLATE
493
+ expected = <<-END_EXPECTED
494
+ <div><p>John</p></div>
495
+ END_EXPECTED
496
+ assert_template_result(expected, text)
497
+ end
498
+
499
+ def test_raw_output
500
+ whitespace = ' '
501
+ text = <<-END_TEMPLATE
502
+ <div>
503
+ {% raw %}
504
+ {%- if true -%}
505
+ <p>
506
+ {{- 'John' -}}
507
+ </p>
508
+ {%- endif -%}
509
+ {% endraw %}
510
+ </div>
511
+ END_TEMPLATE
512
+ expected = <<-END_EXPECTED
513
+ <div>
514
+ #{whitespace}
515
+ {%- if true -%}
516
+ <p>
517
+ {{- 'John' -}}
518
+ </p>
519
+ {%- endif -%}
520
+ #{whitespace}
521
+ </div>
522
+ END_EXPECTED
523
+ assert_template_result(expected, text)
524
+ end
525
+ end # TrimModeTest
@@ -4,7 +4,7 @@ class VariableTest < Minitest::Test
4
4
  include Liquid
5
5
 
6
6
  def test_simple_variable
7
- template = Template.parse(%|{{test}}|)
7
+ template = Template.parse(%({{test}}))
8
8
  assert_equal 'worked', template.render!('test' => 'worked')
9
9
  assert_equal 'worked wonderfully', template.render!('test' => 'worked wonderfully')
10
10
  end
@@ -14,19 +14,29 @@ class VariableTest < Minitest::Test
14
14
  end
15
15
 
16
16
  def test_simple_with_whitespaces
17
- template = Template.parse(%| {{ test }} |)
17
+ template = Template.parse(%( {{ test }} ))
18
18
  assert_equal ' worked ', template.render!('test' => 'worked')
19
19
  assert_equal ' worked wonderfully ', template.render!('test' => 'worked wonderfully')
20
20
  end
21
21
 
22
22
  def test_ignore_unknown
23
- template = Template.parse(%|{{ test }}|)
23
+ template = Template.parse(%({{ test }}))
24
+ assert_equal '', template.render!
25
+ end
26
+
27
+ def test_using_blank_as_variable_name
28
+ template = Template.parse("{% assign foo = blank %}{{ foo }}")
29
+ assert_equal '', template.render!
30
+ end
31
+
32
+ def test_using_empty_as_variable_name
33
+ template = Template.parse("{% assign foo = empty %}{{ foo }}")
24
34
  assert_equal '', template.render!
25
35
  end
26
36
 
27
37
  def test_hash_scoping
28
- template = Template.parse(%|{{ test.test }}|)
29
- assert_equal 'worked', template.render!('test' => {'test' => 'worked'})
38
+ template = Template.parse(%({{ test.test }}))
39
+ assert_equal 'worked', template.render!('test' => { 'test' => 'worked' })
30
40
  end
31
41
 
32
42
  def test_false_renders_as_false
@@ -40,23 +50,23 @@ class VariableTest < Minitest::Test
40
50
  end
41
51
 
42
52
  def test_preset_assigns
43
- template = Template.parse(%|{{ test }}|)
53
+ template = Template.parse(%({{ test }}))
44
54
  template.assigns['test'] = 'worked'
45
55
  assert_equal 'worked', template.render!
46
56
  end
47
57
 
48
58
  def test_reuse_parsed_template
49
- template = Template.parse(%|{{ greeting }} {{ name }}|)
59
+ template = Template.parse(%({{ greeting }} {{ name }}))
50
60
  template.assigns['greeting'] = 'Goodbye'
51
61
  assert_equal 'Hello Tobi', template.render!('greeting' => 'Hello', 'name' => 'Tobi')
52
62
  assert_equal 'Hello ', template.render!('greeting' => 'Hello', 'unknown' => 'Tobi')
53
63
  assert_equal 'Hello Brian', template.render!('greeting' => 'Hello', 'name' => 'Brian')
54
64
  assert_equal 'Goodbye Brian', template.render!('name' => 'Brian')
55
- assert_equal({'greeting'=>'Goodbye'}, template.assigns)
65
+ assert_equal({ 'greeting' => 'Goodbye' }, template.assigns)
56
66
  end
57
67
 
58
68
  def test_assigns_not_polluted_from_template
59
- template = Template.parse(%|{{ test }}{% assign test = 'bar' %}{{ test }}|)
69
+ template = Template.parse(%({{ test }}{% assign test = 'bar' %}{{ test }}))
60
70
  template.assigns['test'] = 'baz'
61
71
  assert_equal 'bazbar', template.render!
62
72
  assert_equal 'bazbar', template.render!
@@ -65,14 +75,14 @@ class VariableTest < Minitest::Test
65
75
  end
66
76
 
67
77
  def test_hash_with_default_proc
68
- template = Template.parse(%|Hello {{ test }}|)
69
- assigns = Hash.new { |h,k| raise "Unknown variable '#{k}'" }
78
+ template = Template.parse(%(Hello {{ test }}))
79
+ assigns = Hash.new { |h, k| raise "Unknown variable '#{k}'" }
70
80
  assigns['test'] = 'Tobi'
71
81
  assert_equal 'Hello Tobi', template.render!(assigns)
72
82
  assigns.delete('test')
73
- e = assert_raises(RuntimeError) {
83
+ e = assert_raises(RuntimeError) do
74
84
  template.render!(assigns)
75
- }
85
+ end
76
86
  assert_equal "Unknown variable 'test'", e.message
77
87
  end
78
88
 
data/test/test_helper.rb CHANGED
@@ -4,8 +4,9 @@ ENV["MT_NO_EXPECTATIONS"] = "1"
4
4
  require 'minitest/autorun'
5
5
  require 'spy/integration'
6
6
 
7
- $:.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib'))
7
+ $LOAD_PATH.unshift(File.join(File.expand_path(__dir__), '..', 'lib'))
8
8
  require 'liquid.rb'
9
+ require 'liquid/profiler'
9
10
 
10
11
  mode = :strict
11
12
  if env_mode = ENV['LIQUID_PARSER_MODE']
@@ -14,6 +15,11 @@ if env_mode = ENV['LIQUID_PARSER_MODE']
14
15
  end
15
16
  Liquid::Template.error_mode = mode
16
17
 
18
+ if ENV['LIQUID-C'] == '1'
19
+ puts "-- LIQUID C"
20
+ require 'liquid/c'
21
+ end
22
+
17
23
  if Minitest.const_defined?('Test')
18
24
  # We're on Minitest 5+. Nothing to do here.
19
25
  else
@@ -24,7 +30,7 @@ end
24
30
  module Minitest
25
31
  class Test
26
32
  def fixture(name)
27
- File.join(File.expand_path(File.dirname(__FILE__)), "fixtures", name)
33
+ File.join(File.expand_path(__dir__), "fixtures", name)
28
34
  end
29
35
  end
30
36
 
@@ -41,10 +47,10 @@ module Minitest
41
47
  assert_match expected, Template.parse(template).render!(assigns), message
42
48
  end
43
49
 
44
- def assert_match_syntax_error(match, template, registers = {})
45
- exception = assert_raises(Liquid::SyntaxError) {
50
+ def assert_match_syntax_error(match, template, assigns = {})
51
+ exception = assert_raises(Liquid::SyntaxError) do
46
52
  Template.parse(template).render(assigns)
47
- }
53
+ end
48
54
  assert_match match, exception.message
49
55
  end
50
56
 
@@ -87,3 +93,25 @@ class ThingWithToLiquid
87
93
  'foobar'
88
94
  end
89
95
  end
96
+
97
+ class ErrorDrop < Liquid::Drop
98
+ def standard_error
99
+ raise Liquid::StandardError, 'standard error'
100
+ end
101
+
102
+ def argument_error
103
+ raise Liquid::ArgumentError, 'argument error'
104
+ end
105
+
106
+ def syntax_error
107
+ raise Liquid::SyntaxError, 'syntax error'
108
+ end
109
+
110
+ def runtime_error
111
+ raise 'runtime error'
112
+ end
113
+
114
+ def exception
115
+ raise Exception, 'exception'
116
+ end
117
+ end
@@ -34,7 +34,7 @@ class BlockUnitTest < Minitest::Test
34
34
  template = Liquid::Template.parse(" {{funk}} {{so}} {{brother}} ")
35
35
  assert_equal 7, template.root.nodelist.size
36
36
  assert_equal [String, Variable, String, Variable, String, Variable, String],
37
- block_types(template.root.nodelist)
37
+ block_types(template.root.nodelist)
38
38
  end
39
39
 
40
40
  def test_with_block
@@ -45,11 +45,14 @@ class BlockUnitTest < Minitest::Test
45
45
 
46
46
  def test_with_custom_tag
47
47
  Liquid::Template.register_tag("testtag", Block)
48
- assert Liquid::Template.parse( "{% testtag %} {% endtesttag %}")
48
+ assert Liquid::Template.parse("{% testtag %} {% endtesttag %}")
49
+ ensure
50
+ Liquid::Template.tags.delete('testtag')
49
51
  end
50
52
 
51
53
  private
52
- def block_types(nodelist)
53
- nodelist.collect { |node| node.class }
54
- end
54
+
55
+ def block_types(nodelist)
56
+ nodelist.collect(&:class)
57
+ end
55
58
  end # VariableTest