liquid 3.0.6 → 4.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. checksums.yaml +5 -5
  2. data/History.md +154 -58
  3. data/{MIT-LICENSE → LICENSE} +0 -0
  4. data/README.md +33 -0
  5. data/lib/liquid/block.rb +42 -125
  6. data/lib/liquid/block_body.rb +99 -79
  7. data/lib/liquid/condition.rb +52 -32
  8. data/lib/liquid/context.rb +57 -51
  9. data/lib/liquid/document.rb +19 -9
  10. data/lib/liquid/drop.rb +17 -16
  11. data/lib/liquid/errors.rb +20 -24
  12. data/lib/liquid/expression.rb +26 -10
  13. data/lib/liquid/extensions.rb +19 -7
  14. data/lib/liquid/file_system.rb +11 -11
  15. data/lib/liquid/forloop_drop.rb +42 -0
  16. data/lib/liquid/i18n.rb +6 -6
  17. data/lib/liquid/interrupts.rb +1 -2
  18. data/lib/liquid/lexer.rb +12 -8
  19. data/lib/liquid/locales/en.yml +6 -2
  20. data/lib/liquid/parse_context.rb +38 -0
  21. data/lib/liquid/parse_tree_visitor.rb +42 -0
  22. data/lib/liquid/parser_switching.rb +4 -4
  23. data/lib/liquid/profiler/hooks.rb +7 -7
  24. data/lib/liquid/profiler.rb +18 -19
  25. data/lib/liquid/range_lookup.rb +16 -1
  26. data/lib/liquid/resource_limits.rb +23 -0
  27. data/lib/liquid/standardfilters.rb +207 -61
  28. data/lib/liquid/strainer.rb +15 -8
  29. data/lib/liquid/tablerowloop_drop.rb +62 -0
  30. data/lib/liquid/tag.rb +9 -8
  31. data/lib/liquid/tags/assign.rb +25 -4
  32. data/lib/liquid/tags/break.rb +0 -3
  33. data/lib/liquid/tags/capture.rb +1 -1
  34. data/lib/liquid/tags/case.rb +27 -12
  35. data/lib/liquid/tags/comment.rb +2 -2
  36. data/lib/liquid/tags/cycle.rb +16 -8
  37. data/lib/liquid/tags/decrement.rb +1 -4
  38. data/lib/liquid/tags/for.rb +103 -75
  39. data/lib/liquid/tags/if.rb +60 -44
  40. data/lib/liquid/tags/ifchanged.rb +0 -2
  41. data/lib/liquid/tags/include.rb +71 -51
  42. data/lib/liquid/tags/raw.rb +32 -4
  43. data/lib/liquid/tags/table_row.rb +21 -31
  44. data/lib/liquid/tags/unless.rb +3 -4
  45. data/lib/liquid/template.rb +42 -54
  46. data/lib/liquid/tokenizer.rb +31 -0
  47. data/lib/liquid/truffle.rb +5 -0
  48. data/lib/liquid/utils.rb +52 -8
  49. data/lib/liquid/variable.rb +59 -46
  50. data/lib/liquid/variable_lookup.rb +14 -6
  51. data/lib/liquid/version.rb +2 -1
  52. data/lib/liquid.rb +10 -7
  53. data/test/integration/assign_test.rb +8 -8
  54. data/test/integration/blank_test.rb +14 -14
  55. data/test/integration/block_test.rb +12 -0
  56. data/test/integration/context_test.rb +2 -2
  57. data/test/integration/document_test.rb +19 -0
  58. data/test/integration/drop_test.rb +42 -40
  59. data/test/integration/error_handling_test.rb +96 -43
  60. data/test/integration/filter_test.rb +60 -20
  61. data/test/integration/hash_ordering_test.rb +9 -9
  62. data/test/integration/output_test.rb +26 -27
  63. data/test/integration/parse_tree_visitor_test.rb +247 -0
  64. data/test/integration/parsing_quirks_test.rb +19 -13
  65. data/test/integration/render_profiling_test.rb +20 -20
  66. data/test/integration/security_test.rb +23 -7
  67. data/test/integration/standard_filter_test.rb +426 -46
  68. data/test/integration/tags/break_tag_test.rb +1 -2
  69. data/test/integration/tags/continue_tag_test.rb +0 -1
  70. data/test/integration/tags/for_tag_test.rb +135 -100
  71. data/test/integration/tags/if_else_tag_test.rb +75 -77
  72. data/test/integration/tags/include_tag_test.rb +50 -31
  73. data/test/integration/tags/increment_tag_test.rb +10 -11
  74. data/test/integration/tags/raw_tag_test.rb +7 -1
  75. data/test/integration/tags/standard_tag_test.rb +121 -122
  76. data/test/integration/tags/statements_test.rb +3 -5
  77. data/test/integration/tags/table_row_test.rb +20 -19
  78. data/test/integration/tags/unless_else_tag_test.rb +6 -6
  79. data/test/integration/template_test.rb +199 -49
  80. data/test/integration/trim_mode_test.rb +529 -0
  81. data/test/integration/variable_test.rb +27 -13
  82. data/test/test_helper.rb +33 -6
  83. data/test/truffle/truffle_test.rb +9 -0
  84. data/test/unit/block_unit_test.rb +8 -5
  85. data/test/unit/condition_unit_test.rb +94 -77
  86. data/test/unit/context_unit_test.rb +69 -72
  87. data/test/unit/file_system_unit_test.rb +3 -3
  88. data/test/unit/i18n_unit_test.rb +2 -2
  89. data/test/unit/lexer_unit_test.rb +12 -9
  90. data/test/unit/parser_unit_test.rb +2 -2
  91. data/test/unit/regexp_unit_test.rb +1 -1
  92. data/test/unit/strainer_unit_test.rb +96 -1
  93. data/test/unit/tag_unit_test.rb +7 -2
  94. data/test/unit/tags/case_tag_unit_test.rb +1 -1
  95. data/test/unit/tags/for_tag_unit_test.rb +2 -2
  96. data/test/unit/tags/if_tag_unit_test.rb +1 -1
  97. data/test/unit/template_unit_test.rb +14 -5
  98. data/test/unit/tokenizer_unit_test.rb +24 -7
  99. data/test/unit/variable_unit_test.rb +60 -43
  100. metadata +62 -50
  101. data/lib/liquid/module_ex.rb +0 -62
  102. data/lib/liquid/token.rb +0 -18
  103. data/test/unit/module_ex_unit_test.rb +0 -87
