Skip to content

Commit

Permalink
Merge pull request #1258 from Shopify/fix-context-overriding-in-templ…
Browse files Browse the repository at this point in the history
…ates

Fix how Template overrides static registers when #render is invoked
  • Loading branch information
veken1199 committed May 28, 2020
2 parents 1865452 + 8541c6b commit 1feaa63
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/liquid/template.rb
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ def render(*args)
end

Template.registers.each do |key, register|
context_register[key] = register
context_register[key] = register unless context_register.key?(key)
end

# Retrying a render resets resource usage
Expand Down
44 changes: 44 additions & 0 deletions test/integration/template_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,50 @@ def test_using_range_literal_works_as_expected
assert_equal('12345', result)
end

def test_render_uses_correct_disabled_tags_instance
Liquid::Template.file_system = StubFileSystem.new(
'foo' => 'bar',
'test_include' => '{% include "foo" %}'
)

disabled_tags = DisabledTags.new
context = Context.build(registers: { disabled_tags: disabled_tags })

source = "{% render 'test_include' %}"
parse_context = Liquid::ParseContext.new(line_numbers: true, error_mode: :strict)
document = Document.parse(Liquid::Tokenizer.new(source, true), parse_context)

assert_equal("include usage is not allowed in this context", document.render(context))
end

def test_render_sets_context_static_register_when_register_key_does_exist
disabled_tags_for_test = DisabledTags.new
Template.add_register(:disabled_tags, disabled_tags_for_test)

t = Template.parse("{% if true %} Test Template {% endif %}")

context = Context.new
refute(context.registers.key?(:disabled_tags))

t.render(context)

assert(context.registers.key?(:disabled_tags))
assert_equal(disabled_tags_for_test, context.registers[:disabled_tags])
end

def test_render_does_not_override_context_static_register_when_register_key_exists
context = Context.new
context.registers[:random_register] = nil
Template.add_register(:random_register, {})

t = Template.parse("{% if true %} Test Template {% endif %}")

t.render(context)

assert_nil(context.registers[:random_register])
assert(context.registers.key?(:random_register))
end

unless taint_supported?
def test_taint_mode
assert_raises(NotImplementedError) do
Expand Down

0 comments on commit 1feaa63

Please sign in to comment.