mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-18 10:20:43 -07:00
Make Parser.expression parse equality expressions
This commit is contained in:
@@ -26,10 +26,17 @@ class LexerUnitTest < Minitest::Test
|
||||
)
|
||||
end
|
||||
|
||||
def test_equality
|
||||
assert_equal(
|
||||
[[:equality, '=='], [:equality, '<>'], [:equality, '!='], [:end_of_string]],
|
||||
tokenize('== <> != '),
|
||||
)
|
||||
end
|
||||
|
||||
def test_comparison
|
||||
assert_equal(
|
||||
[[:comparison, '=='], [:comparison, '<>'], [:comparison, 'contains'], [:end_of_string]],
|
||||
tokenize('== <> contains '),
|
||||
[[:comparison, '>'], [:comparison, '>='], [:comparison, '<'], [:comparison, '<='], [:comparison, 'contains'], [:end_of_string]],
|
||||
tokenize('> >= < <= contains'),
|
||||
)
|
||||
end
|
||||
|
||||
@@ -81,7 +88,7 @@ class LexerUnitTest < Minitest::Test
|
||||
|
||||
def test_whitespace
|
||||
assert_equal(
|
||||
[[:id, 'five'], [:pipe, '|'], [:comparison, '=='], [:end_of_string]],
|
||||
[[:id, 'five'], [:pipe, '|'], [:equality, '=='], [:end_of_string]],
|
||||
tokenize("five|\n\t =="),
|
||||
)
|
||||
end
|
||||
|
||||
@@ -77,6 +77,31 @@ class ParserUnitTest < Minitest::Test
|
||||
assert_equal(0..5, p.expression)
|
||||
end
|
||||
|
||||
def test_equality
|
||||
p = new_parser("a == b")
|
||||
expr = p.expression
|
||||
assert(expr.is_a?(BinaryExpression))
|
||||
assert_equal('==', expr.operator)
|
||||
assert_equal('a', expr.left.name)
|
||||
assert_equal('b', expr.right.name)
|
||||
|
||||
# BinaryExpression(==)
|
||||
# left: BinaryExpression(<)
|
||||
# left: 0
|
||||
# right: 5
|
||||
# right: BinaryExpression(>)
|
||||
# left: 6
|
||||
# right: 1
|
||||
p = new_parser("0 < 5 == 6 > 1")
|
||||
expr = p.expression
|
||||
assert(expr.is_a?(BinaryExpression))
|
||||
assert_equal('==', expr.operator)
|
||||
assert_equal(0, expr.left.left)
|
||||
assert_equal(5, expr.left.right)
|
||||
assert_equal(6, expr.right.left)
|
||||
assert_equal(1, expr.right.right)
|
||||
end
|
||||
|
||||
def test_comparison
|
||||
p = new_parser("a > b")
|
||||
expr = p.expression
|
||||
|
||||
Reference in New Issue
Block a user