@@ -135,14 +135,52 @@ def test_lax_filter_argument_parsing
135135 var = create_variable ( %( number_of_comments | pluralize: 'comment': 'comments' ) , error_mode : :lax )
136136 assert_equal ( VariableLookup . new ( 'number_of_comments' ) , var . name )
137137 assert_equal ( [ [ 'pluralize' , [ 'comment' , 'comments' ] ] ] , var . filters )
138+
139+ # missing does not throws error
140+ create_variable ( %(n | f1: ,) , error_mode : :lax )
141+ create_variable ( %(n | f1: ,| f2) , error_mode : :lax )
142+
143+ # arg does not require colon, but ignores args :O, also ignores first kwarg since it splits on ':'
144+ var = create_variable ( %(n | f1 1 | f2 k1: v1) , error_mode : :lax )
145+ assert_equal ( [ [ 'f1' , [ ] ] , [ 'f2' , [ VariableLookup . new ( 'v1' ) ] ] ] , var . filters )
146+
147+ # positional and kwargs parsing
148+ var = create_variable ( %(n | filter: 1, 2, 3 | filter2: k1: 1, k2: 2) , error_mode : :lax )
149+ assert_equal ( [ [ 'filter' , [ 1 , 2 , 3 ] ] , [ 'filter2' , [ ] , { "k1" => 1 , "k2" => 2 } ] ] , var . filters )
150+
151+ # positional and kwargs intermixed (pos1, key1: val1, pos2)
152+ var = create_variable ( %(n | link_to: class: "black", "https://example.com", title: "title") , error_mode : :lax )
153+ assert_equal ( [ [ 'link_to' , [ "https://example.com" ] , { "class" => "black" , "title" => "title" } ] ] , var . filters )
138154 end
139155
140156 def test_strict_filter_argument_parsing
141- with_error_mode ( :strict ) do
142- assert_raises ( SyntaxError ) do
143- create_variable ( %( number_of_comments | pluralize: 'comment': 'comments' ) )
144- end
145- end
157+ # optional colon
158+ var = create_variable ( %(n | f1 | f2:) , error_mode : :strict )
159+ assert_equal ( [ [ 'f1' , [ ] ] , [ 'f2' , [ ] ] ] , var . filters )
160+
161+ # missing argument throws error
162+ assert_raises ( SyntaxError ) { create_variable ( %(n | f1: ,) , error_mode : :strict ) }
163+ assert_raises ( SyntaxError ) { create_variable ( %(n | f1: ,| f2) , error_mode : :strict ) }
164+
165+ # arg requires colon
166+ assert_raises ( SyntaxError ) { create_variable ( %(n | f1 1) , error_mode : :strict ) }
167+
168+ # trailing comma doesn't throw
169+ create_variable ( %(n | f1: 1, 2, 3, | f2:) , error_mode : :strict )
170+
171+ # missing comma throws error
172+ assert_raises ( SyntaxError ) { create_variable ( %(n | filter: 1 2, 3) , error_mode : :strict ) }
173+
174+ # positional and kwargs parsing
175+ var = create_variable ( %(n | filter: 1, 2, 3 | filter2: k1: 1, k2: 2) , error_mode : :strict )
176+ assert_equal ( [ [ 'filter' , [ 1 , 2 , 3 ] ] , [ 'filter2' , [ ] , { "k1" => 1 , "k2" => 2 } ] ] , var . filters )
177+
178+ # positional and kwargs intermixed (pos1, key1: val1, pos2)
179+ var = create_variable ( %(n | link_to: class: "black", "https://example.com", title: "title") , error_mode : :strict )
180+ assert_equal ( [ [ 'link_to' , [ "https://example.com" ] , { "class" => "black" , "title" => "title" } ] ] , var . filters )
181+
182+ # string key throws
183+ assert_raises ( SyntaxError ) { create_variable ( %(n | pluralize: 'comment': 'comments') , error_mode : :strict ) }
146184 end
147185
148186 def test_output_raw_source_of_variable
0 commit comments