From aa79c33dda95b3b7ab2812e30db191a113763516 Mon Sep 17 00:00:00 2001 From: chenxianyu Date: Mon, 13 Feb 2017 15:50:19 +0800 Subject: [PATCH 1/2] fix: Strainer.add_filter method --- lib/liquid/strainer.rb | 2 +- test/unit/strainer_unit_test.rb | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/liquid/strainer.rb b/lib/liquid/strainer.rb index 99a9c29..76d56d2 100644 --- a/lib/liquid/strainer.rb +++ b/lib/liquid/strainer.rb @@ -27,7 +27,7 @@ module Liquid def self.add_filter(filter) raise ArgumentError, "Expected module but got: #{filter.class}" unless filter.is_a?(Module) - unless self.class.include?(filter) + unless self.include?(filter) invokable_non_public_methods = (filter.private_instance_methods + filter.protected_instance_methods).select { |m| invokable?(m) } if invokable_non_public_methods.any? raise MethodOverrideError, "Filter overrides registered public methods as non public: #{invokable_non_public_methods.join(', ')}" diff --git a/test/unit/strainer_unit_test.rb b/test/unit/strainer_unit_test.rb index 6ccdc27..64ec150 100644 --- a/test/unit/strainer_unit_test.rb +++ b/test/unit/strainer_unit_test.rb @@ -145,4 +145,13 @@ class StrainerUnitTest < Minitest::Test Strainer.global_filter(LateAddedFilter) assert_equal 'filtered', Strainer.create(nil).invoke('late_added_filter', 'input') end + + def test_add_filter_returns_nil_when_a_filter_module_was_added + a = Module.new + strainer = Context.new.strainer + result1 = strainer.class.add_filter(a) + result2 = strainer.class.add_filter(a) + assert_kind_of Set, result1 + assert_kind_of NilClass, result2 + end end # StrainerTest From 4318240ae07979cc9d8c3930ff01d13a8cf969e7 Mon Sep 17 00:00:00 2001 From: chenxianyu Date: Wed, 22 Feb 2017 10:33:22 +0800 Subject: [PATCH 2/2] test: modify Strainer.add_filter duplicate inclusion test case --- test/unit/strainer_unit_test.rb | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/test/unit/strainer_unit_test.rb b/test/unit/strainer_unit_test.rb index 64ec150..5ce2100 100644 --- a/test/unit/strainer_unit_test.rb +++ b/test/unit/strainer_unit_test.rb @@ -146,12 +146,19 @@ class StrainerUnitTest < Minitest::Test assert_equal 'filtered', Strainer.create(nil).invoke('late_added_filter', 'input') end - def test_add_filter_returns_nil_when_a_filter_module_was_added - a = Module.new + def test_add_filter_does_not_include_already_included_module + mod = Module.new do + class << self + attr_accessor :include_count + def included(mod) + self.include_count += 1 + end + end + self.include_count = 0 + end strainer = Context.new.strainer - result1 = strainer.class.add_filter(a) - result2 = strainer.class.add_filter(a) - assert_kind_of Set, result1 - assert_kind_of NilClass, result2 + strainer.class.add_filter(mod) + strainer.class.add_filter(mod) + assert_equal 1, mod.include_count end end # StrainerTest