mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-17 01:40:42 -07:00
Add support for parenthesized expressions
This commit is contained in:
@@ -98,12 +98,12 @@ class ParserUnitTest < Minitest::Test
|
||||
expr = p.expression
|
||||
assert(expr.is_a?(BinaryExpression))
|
||||
assert_equal('and', expr.operator)
|
||||
assert_equal('==', expr.left_node.operator)
|
||||
assert_equal('a', expr.left_node.left_node.name)
|
||||
assert_equal('b', expr.left_node.right_node.name)
|
||||
assert_equal('or', expr.right_node.operator)
|
||||
assert_equal('c', expr.right_node.left_node.name)
|
||||
assert_equal('d', expr.right_node.right_node.name)
|
||||
assert_equal('==', expr.left_node.operator)
|
||||
assert_equal('a', expr.left_node.left_node.name)
|
||||
assert_equal('b', expr.left_node.right_node.name)
|
||||
assert_equal('or', expr.right_node.operator)
|
||||
assert_equal('c', expr.right_node.left_node.name)
|
||||
assert_equal('d', expr.right_node.right_node.name)
|
||||
end
|
||||
|
||||
def test_equality
|
||||
@@ -197,6 +197,28 @@ class ParserUnitTest < Minitest::Test
|
||||
assert_equal('(hi[5].wat..old)', p.expression_string)
|
||||
end
|
||||
|
||||
def test_groupings_aka_parenthesized_expressions
|
||||
# without the parens, this would be evaled as a and (b or c)
|
||||
p = new_parser("(a and b) or c")
|
||||
expr = p.expression
|
||||
assert_equal('or', expr.operator)
|
||||
assert_equal('and', expr.left_node.operator)
|
||||
assert_equal('a', expr.left_node.left_node.name)
|
||||
assert_equal('b', expr.left_node.right_node.name)
|
||||
assert_equal('c', expr.right_node.name)
|
||||
end
|
||||
|
||||
def test_groupings_can_be_used_to_hijack_operation_priority
|
||||
# without parens would be parsed as `a and (b == c)`
|
||||
p = new_parser("(a and b) == c")
|
||||
expr = p.expression
|
||||
assert_equal('==', expr.operator)
|
||||
assert_equal('and', expr.left_node.operator)
|
||||
assert_equal('a', expr.left_node.left_node.name)
|
||||
assert_equal('b', expr.left_node.right_node.name)
|
||||
assert_equal('c', expr.right_node.name)
|
||||
end
|
||||
|
||||
def test_argument_string
|
||||
p = new_parser("filter: hi.there[5], keyarg: 7")
|
||||
assert_equal('filter', p.consume(:id))
|
||||
|
||||
Reference in New Issue
Block a user