diff --git a/lib/liquid/template.rb b/lib/liquid/template.rb index a15d3e6..58ca6e9 100644 --- a/lib/liquid/template.rb +++ b/lib/liquid/template.rb @@ -212,7 +212,7 @@ module Liquid 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 diff --git a/test/integration/template_test.rb b/test/integration/template_test.rb index f5588ed..b637f31 100644 --- a/test/integration/template_test.rb +++ b/test/integration/template_test.rb @@ -362,6 +362,50 @@ class TemplateTest < Minitest::Test 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