liquid 3.0.6 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/History.md +154 -58
- data/{MIT-LICENSE → LICENSE} +0 -0
- data/README.md +33 -0
- data/lib/liquid/block.rb +42 -125
- data/lib/liquid/block_body.rb +99 -79
- data/lib/liquid/condition.rb +52 -32
- data/lib/liquid/context.rb +57 -51
- data/lib/liquid/document.rb +19 -9
- data/lib/liquid/drop.rb +17 -16
- data/lib/liquid/errors.rb +20 -24
- data/lib/liquid/expression.rb +26 -10
- data/lib/liquid/extensions.rb +19 -7
- data/lib/liquid/file_system.rb +11 -11
- data/lib/liquid/forloop_drop.rb +42 -0
- data/lib/liquid/i18n.rb +6 -6
- data/lib/liquid/interrupts.rb +1 -2
- data/lib/liquid/lexer.rb +12 -8
- data/lib/liquid/locales/en.yml +6 -2
- data/lib/liquid/parse_context.rb +38 -0
- data/lib/liquid/parse_tree_visitor.rb +42 -0
- data/lib/liquid/parser_switching.rb +4 -4
- data/lib/liquid/profiler/hooks.rb +7 -7
- data/lib/liquid/profiler.rb +18 -19
- data/lib/liquid/range_lookup.rb +16 -1
- data/lib/liquid/resource_limits.rb +23 -0
- data/lib/liquid/standardfilters.rb +207 -61
- data/lib/liquid/strainer.rb +15 -8
- data/lib/liquid/tablerowloop_drop.rb +62 -0
- data/lib/liquid/tag.rb +9 -8
- data/lib/liquid/tags/assign.rb +25 -4
- data/lib/liquid/tags/break.rb +0 -3
- data/lib/liquid/tags/capture.rb +1 -1
- data/lib/liquid/tags/case.rb +27 -12
- data/lib/liquid/tags/comment.rb +2 -2
- data/lib/liquid/tags/cycle.rb +16 -8
- data/lib/liquid/tags/decrement.rb +1 -4
- data/lib/liquid/tags/for.rb +103 -75
- data/lib/liquid/tags/if.rb +60 -44
- data/lib/liquid/tags/ifchanged.rb +0 -2
- data/lib/liquid/tags/include.rb +71 -51
- data/lib/liquid/tags/raw.rb +32 -4
- data/lib/liquid/tags/table_row.rb +21 -31
- data/lib/liquid/tags/unless.rb +3 -4
- data/lib/liquid/template.rb +42 -54
- data/lib/liquid/tokenizer.rb +31 -0
- data/lib/liquid/truffle.rb +5 -0
- data/lib/liquid/utils.rb +52 -8
- data/lib/liquid/variable.rb +59 -46
- data/lib/liquid/variable_lookup.rb +14 -6
- data/lib/liquid/version.rb +2 -1
- data/lib/liquid.rb +10 -7
- data/test/integration/assign_test.rb +8 -8
- data/test/integration/blank_test.rb +14 -14
- data/test/integration/block_test.rb +12 -0
- data/test/integration/context_test.rb +2 -2
- data/test/integration/document_test.rb +19 -0
- data/test/integration/drop_test.rb +42 -40
- data/test/integration/error_handling_test.rb +96 -43
- data/test/integration/filter_test.rb +60 -20
- data/test/integration/hash_ordering_test.rb +9 -9
- data/test/integration/output_test.rb +26 -27
- data/test/integration/parse_tree_visitor_test.rb +247 -0
- data/test/integration/parsing_quirks_test.rb +19 -13
- data/test/integration/render_profiling_test.rb +20 -20
- data/test/integration/security_test.rb +23 -7
- data/test/integration/standard_filter_test.rb +426 -46
- data/test/integration/tags/break_tag_test.rb +1 -2
- data/test/integration/tags/continue_tag_test.rb +0 -1
- data/test/integration/tags/for_tag_test.rb +135 -100
- data/test/integration/tags/if_else_tag_test.rb +75 -77
- data/test/integration/tags/include_tag_test.rb +50 -31
- data/test/integration/tags/increment_tag_test.rb +10 -11
- data/test/integration/tags/raw_tag_test.rb +7 -1
- data/test/integration/tags/standard_tag_test.rb +121 -122
- data/test/integration/tags/statements_test.rb +3 -5
- data/test/integration/tags/table_row_test.rb +20 -19
- data/test/integration/tags/unless_else_tag_test.rb +6 -6
- data/test/integration/template_test.rb +199 -49
- data/test/integration/trim_mode_test.rb +529 -0
- data/test/integration/variable_test.rb +27 -13
- data/test/test_helper.rb +33 -6
- data/test/truffle/truffle_test.rb +9 -0
- data/test/unit/block_unit_test.rb +8 -5
- data/test/unit/condition_unit_test.rb +94 -77
- data/test/unit/context_unit_test.rb +69 -72
- data/test/unit/file_system_unit_test.rb +3 -3
- data/test/unit/i18n_unit_test.rb +2 -2
- data/test/unit/lexer_unit_test.rb +12 -9
- data/test/unit/parser_unit_test.rb +2 -2
- data/test/unit/regexp_unit_test.rb +1 -1
- data/test/unit/strainer_unit_test.rb +96 -1
- data/test/unit/tag_unit_test.rb +7 -2
- data/test/unit/tags/case_tag_unit_test.rb +1 -1
- data/test/unit/tags/for_tag_unit_test.rb +2 -2
- data/test/unit/tags/if_tag_unit_test.rb +1 -1
- data/test/unit/template_unit_test.rb +14 -5
- data/test/unit/tokenizer_unit_test.rb +24 -7
- data/test/unit/variable_unit_test.rb +60 -43
- metadata +62 -50
- data/lib/liquid/module_ex.rb +0 -62
- data/lib/liquid/token.rb +0 -18
- data/test/unit/module_ex_unit_test.rb +0 -87
@@ -5,116 +5,116 @@ class StandardTagTest < Minitest::Test
|
|
5
5
|
|
6
6
|
def test_no_transform
|
7
7
|
assert_template_result('this text should come out of the template without change...',
|
8
|
-
|
8
|
+
'this text should come out of the template without change...')
|
9
9
|
|
10
|
-
assert_template_result('blah','blah')
|
11
|
-
assert_template_result('<blah>','<blah>')
|
12
|
-
assert_template_result('|,.:','|,.:')
|
13
|
-
assert_template_result('','')
|
10
|
+
assert_template_result('blah', 'blah')
|
11
|
+
assert_template_result('<blah>', '<blah>')
|
12
|
+
assert_template_result('|,.:', '|,.:')
|
13
|
+
assert_template_result('', '')
|
14
14
|
|
15
|
-
text =
|
16
|
-
as you can clearly see here
|
17
|
-
assert_template_result(text,text)
|
15
|
+
text = %(this shouldnt see any transformation either but has multiple lines
|
16
|
+
as you can clearly see here ...)
|
17
|
+
assert_template_result(text, text)
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_has_a_block_which_does_nothing
|
21
|
-
assert_template_result(
|
22
|
-
|
23
|
-
|
24
|
-
assert_template_result('','{%comment%}{%endcomment%}')
|
25
|
-
assert_template_result('','{%comment%}{% endcomment %}')
|
26
|
-
assert_template_result('','{% comment %}{%endcomment%}')
|
27
|
-
assert_template_result('','{% comment %}{% endcomment %}')
|
28
|
-
assert_template_result('','{%comment%}comment{%endcomment%}')
|
29
|
-
assert_template_result('','{% comment %}comment{% endcomment %}')
|
30
|
-
assert_template_result('','{% comment %} 1 {% comment %} 2 {% endcomment %} 3 {% endcomment %}')
|
31
|
-
|
32
|
-
assert_template_result('','{%comment%}{%blabla%}{%endcomment%}')
|
33
|
-
assert_template_result('','{% comment %}{% blabla %}{% endcomment %}')
|
34
|
-
assert_template_result('','{%comment%}{% endif %}{%endcomment%}')
|
35
|
-
assert_template_result('','{% comment %}{% endwhatever %}{% endcomment %}')
|
36
|
-
assert_template_result('','{% comment %}{% raw %} {{%%%%}} }} { {% endcomment %} {% comment {% endraw %} {% endcomment %}')
|
37
|
-
|
38
|
-
assert_template_result('foobar','foo{%comment%}comment{%endcomment%}bar')
|
39
|
-
assert_template_result('foobar','foo{% comment %}comment{% endcomment %}bar')
|
40
|
-
assert_template_result('foobar','foo{%comment%} comment {%endcomment%}bar')
|
41
|
-
assert_template_result('foobar','foo{% comment %} comment {% endcomment %}bar')
|
42
|
-
|
43
|
-
assert_template_result('foo bar','foo {%comment%} {%endcomment%} bar')
|
44
|
-
assert_template_result('foo bar','foo {%comment%}comment{%endcomment%} bar')
|
45
|
-
assert_template_result('foo bar','foo {%comment%} comment {%endcomment%} bar')
|
46
|
-
|
47
|
-
assert_template_result('foobar','foo{%comment%}
|
21
|
+
assert_template_result(%(the comment block should be removed .. right?),
|
22
|
+
%(the comment block should be removed {%comment%} be gone.. {%endcomment%} .. right?))
|
23
|
+
|
24
|
+
assert_template_result('', '{%comment%}{%endcomment%}')
|
25
|
+
assert_template_result('', '{%comment%}{% endcomment %}')
|
26
|
+
assert_template_result('', '{% comment %}{%endcomment%}')
|
27
|
+
assert_template_result('', '{% comment %}{% endcomment %}')
|
28
|
+
assert_template_result('', '{%comment%}comment{%endcomment%}')
|
29
|
+
assert_template_result('', '{% comment %}comment{% endcomment %}')
|
30
|
+
assert_template_result('', '{% comment %} 1 {% comment %} 2 {% endcomment %} 3 {% endcomment %}')
|
31
|
+
|
32
|
+
assert_template_result('', '{%comment%}{%blabla%}{%endcomment%}')
|
33
|
+
assert_template_result('', '{% comment %}{% blabla %}{% endcomment %}')
|
34
|
+
assert_template_result('', '{%comment%}{% endif %}{%endcomment%}')
|
35
|
+
assert_template_result('', '{% comment %}{% endwhatever %}{% endcomment %}')
|
36
|
+
assert_template_result('', '{% comment %}{% raw %} {{%%%%}} }} { {% endcomment %} {% comment {% endraw %} {% endcomment %}')
|
37
|
+
|
38
|
+
assert_template_result('foobar', 'foo{%comment%}comment{%endcomment%}bar')
|
39
|
+
assert_template_result('foobar', 'foo{% comment %}comment{% endcomment %}bar')
|
40
|
+
assert_template_result('foobar', 'foo{%comment%} comment {%endcomment%}bar')
|
41
|
+
assert_template_result('foobar', 'foo{% comment %} comment {% endcomment %}bar')
|
42
|
+
|
43
|
+
assert_template_result('foo bar', 'foo {%comment%} {%endcomment%} bar')
|
44
|
+
assert_template_result('foo bar', 'foo {%comment%}comment{%endcomment%} bar')
|
45
|
+
assert_template_result('foo bar', 'foo {%comment%} comment {%endcomment%} bar')
|
46
|
+
|
47
|
+
assert_template_result('foobar', 'foo{%comment%}
|
48
48
|
{%endcomment%}bar')
|
49
49
|
end
|
50
50
|
|
51
51
|
def test_hyphenated_assign
|
52
|
-
assigns = {'a-b' => '1' }
|
52
|
+
assigns = { 'a-b' => '1' }
|
53
53
|
assert_template_result('a-b:1 a-b:2', 'a-b:{{a-b}} {%assign a-b = 2 %}a-b:{{a-b}}', assigns)
|
54
54
|
end
|
55
55
|
|
56
56
|
def test_assign_with_colon_and_spaces
|
57
|
-
assigns = {'var' => {'a:b c' => {'paged' => '1' }}}
|
57
|
+
assigns = { 'var' => { 'a:b c' => { 'paged' => '1' } } }
|
58
58
|
assert_template_result('var2: 1', '{%assign var2 = var["a:b c"].paged %}var2: {{var2}}', assigns)
|
59
59
|
end
|
60
60
|
|
61
61
|
def test_capture
|
62
|
-
assigns = {'var' => 'content' }
|
62
|
+
assigns = { 'var' => 'content' }
|
63
63
|
assert_template_result('content foo content foo ',
|
64
|
-
|
65
|
-
|
64
|
+
'{{ var2 }}{% capture var2 %}{{ var }} foo {% endcapture %}{{ var2 }}{{ var2 }}',
|
65
|
+
assigns)
|
66
66
|
end
|
67
67
|
|
68
68
|
def test_capture_detects_bad_syntax
|
69
69
|
assert_raises(SyntaxError) do
|
70
70
|
assert_template_result('content foo content foo ',
|
71
|
-
|
72
|
-
|
71
|
+
'{{ var2 }}{% capture %}{{ var }} foo {% endcapture %}{{ var2 }}{{ var2 }}',
|
72
|
+
{ 'var' => 'content' })
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
76
|
def test_case
|
77
|
-
assigns = {'condition' => 2 }
|
77
|
+
assigns = { 'condition' => 2 }
|
78
78
|
assert_template_result(' its 2 ',
|
79
|
-
|
80
|
-
|
79
|
+
'{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}',
|
80
|
+
assigns)
|
81
81
|
|
82
|
-
assigns = {'condition' => 1 }
|
82
|
+
assigns = { 'condition' => 1 }
|
83
83
|
assert_template_result(' its 1 ',
|
84
|
-
|
85
|
-
|
84
|
+
'{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}',
|
85
|
+
assigns)
|
86
86
|
|
87
|
-
assigns = {'condition' => 3 }
|
87
|
+
assigns = { 'condition' => 3 }
|
88
88
|
assert_template_result('',
|
89
|
-
|
90
|
-
|
89
|
+
'{% case condition %}{% when 1 %} its 1 {% when 2 %} its 2 {% endcase %}',
|
90
|
+
assigns)
|
91
91
|
|
92
|
-
assigns = {'condition' => "string here" }
|
92
|
+
assigns = { 'condition' => "string here" }
|
93
93
|
assert_template_result(' hit ',
|
94
|
-
|
95
|
-
|
94
|
+
'{% case condition %}{% when "string here" %} hit {% endcase %}',
|
95
|
+
assigns)
|
96
96
|
|
97
|
-
assigns = {'condition' => "bad string here" }
|
97
|
+
assigns = { 'condition' => "bad string here" }
|
98
98
|
assert_template_result('',
|
99
|
-
|
100
|
-
|
99
|
+
'{% case condition %}{% when "string here" %} hit {% endcase %}',\
|
100
|
+
assigns)
|
101
101
|
end
|
102
102
|
|
103
103
|
def test_case_with_else
|
104
|
-
assigns = {'condition' => 5 }
|
104
|
+
assigns = { 'condition' => 5 }
|
105
105
|
assert_template_result(' hit ',
|
106
|
-
|
107
|
-
|
106
|
+
'{% case condition %}{% when 5 %} hit {% else %} else {% endcase %}',
|
107
|
+
assigns)
|
108
108
|
|
109
|
-
assigns = {'condition' => 6 }
|
109
|
+
assigns = { 'condition' => 6 }
|
110
110
|
assert_template_result(' else ',
|
111
|
-
|
112
|
-
|
111
|
+
'{% case condition %}{% when 5 %} hit {% else %} else {% endcase %}',
|
112
|
+
assigns)
|
113
113
|
|
114
|
-
assigns = {'condition' => 6 }
|
114
|
+
assigns = { 'condition' => 6 }
|
115
115
|
assert_template_result(' else ',
|
116
|
-
|
117
|
-
|
116
|
+
'{% case condition %} {% when 5 %} hit {% else %} else {% endcase %}',
|
117
|
+
assigns)
|
118
118
|
end
|
119
119
|
|
120
120
|
def test_case_on_size
|
@@ -128,87 +128,87 @@ class StandardTagTest < Minitest::Test
|
|
128
128
|
|
129
129
|
def test_case_on_size_with_else
|
130
130
|
assert_template_result('else',
|
131
|
-
|
132
|
-
|
131
|
+
'{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}',
|
132
|
+
'a' => [])
|
133
133
|
|
134
134
|
assert_template_result('1',
|
135
|
-
|
136
|
-
|
135
|
+
'{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}',
|
136
|
+
'a' => [1])
|
137
137
|
|
138
138
|
assert_template_result('2',
|
139
|
-
|
140
|
-
|
139
|
+
'{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}',
|
140
|
+
'a' => [1, 1])
|
141
141
|
|
142
142
|
assert_template_result('else',
|
143
|
-
|
144
|
-
|
143
|
+
'{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}',
|
144
|
+
'a' => [1, 1, 1])
|
145
145
|
|
146
146
|
assert_template_result('else',
|
147
|
-
|
148
|
-
|
147
|
+
'{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}',
|
148
|
+
'a' => [1, 1, 1, 1])
|
149
149
|
|
150
150
|
assert_template_result('else',
|
151
|
-
|
152
|
-
|
151
|
+
'{% case a.size %}{% when 1 %}1{% when 2 %}2{% else %}else{% endcase %}',
|
152
|
+
'a' => [1, 1, 1, 1, 1])
|
153
153
|
end
|
154
154
|
|
155
155
|
def test_case_on_length_with_else
|
156
156
|
assert_template_result('else',
|
157
|
-
|
158
|
-
|
157
|
+
'{% case a.empty? %}{% when true %}true{% when false %}false{% else %}else{% endcase %}',
|
158
|
+
{})
|
159
159
|
|
160
160
|
assert_template_result('false',
|
161
|
-
|
162
|
-
|
161
|
+
'{% case false %}{% when true %}true{% when false %}false{% else %}else{% endcase %}',
|
162
|
+
{})
|
163
163
|
|
164
164
|
assert_template_result('true',
|
165
|
-
|
166
|
-
|
165
|
+
'{% case true %}{% when true %}true{% when false %}false{% else %}else{% endcase %}',
|
166
|
+
{})
|
167
167
|
|
168
168
|
assert_template_result('else',
|
169
|
-
|
170
|
-
|
169
|
+
'{% case NULL %}{% when true %}true{% when false %}false{% else %}else{% endcase %}',
|
170
|
+
{})
|
171
171
|
end
|
172
172
|
|
173
173
|
def test_assign_from_case
|
174
174
|
# Example from the shopify forums
|
175
|
-
code =
|
175
|
+
code = "{% case collection.handle %}{% when 'menswear-jackets' %}{% assign ptitle = 'menswear' %}{% when 'menswear-t-shirts' %}{% assign ptitle = 'menswear' %}{% else %}{% assign ptitle = 'womenswear' %}{% endcase %}{{ ptitle }}"
|
176
176
|
template = Liquid::Template.parse(code)
|
177
|
-
assert_equal "menswear", template.render!("collection" => {'handle' => 'menswear-jackets'})
|
178
|
-
assert_equal "menswear", template.render!("collection" => {'handle' => 'menswear-t-shirts'})
|
179
|
-
assert_equal "womenswear", template.render!("collection" => {'handle' => 'x'})
|
180
|
-
assert_equal "womenswear", template.render!("collection" => {'handle' => 'y'})
|
181
|
-
assert_equal "womenswear", template.render!("collection" => {'handle' => 'z'})
|
177
|
+
assert_equal "menswear", template.render!("collection" => { 'handle' => 'menswear-jackets' })
|
178
|
+
assert_equal "menswear", template.render!("collection" => { 'handle' => 'menswear-t-shirts' })
|
179
|
+
assert_equal "womenswear", template.render!("collection" => { 'handle' => 'x' })
|
180
|
+
assert_equal "womenswear", template.render!("collection" => { 'handle' => 'y' })
|
181
|
+
assert_equal "womenswear", template.render!("collection" => { 'handle' => 'z' })
|
182
182
|
end
|
183
183
|
|
184
184
|
def test_case_when_or
|
185
185
|
code = '{% case condition %}{% when 1 or 2 or 3 %} its 1 or 2 or 3 {% when 4 %} its 4 {% endcase %}'
|
186
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 1 })
|
187
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 2 })
|
188
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 3 })
|
189
|
-
assert_template_result(' its 4 ', code, {'condition' => 4 })
|
190
|
-
assert_template_result('', code, {'condition' => 5 })
|
186
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => 1 })
|
187
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => 2 })
|
188
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => 3 })
|
189
|
+
assert_template_result(' its 4 ', code, { 'condition' => 4 })
|
190
|
+
assert_template_result('', code, { 'condition' => 5 })
|
191
191
|
|
192
192
|
code = '{% case condition %}{% when 1 or "string" or null %} its 1 or 2 or 3 {% when 4 %} its 4 {% endcase %}'
|
193
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 1 })
|
194
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 'string' })
|
195
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => nil })
|
196
|
-
assert_template_result('', code, {'condition' => 'something else' })
|
193
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => 1 })
|
194
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => 'string' })
|
195
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => nil })
|
196
|
+
assert_template_result('', code, { 'condition' => 'something else' })
|
197
197
|
end
|
198
198
|
|
199
199
|
def test_case_when_comma
|
200
200
|
code = '{% case condition %}{% when 1, 2, 3 %} its 1 or 2 or 3 {% when 4 %} its 4 {% endcase %}'
|
201
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 1 })
|
202
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 2 })
|
203
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 3 })
|
204
|
-
assert_template_result(' its 4 ', code, {'condition' => 4 })
|
205
|
-
assert_template_result('', code, {'condition' => 5 })
|
201
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => 1 })
|
202
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => 2 })
|
203
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => 3 })
|
204
|
+
assert_template_result(' its 4 ', code, { 'condition' => 4 })
|
205
|
+
assert_template_result('', code, { 'condition' => 5 })
|
206
206
|
|
207
207
|
code = '{% case condition %}{% when 1, "string", null %} its 1 or 2 or 3 {% when 4 %} its 4 {% endcase %}'
|
208
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 1 })
|
209
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => 'string' })
|
210
|
-
assert_template_result(' its 1 or 2 or 3 ', code, {'condition' => nil })
|
211
|
-
assert_template_result('', code, {'condition' => 'something else' })
|
208
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => 1 })
|
209
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => 'string' })
|
210
|
+
assert_template_result(' its 1 or 2 or 3 ', code, { 'condition' => nil })
|
211
|
+
assert_template_result('', code, { 'condition' => 'something else' })
|
212
212
|
end
|
213
213
|
|
214
214
|
def test_assign
|
@@ -236,15 +236,14 @@ class StandardTagTest < Minitest::Test
|
|
236
236
|
assert_raises(SyntaxError) do
|
237
237
|
assert_template_result('', '{% case false %}{% huh %}true{% endcase %}', {})
|
238
238
|
end
|
239
|
-
|
240
239
|
end
|
241
240
|
|
242
241
|
def test_cycle
|
243
|
-
assert_template_result('one','{%cycle "one", "two"%}')
|
244
|
-
assert_template_result('one two','{%cycle "one", "two"%} {%cycle "one", "two"%}')
|
245
|
-
assert_template_result(' two','{%cycle "", "two"%} {%cycle "", "two"%}')
|
242
|
+
assert_template_result('one', '{%cycle "one", "two"%}')
|
243
|
+
assert_template_result('one two', '{%cycle "one", "two"%} {%cycle "one", "two"%}')
|
244
|
+
assert_template_result(' two', '{%cycle "", "two"%} {%cycle "", "two"%}')
|
246
245
|
|
247
|
-
assert_template_result('one two one','{%cycle "one", "two"%} {%cycle "one", "two"%} {%cycle "one", "two"%}')
|
246
|
+
assert_template_result('one two one', '{%cycle "one", "two"%} {%cycle "one", "two"%} {%cycle "one", "two"%}')
|
248
247
|
|
249
248
|
assert_template_result('text-align: left text-align: right',
|
250
249
|
'{%cycle "text-align: left", "text-align: right" %} {%cycle "text-align: left", "text-align: right"%}')
|
@@ -261,18 +260,18 @@ class StandardTagTest < Minitest::Test
|
|
261
260
|
end
|
262
261
|
|
263
262
|
def test_multiple_named_cycles_with_names_from_context
|
264
|
-
assigns = {"var1" => 1, "var2" => 2 }
|
263
|
+
assigns = { "var1" => 1, "var2" => 2 }
|
265
264
|
assert_template_result('one one two two one one',
|
266
265
|
'{%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %} {%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %} {%cycle var1: "one", "two" %} {%cycle var2: "one", "two" %}', assigns)
|
267
266
|
end
|
268
267
|
|
269
268
|
def test_size_of_array
|
270
|
-
assigns = {"array" => [1,2,3,4]}
|
269
|
+
assigns = { "array" => [1, 2, 3, 4] }
|
271
270
|
assert_template_result('array has 4 elements', "array has {{ array.size }} elements", assigns)
|
272
271
|
end
|
273
272
|
|
274
273
|
def test_size_of_hash
|
275
|
-
assigns = {"hash" => {:
|
274
|
+
assigns = { "hash" => { a: 1, b: 2, c: 3, d: 4 } }
|
276
275
|
assert_template_result('hash has 4 elements', "hash has {{ hash.size }} elements", assigns)
|
277
276
|
end
|
278
277
|
|
@@ -284,11 +283,11 @@ class StandardTagTest < Minitest::Test
|
|
284
283
|
end
|
285
284
|
|
286
285
|
def test_ifchanged
|
287
|
-
assigns = {'array' => [ 1, 1, 2, 2, 3, 3] }
|
288
|
-
assert_template_result('123','{%for item in array%}{%ifchanged%}{{item}}{% endifchanged %}{%endfor%}',assigns)
|
286
|
+
assigns = { 'array' => [ 1, 1, 2, 2, 3, 3] }
|
287
|
+
assert_template_result('123', '{%for item in array%}{%ifchanged%}{{item}}{% endifchanged %}{%endfor%}', assigns)
|
289
288
|
|
290
|
-
assigns = {'array' => [ 1, 1, 1, 1] }
|
291
|
-
assert_template_result('1','{%for item in array%}{%ifchanged%}{{item}}{% endifchanged %}{%endfor%}',assigns)
|
289
|
+
assigns = { 'array' => [ 1, 1, 1, 1] }
|
290
|
+
assert_template_result('1', '{%for item in array%}{%ifchanged%}{{item}}{% endifchanged %}{%endfor%}', assigns)
|
292
291
|
end
|
293
292
|
|
294
293
|
def test_multiline_tag
|
@@ -37,7 +37,6 @@ class StatementsTest < Minitest::Test
|
|
37
37
|
text = ' {% if null <= 0 %} true {% else %} false {% endif %} '
|
38
38
|
assert_template_result ' false ', text
|
39
39
|
|
40
|
-
|
41
40
|
text = ' {% if 0 <= null %} true {% else %} false {% endif %} '
|
42
41
|
assert_template_result ' false ', text
|
43
42
|
end
|
@@ -72,18 +71,17 @@ class StatementsTest < Minitest::Test
|
|
72
71
|
assert_template_result ' true ', text, 'var' => 'hello there!'
|
73
72
|
end
|
74
73
|
|
75
|
-
|
76
74
|
def test_var_and_long_string_are_equal_backwards
|
77
75
|
text = " {% if 'hello there!' == var %} true {% else %} false {% endif %} "
|
78
76
|
assert_template_result ' true ', text, 'var' => 'hello there!'
|
79
77
|
end
|
80
78
|
|
81
|
-
#def test_is_nil
|
79
|
+
# def test_is_nil
|
82
80
|
# text = %| {% if var != nil %} true {% else %} false {% end %} |
|
83
81
|
# @template.assigns = { 'var' => 'hello there!'}
|
84
82
|
# expected = %| true |
|
85
83
|
# assert_equal expected, @template.parse(text)
|
86
|
-
#end
|
84
|
+
# end
|
87
85
|
|
88
86
|
def test_is_collection_empty
|
89
87
|
text = ' {% if array == empty %} true {% else %} false {% endif %} '
|
@@ -92,7 +90,7 @@ class StatementsTest < Minitest::Test
|
|
92
90
|
|
93
91
|
def test_is_not_collection_empty
|
94
92
|
text = ' {% if array == empty %} true {% else %} false {% endif %} '
|
95
|
-
assert_template_result ' false ', text, 'array' => [1,2,3]
|
93
|
+
assert_template_result ' false ', text, 'array' => [1, 2, 3]
|
96
94
|
end
|
97
95
|
|
98
96
|
def test_nil
|
@@ -16,48 +16,49 @@ class TableRowTest < Minitest::Test
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def test_table_row
|
19
|
-
|
20
19
|
assert_template_result("<tr class=\"row1\">\n<td class=\"col1\"> 1 </td><td class=\"col2\"> 2 </td><td class=\"col3\"> 3 </td></tr>\n<tr class=\"row2\"><td class=\"col1\"> 4 </td><td class=\"col2\"> 5 </td><td class=\"col3\"> 6 </td></tr>\n",
|
21
|
-
|
22
|
-
|
20
|
+
'{% tablerow n in numbers cols:3%} {{n}} {% endtablerow %}',
|
21
|
+
'numbers' => [1, 2, 3, 4, 5, 6])
|
23
22
|
|
24
23
|
assert_template_result("<tr class=\"row1\">\n</tr>\n",
|
25
|
-
|
26
|
-
|
24
|
+
'{% tablerow n in numbers cols:3%} {{n}} {% endtablerow %}',
|
25
|
+
'numbers' => [])
|
27
26
|
end
|
28
27
|
|
29
28
|
def test_table_row_with_different_cols
|
30
29
|
assert_template_result("<tr class=\"row1\">\n<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>\n<tr class=\"row2\"><td class=\"col1\"> 6 </td></tr>\n",
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
'{% tablerow n in numbers cols:5%} {{n}} {% endtablerow %}',
|
31
|
+
'numbers' => [1, 2, 3, 4, 5, 6])
|
34
32
|
end
|
35
33
|
|
36
34
|
def test_table_col_counter
|
37
35
|
assert_template_result("<tr class=\"row1\">\n<td class=\"col1\">1</td><td class=\"col2\">2</td></tr>\n<tr class=\"row2\"><td class=\"col1\">1</td><td class=\"col2\">2</td></tr>\n<tr class=\"row3\"><td class=\"col1\">1</td><td class=\"col2\">2</td></tr>\n",
|
38
|
-
|
39
|
-
|
36
|
+
'{% tablerow n in numbers cols:2%}{{tablerowloop.col}}{% endtablerow %}',
|
37
|
+
'numbers' => [1, 2, 3, 4, 5, 6])
|
40
38
|
end
|
41
39
|
|
42
40
|
def test_quoted_fragment
|
43
41
|
assert_template_result("<tr class=\"row1\">\n<td class=\"col1\"> 1 </td><td class=\"col2\"> 2 </td><td class=\"col3\"> 3 </td></tr>\n<tr class=\"row2\"><td class=\"col1\"> 4 </td><td class=\"col2\"> 5 </td><td class=\"col3\"> 6 </td></tr>\n",
|
44
|
-
|
45
|
-
|
42
|
+
"{% tablerow n in collections.frontpage cols:3%} {{n}} {% endtablerow %}",
|
43
|
+
'collections' => { 'frontpage' => [1, 2, 3, 4, 5, 6] })
|
46
44
|
assert_template_result("<tr class=\"row1\">\n<td class=\"col1\"> 1 </td><td class=\"col2\"> 2 </td><td class=\"col3\"> 3 </td></tr>\n<tr class=\"row2\"><td class=\"col1\"> 4 </td><td class=\"col2\"> 5 </td><td class=\"col3\"> 6 </td></tr>\n",
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
"{% tablerow n in collections['frontpage'] cols:3%} {{n}} {% endtablerow %}",
|
46
|
+
'collections' => { 'frontpage' => [1, 2, 3, 4, 5, 6] })
|
50
47
|
end
|
51
48
|
|
52
49
|
def test_enumerable_drop
|
53
50
|
assert_template_result("<tr class=\"row1\">\n<td class=\"col1\"> 1 </td><td class=\"col2\"> 2 </td><td class=\"col3\"> 3 </td></tr>\n<tr class=\"row2\"><td class=\"col1\"> 4 </td><td class=\"col2\"> 5 </td><td class=\"col3\"> 6 </td></tr>\n",
|
54
|
-
|
55
|
-
|
51
|
+
'{% tablerow n in numbers cols:3%} {{n}} {% endtablerow %}',
|
52
|
+
'numbers' => ArrayDrop.new([1, 2, 3, 4, 5, 6]))
|
56
53
|
end
|
57
54
|
|
58
55
|
def test_offset_and_limit
|
59
56
|
assert_template_result("<tr class=\"row1\">\n<td class=\"col1\"> 1 </td><td class=\"col2\"> 2 </td><td class=\"col3\"> 3 </td></tr>\n<tr class=\"row2\"><td class=\"col1\"> 4 </td><td class=\"col2\"> 5 </td><td class=\"col3\"> 6 </td></tr>\n",
|
60
|
-
|
61
|
-
|
57
|
+
'{% tablerow n in numbers cols:3 offset:1 limit:6%} {{n}} {% endtablerow %}',
|
58
|
+
'numbers' => [0, 1, 2, 3, 4, 5, 6, 7])
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_blank_string_not_iterable
|
62
|
+
assert_template_result("<tr class=\"row1\">\n</tr>\n", "{% tablerow char in characters cols:3 %}I WILL NOT BE OUTPUT{% endtablerow %}", 'characters' => '')
|
62
63
|
end
|
63
64
|
end
|
@@ -4,16 +4,16 @@ class UnlessElseTagTest < Minitest::Test
|
|
4
4
|
include Liquid
|
5
5
|
|
6
6
|
def test_unless
|
7
|
-
assert_template_result(' ',' {% unless true %} this text should not go into the output {% endunless %} ')
|
7
|
+
assert_template_result(' ', ' {% unless true %} this text should not go into the output {% endunless %} ')
|
8
8
|
assert_template_result(' this text should go into the output ',
|
9
|
-
|
10
|
-
assert_template_result(' you rock ?','{% unless true %} you suck {% endunless %} {% unless false %} you rock {% endunless %}?')
|
9
|
+
' {% unless false %} this text should go into the output {% endunless %} ')
|
10
|
+
assert_template_result(' you rock ?', '{% unless true %} you suck {% endunless %} {% unless false %} you rock {% endunless %}?')
|
11
11
|
end
|
12
12
|
|
13
13
|
def test_unless_else
|
14
|
-
assert_template_result(' YES ','{% unless true %} NO {% else %} YES {% endunless %}')
|
15
|
-
assert_template_result(' YES ','{% unless false %} YES {% else %} NO {% endunless %}')
|
16
|
-
assert_template_result(' YES ','{% unless "foo" %} NO {% else %} YES {% endunless %}')
|
14
|
+
assert_template_result(' YES ', '{% unless true %} NO {% else %} YES {% endunless %}')
|
15
|
+
assert_template_result(' YES ', '{% unless false %} YES {% else %} NO {% endunless %}')
|
16
|
+
assert_template_result(' YES ', '{% unless "foo" %} NO {% else %} YES {% endunless %}')
|
17
17
|
end
|
18
18
|
|
19
19
|
def test_unless_in_loop
|