|
|
|
|
@@ -3,50 +3,54 @@ require 'test_helper'
|
|
|
|
|
class ConditionUnitTest < Minitest::Test
|
|
|
|
|
include Liquid
|
|
|
|
|
|
|
|
|
|
def setup
|
|
|
|
|
@context = Liquid::Context.new
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_basic_condition
|
|
|
|
|
assert_equal false, Condition.new(1, '==', 2).evaluate
|
|
|
|
|
assert_equal true, Condition.new(1, '==', 1).evaluate
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_default_operators_evalute_true
|
|
|
|
|
assert_evalutes_true 1, '==', 1
|
|
|
|
|
assert_evalutes_true 1, '!=', 2
|
|
|
|
|
assert_evalutes_true 1, '<>', 2
|
|
|
|
|
assert_evalutes_true 1, '<', 2
|
|
|
|
|
assert_evalutes_true 2, '>', 1
|
|
|
|
|
assert_evalutes_true 1, '>=', 1
|
|
|
|
|
assert_evalutes_true 2, '>=', 1
|
|
|
|
|
assert_evalutes_true 1, '<=', 2
|
|
|
|
|
assert_evalutes_true 1, '<=', 1
|
|
|
|
|
assert_evaluates_true 1, '==', 1
|
|
|
|
|
assert_evaluates_true 1, '!=', 2
|
|
|
|
|
assert_evaluates_true 1, '<>', 2
|
|
|
|
|
assert_evaluates_true 1, '<', 2
|
|
|
|
|
assert_evaluates_true 2, '>', 1
|
|
|
|
|
assert_evaluates_true 1, '>=', 1
|
|
|
|
|
assert_evaluates_true 2, '>=', 1
|
|
|
|
|
assert_evaluates_true 1, '<=', 2
|
|
|
|
|
assert_evaluates_true 1, '<=', 1
|
|
|
|
|
# negative numbers
|
|
|
|
|
assert_evalutes_true 1, '>', -1
|
|
|
|
|
assert_evalutes_true -1, '<', 1
|
|
|
|
|
assert_evalutes_true 1.0, '>', -1.0
|
|
|
|
|
assert_evalutes_true -1.0, '<', 1.0
|
|
|
|
|
assert_evaluates_true 1, '>', -1
|
|
|
|
|
assert_evaluates_true (-1), '<', 1
|
|
|
|
|
assert_evaluates_true 1.0, '>', -1.0
|
|
|
|
|
assert_evaluates_true (-1.0), '<', 1.0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_default_operators_evalute_false
|
|
|
|
|
assert_evalutes_false 1, '==', 2
|
|
|
|
|
assert_evalutes_false 1, '!=', 1
|
|
|
|
|
assert_evalutes_false 1, '<>', 1
|
|
|
|
|
assert_evalutes_false 1, '<', 0
|
|
|
|
|
assert_evalutes_false 2, '>', 4
|
|
|
|
|
assert_evalutes_false 1, '>=', 3
|
|
|
|
|
assert_evalutes_false 2, '>=', 4
|
|
|
|
|
assert_evalutes_false 1, '<=', 0
|
|
|
|
|
assert_evalutes_false 1, '<=', 0
|
|
|
|
|
assert_evaluates_false 1, '==', 2
|
|
|
|
|
assert_evaluates_false 1, '!=', 1
|
|
|
|
|
assert_evaluates_false 1, '<>', 1
|
|
|
|
|
assert_evaluates_false 1, '<', 0
|
|
|
|
|
assert_evaluates_false 2, '>', 4
|
|
|
|
|
assert_evaluates_false 1, '>=', 3
|
|
|
|
|
assert_evaluates_false 2, '>=', 4
|
|
|
|
|
assert_evaluates_false 1, '<=', 0
|
|
|
|
|
assert_evaluates_false 1, '<=', 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_contains_works_on_strings
|
|
|
|
|
assert_evalutes_true 'bob', 'contains', 'o'
|
|
|
|
|
assert_evalutes_true 'bob', 'contains', 'b'
|
|
|
|
|
assert_evalutes_true 'bob', 'contains', 'bo'
|
|
|
|
|
assert_evalutes_true 'bob', 'contains', 'ob'
|
|
|
|
|
assert_evalutes_true 'bob', 'contains', 'bob'
|
|
|
|
|
assert_evaluates_true 'bob', 'contains', 'o'
|
|
|
|
|
assert_evaluates_true 'bob', 'contains', 'b'
|
|
|
|
|
assert_evaluates_true 'bob', 'contains', 'bo'
|
|
|
|
|
assert_evaluates_true 'bob', 'contains', 'ob'
|
|
|
|
|
assert_evaluates_true 'bob', 'contains', 'bob'
|
|
|
|
|
|
|
|
|
|
assert_evalutes_false 'bob', 'contains', 'bob2'
|
|
|
|
|
assert_evalutes_false 'bob', 'contains', 'a'
|
|
|
|
|
assert_evalutes_false 'bob', 'contains', '---'
|
|
|
|
|
assert_evaluates_false 'bob', 'contains', 'bob2'
|
|
|
|
|
assert_evaluates_false 'bob', 'contains', 'a'
|
|
|
|
|
assert_evaluates_false 'bob', 'contains', '---'
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_invalid_comparation_operator
|
|
|
|
|
@@ -65,29 +69,29 @@ class ConditionUnitTest < Minitest::Test
|
|
|
|
|
@context['array'] = [1, 2, 3, 4, 5]
|
|
|
|
|
array_expr = VariableLookup.new("array")
|
|
|
|
|
|
|
|
|
|
assert_evalutes_false array_expr, 'contains', 0
|
|
|
|
|
assert_evalutes_true array_expr, 'contains', 1
|
|
|
|
|
assert_evalutes_true array_expr, 'contains', 2
|
|
|
|
|
assert_evalutes_true array_expr, 'contains', 3
|
|
|
|
|
assert_evalutes_true array_expr, 'contains', 4
|
|
|
|
|
assert_evalutes_true array_expr, 'contains', 5
|
|
|
|
|
assert_evalutes_false array_expr, 'contains', 6
|
|
|
|
|
assert_evalutes_false array_expr, 'contains', "1"
|
|
|
|
|
assert_evaluates_false array_expr, 'contains', 0
|
|
|
|
|
assert_evaluates_true array_expr, 'contains', 1
|
|
|
|
|
assert_evaluates_true array_expr, 'contains', 2
|
|
|
|
|
assert_evaluates_true array_expr, 'contains', 3
|
|
|
|
|
assert_evaluates_true array_expr, 'contains', 4
|
|
|
|
|
assert_evaluates_true array_expr, 'contains', 5
|
|
|
|
|
assert_evaluates_false array_expr, 'contains', 6
|
|
|
|
|
assert_evaluates_false array_expr, 'contains', "1"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_contains_returns_false_for_nil_operands
|
|
|
|
|
@context = Liquid::Context.new
|
|
|
|
|
assert_evalutes_false VariableLookup.new('not_assigned'), 'contains', '0'
|
|
|
|
|
assert_evalutes_false 0, 'contains', VariableLookup.new('not_assigned')
|
|
|
|
|
assert_evaluates_false VariableLookup.new('not_assigned'), 'contains', '0'
|
|
|
|
|
assert_evaluates_false 0, 'contains', VariableLookup.new('not_assigned')
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_contains_return_false_on_wrong_data_type
|
|
|
|
|
assert_evalutes_false 1, 'contains', 0
|
|
|
|
|
assert_evaluates_false 1, 'contains', 0
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_contains_with_string_left_operand_coerces_right_operand_to_string
|
|
|
|
|
assert_evalutes_true ' 1 ', 'contains', 1
|
|
|
|
|
assert_evalutes_false ' 1 ', 'contains', 2
|
|
|
|
|
assert_evaluates_true ' 1 ', 'contains', 1
|
|
|
|
|
assert_evaluates_false ' 1 ', 'contains', 2
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def test_or_condition
|
|
|
|
|
@@ -121,8 +125,8 @@ class ConditionUnitTest < Minitest::Test
|
|
|
|
|
def test_should_allow_custom_proc_operator
|
|
|
|
|
Condition.operators['starts_with'] = proc { |cond, left, right| left =~ %r{^#{right}} }
|
|
|
|
|
|
|
|
|
|
assert_evalutes_true 'bob', 'starts_with', 'b'
|
|
|
|
|
assert_evalutes_false 'bob', 'starts_with', 'o'
|
|
|
|
|
assert_evaluates_true 'bob', 'starts_with', 'b'
|
|
|
|
|
assert_evaluates_false 'bob', 'starts_with', 'o'
|
|
|
|
|
ensure
|
|
|
|
|
Condition.operators.delete 'starts_with'
|
|
|
|
|
end
|
|
|
|
|
@@ -131,24 +135,24 @@ class ConditionUnitTest < Minitest::Test
|
|
|
|
|
@context = Liquid::Context.new
|
|
|
|
|
@context['one'] = @context['another'] = "gnomeslab-and-or-liquid"
|
|
|
|
|
|
|
|
|
|
assert_evalutes_true VariableLookup.new("one"), '==', VariableLookup.new("another")
|
|
|
|
|
assert_evaluates_true VariableLookup.new("one"), '==', VariableLookup.new("another")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
|
|
def assert_evalutes_true(left, op, right)
|
|
|
|
|
assert Condition.new(left, op, right).evaluate(@context || Liquid::Context.new),
|
|
|
|
|
def assert_evaluates_true(left, op, right)
|
|
|
|
|
assert Condition.new(left, op, right).evaluate(@context),
|
|
|
|
|
"Evaluated false: #{left} #{op} #{right}"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def assert_evalutes_false(left, op, right)
|
|
|
|
|
assert !Condition.new(left, op, right).evaluate(@context || Liquid::Context.new),
|
|
|
|
|
def assert_evaluates_false(left, op, right)
|
|
|
|
|
assert !Condition.new(left, op, right).evaluate(@context),
|
|
|
|
|
"Evaluated true: #{left} #{op} #{right}"
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def assert_evaluates_argument_error(left, op, right)
|
|
|
|
|
assert_raises(Liquid::ArgumentError) do
|
|
|
|
|
Condition.new(left, op, right).evaluate(@context || Liquid::Context.new)
|
|
|
|
|
Condition.new(left, op, right).evaluate(@context)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end # ConditionTest
|
|
|
|
|
|