Files
liquid/test/integration/traversal_test.rb
T
Stephen Paul Weber c11fc656cf Colocate Traversal classes with classes they traverse
This puts all knowledge of the traversal in the same file, and removes
the need for a CASES registry.
2018-10-18 09:37:48 -04:00

234 lines
4.2 KiB
Ruby

# frozen_string_literal: true
require 'test_helper'
class TraversalTest < Minitest::Test
include Liquid
def test_variable
assert_equal(
["test"],
traversal(%({{ test }}))
)
end
def test_varible_with_filter
assert_equal(
["test", "infilter"],
traversal(%({{ test | split: infilter }}))
)
end
def test_dynamic_variable
assert_equal(
["test", "inlookup"],
traversal(%({{ test[inlookup] }}))
)
end
def test_if_condition
assert_equal(
["test"],
traversal(%({% if test %}{% endif %}))
)
end
def test_complex_if_condition
assert_equal(
["test"],
traversal(%({% if 1 == 1 and 2 == test %}{% endif %}))
)
end
def test_if_body
assert_equal(
["test"],
traversal(%({% if 1 == 1 %}{{ test }}{% endif %}))
)
end
def test_unless_condition
assert_equal(
["test"],
traversal(%({% unless test %}{% endunless %}))
)
end
def test_complex_unless_condition
assert_equal(
["test"],
traversal(%({% unless 1 == 1 and 2 == test %}{% endunless %}))
)
end
def test_unless_body
assert_equal(
["test"],
traversal(%({% unless 1 == 1 %}{{ test }}{% endunless %}))
)
end
def test_elsif_condition
assert_equal(
["test"],
traversal(%({% if 1 == 1 %}{% elsif test %}{% endif %}))
)
end
def test_complex_elsif_condition
assert_equal(
["test"],
traversal(%({% if 1 == 1 %}{% elsif 1 == 1 and 2 == test %}{% endif %}))
)
end
def test_elsif_body
assert_equal(
["test"],
traversal(%({% if 1 == 1 %}{% elsif 2 == 2 %}{{ test }}{% endif %}))
)
end
def test_else_body
assert_equal(
["test"],
traversal(%({% if 1 == 1 %}{% else %}{{ test }}{% endif %}))
)
end
def test_case_left
assert_equal(
["test"],
traversal(%({% case test %}{% endcase %}))
)
end
def test_case_condition
assert_equal(
["test"],
traversal(%({% case 1 %}{% when test %}{% endcase %}))
)
end
def test_case_when_body
assert_equal(
["test"],
traversal(%({% case 1 %}{% when 2 %}{{ test }}{% endcase %}))
)
end
def test_case_else_body
assert_equal(
["test"],
traversal(%({% case 1 %}{% else %}{{ test }}{% endcase %}))
)
end
def test_for_in
assert_equal(
["test"],
traversal(%({% for x in test %}{% endfor %}))
)
end
def test_for_limit
assert_equal(
["test"],
traversal(%({% for x in (1..5) limit: test %}{% endfor %}))
)
end
def test_for_offset
assert_equal(
["test"],
traversal(%({% for x in (1..5) offset: test %}{% endfor %}))
)
end
def test_for_body
assert_equal(
["test"],
traversal(%({% for x in (1..5) %}{{ test }}{% endfor %}))
)
end
def test_tablerow_in
assert_equal(
["test"],
traversal(%({% tablerow x in test %}{% endtablerow %}))
)
end
def test_tablerow_limit
assert_equal(
["test"],
traversal(%({% tablerow x in (1..5) limit: test %}{% endtablerow %}))
)
end
def test_tablerow_offset
assert_equal(
["test"],
traversal(%({% tablerow x in (1..5) offset: test %}{% endtablerow %}))
)
end
def test_tablerow_body
assert_equal(
["test"],
traversal(%({% tablerow x in (1..5) %}{{ test }}{% endtablerow %}))
)
end
def test_cycle
assert_equal(
["test"],
traversal(%({% cycle test %}))
)
end
def test_assign
assert_equal(
["test"],
traversal(%({% assign x = test %}))
)
end
def test_capture
assert_equal(
["test"],
traversal(%({% capture x %}{{ test }}{% endcapture %}))
)
end
def test_include
assert_equal(
["test"],
traversal(%({% include test %}))
)
end
def test_include_with
assert_equal(
["test"],
traversal(%({% include "hai" with test %}))
)
end
def test_include_for
assert_equal(
["test"],
traversal(%({% include "hai" for test %}))
)
end
private
def traversal(template)
ParseTreeVisitor
.for(Template.parse(template).root)
.add_callback_for(VariableLookup, &:name)
.visit.flatten.compact
end
end