mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-15 08:50:45 -07:00
Add for_loop? to Include tag for AST-based keyword detection
Store @is_for_loop during parsing so consumers can determine the with/for keyword from the AST instead of re-parsing raw markup. Matches the existing pattern in the Render tag. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
532b439063
commit
346166b600
@@ -439,4 +439,49 @@ class IncludeTagTest < Minitest::Test
|
||||
assert_match(/Unexpected character =/, error.message)
|
||||
end
|
||||
end
|
||||
|
||||
def test_include_for_loop_true_with_for_keyword
|
||||
with_error_modes(:lax, :strict, :strict2) do
|
||||
template = Template.parse("{% include 'product' for products %}")
|
||||
include_node = template.root.nodelist.first
|
||||
|
||||
assert(include_node.for_loop?, "Expected for_loop? to be true for 'for' keyword")
|
||||
end
|
||||
end
|
||||
|
||||
def test_include_for_loop_false_with_with_keyword
|
||||
with_error_modes(:lax, :strict, :strict2) do
|
||||
template = Template.parse("{% include 'product' with product %}")
|
||||
include_node = template.root.nodelist.first
|
||||
|
||||
refute(include_node.for_loop?, "Expected for_loop? to be false for 'with' keyword")
|
||||
end
|
||||
end
|
||||
|
||||
def test_include_for_loop_false_without_keyword
|
||||
with_error_modes(:lax, :strict, :strict2) do
|
||||
template = Template.parse("{% include 'header' %}")
|
||||
include_node = template.root.nodelist.first
|
||||
|
||||
refute(include_node.for_loop?, "Expected for_loop? to be false when no keyword")
|
||||
end
|
||||
end
|
||||
|
||||
def test_include_for_loop_with_alias
|
||||
with_error_modes(:lax, :strict, :strict2) do
|
||||
template = Template.parse("{% include 'product' for products as item %}")
|
||||
include_node = template.root.nodelist.first
|
||||
|
||||
assert(include_node.for_loop?, "Expected for_loop? to be true for 'for' with alias")
|
||||
end
|
||||
end
|
||||
|
||||
def test_include_with_keyword_and_alias
|
||||
with_error_modes(:lax, :strict, :strict2) do
|
||||
template = Template.parse("{% include 'product' with products[0] as item %}")
|
||||
include_node = template.root.nodelist.first
|
||||
|
||||
refute(include_node.for_loop?, "Expected for_loop? to be false for 'with' with alias")
|
||||
end
|
||||
end
|
||||
end # IncludeTagTest
|
||||
|
||||
Reference in New Issue
Block a user