From 4202976d799791cd418a71e0e1be5ac212e24d0c Mon Sep 17 00:00:00 2001 From: Mike Angell Date: Mon, 23 Sep 2019 22:02:13 +1000 Subject: [PATCH] Test disable_tags register --- lib/liquid/tag.rb | 6 ++-- lib/liquid/tags/include.rb | 2 +- test/integration/tags/render_tag_test.rb | 19 ++++++++++++ test/unit/registers/disabled_tags_test.rb | 35 +++++++++++++++++++++++ 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 test/unit/registers/disabled_tags_test.rb diff --git a/lib/liquid/tag.rb b/lib/liquid/tag.rb index 989e7ed..d3364ac 100644 --- a/lib/liquid/tag.rb +++ b/lib/liquid/tag.rb @@ -38,8 +38,10 @@ module Liquid '' end - def disabled?(context) - context.registers['disabled_tags']&.disabled?(tag_name) + def disabled?(context, output) + if context.registers['disabled_tags']&.disabled?(tag_name) + output << disabled_response + end end def disabled_response diff --git a/lib/liquid/tags/include.rb b/lib/liquid/tags/include.rb index de1cb90..ba0e255 100644 --- a/lib/liquid/tags/include.rb +++ b/lib/liquid/tags/include.rb @@ -45,7 +45,7 @@ module Liquid end def render_to_output_buffer(context, output) - return output << disabled_response if disabled?(context) + disabled?(context, output) && return template_name = context.evaluate(@template_name_expr) raise ArgumentError, options[:locale].t("errors.argument.include") unless template_name diff --git a/test/integration/tags/render_tag_test.rb b/test/integration/tags/render_tag_test.rb index 899ca02..f7a3b8e 100644 --- a/test/integration/tags/render_tag_test.rb +++ b/test/integration/tags/render_tag_test.rb @@ -146,4 +146,23 @@ class RenderTagTest < Minitest::Test Liquid::Template.file_system = StubFileSystem.new('decr' => '{% decrement %}') assert_template_result '-1-2-1', '{% decrement %}{% decrement %}{% render "decr" %}' end + + def test_includes_will_not_render_inside_render_tag + Liquid::Template.file_system = StubFileSystem.new( + 'foo' => 'bar', + 'test_include' => '{% include "foo" %}' + ) + + assert_template_result 'include usage has been disabled in this context.', '{% render "test_include" %}' + end + + def test_includes_will_not_render_inside_nested_sibling_tags + Liquid::Template.file_system = StubFileSystem.new( + 'foo' => 'bar', + 'nested_render_with_sibling_include' => '{% render "test_include" %}{% include "foo" %}', + 'test_include' => '{% include "foo" %}' + ) + + assert_template_result 'include usage has been disabled in this context.include usage has been disabled in this context.', '{% render "nested_render_with_sibling_include" %}' + end end diff --git a/test/unit/registers/disabled_tags_test.rb b/test/unit/registers/disabled_tags_test.rb new file mode 100644 index 0000000..6f30a21 --- /dev/null +++ b/test/unit/registers/disabled_tags_test.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +require 'test_helper' + +class DisabledTagsTest < Minitest::Test + include Liquid + + def test_disables_tag_specified + register = DisabledTags.new + register.disable("foo") do + assert_equal true, register.disabled?("foo") + assert_equal false, register.disabled?("bar") + end + end + + def test_disables_nested_tags + register = DisabledTags.new + register.disable("foo") do + register.disable("foo") do + assert_equal true, register.disabled?("foo") + assert_equal false, register.disabled?("bar") + end + register.disable("bar") do + assert_equal true, register.disabled?("foo") + assert_equal true, register.disabled?("bar") + register.disable("foo") do + assert_equal true, register.disabled?("foo") + assert_equal true, register.disabled?("bar") + end + end + assert_equal true, register.disabled?("foo") + assert_equal false, register.disabled?("bar") + end + end +end