@@ -0,0 +1,529 @@
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_right_trim_followed_by_tag
500
+ assert_template_result('ab c', '{{ "a" -}}{{ "b" }} c')
501
+ end
502
+
503
+ def test_raw_output
504
+ whitespace = ' '
505
+ text = <<-END_TEMPLATE
506
+ <div>
507
+ {% raw %}
508
+ {%- if true -%}
509
+ <p>
510
+ {{- 'John' -}}
511
+ </p>
512
+ {%- endif -%}
513
+ {% endraw %}
514
+ </div>
515
+ END_TEMPLATE
516
+ expected = <<-END_EXPECTED
517
+ <div>
518
+ #{whitespace}
519
+ {%- if true -%}
520
+ <p>
521
+ {{- 'John' -}}
522
+ </p>
523
+ {%- endif -%}
524
+ #{whitespace}
525
+ </div>
526
+ END_EXPECTED
527
+ assert_template_result(expected, text)
528
+ end
529
+ 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,18 +75,22 @@ 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
 
79
89
  def test_multiline_variable
80
90
  assert_equal 'worked', Template.parse("{{\ntest\n}}").render!('test' => 'worked')
81
91
  end
92
+
93
+ def test_render_symbol
94
+ assert_template_result 'bar', '{{ foo }}', 'foo' => :bar
95
+ end
82
96
  end
data/test/test_helper.rb CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  ENV["MT_NO_EXPECTATIONS"] = "1"
4
4
  require 'minitest/autorun'
5
- require 'spy/integration'
6
5
 
7
- $:.unshift(File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.join(File.expand_path(__dir__), '..', 'lib'))
8
7
  require 'liquid.rb'
8
+ require 'liquid/profiler'
9
9
 
10
10
  mode = :strict
11
11
  if env_mode = ENV['LIQUID_PARSER_MODE']
@@ -14,6 +14,11 @@ if env_mode = ENV['LIQUID_PARSER_MODE']
14
14
  end
15
15
  Liquid::Template.error_mode = mode
16
16
 
17
+ if ENV['LIQUID-C'] == '1'
18
+ puts "-- LIQUID C"
19
+ require 'liquid/c'
20
+ end
21
+
17
22
  if Minitest.const_defined?('Test')
18
23
  # We're on Minitest 5+. Nothing to do here.
19
24
  else
@@ -24,7 +29,7 @@ end
24
29
  module Minitest
25
30
  class Test
26
31
  def fixture(name)
27
- File.join(File.expand_path(File.dirname(__FILE__)), "fixtures", name)
32
+ File.join(File.expand_path(__dir__), "fixtures", name)
28
33
  end
29
34
  end
30
35
 
@@ -41,10 +46,10 @@ module Minitest
41
46
  assert_match expected, Template.parse(template).render!(assigns), message
42
47
  end
43
48
 
44
- def assert_match_syntax_error(match, template, registers = {})
45
- exception = assert_raises(Liquid::SyntaxError) {
49
+ def assert_match_syntax_error(match, template, assigns = {})
50
+ exception = assert_raises(Liquid::SyntaxError) do
46
51
  Template.parse(template).render(assigns)
47
- }
52
+ end
48
53
  assert_match match, exception.message
49
54
  end
50
55
 
@@ -87,3 +92,25 @@ class ThingWithToLiquid
87
92
  'foobar'
88
93
  end
89
94
  end
95
+
96
+ class ErrorDrop < Liquid::Drop
97
+ def standard_error
98
+ raise Liquid::StandardError, 'standard error'
99
+ end
100
+
101
+ def argument_error
102
+ raise Liquid::ArgumentError, 'argument error'
103
+ end
104
+
105
+ def syntax_error
106
+ raise Liquid::SyntaxError, 'syntax error'
107
+ end
108
+
109
+ def runtime_error
110
+ raise 'runtime error'
111
+ end
112
+
113
+ def exception
114
+ raise Exception, 'exception'
115
+ end
116
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+
3
+ class TruffleTest < Minitest::Test
4
+ include Liquid
5
+
6
+ def test_truffle_works
7
+
8
+ end
9
+ end