tests: reset Strainer's filters after modification

Three tests in the test suite use the Liquid::Template.register_filter
function to register custom filters with Liquid::Strainer. The problem
is that these register_filter calls leave the Liquid::Strainer object in
an altered state.

As an example, the FiltersTest's test_local_filter relies on the default
behavior of Liquid::Strainer operator, and the test was failing if
register_function had been called earlier. The same thing was happening
with FiltersInTemplate's test_local_global.

The problem was present when the Filters test classes were loaded inside
a single ruby process that also loaded HashOrderingTest. One example is
"rake test", which runs "require" on every test file. Another basic
example is the following command:

  ruby -Itest -e "require 'integration/hash_ordering_test';
  require 'integration/filter_test'"

Update the tests to always reset Liquid::Strainer's filters back to the
default list of filters.

With this change, FiltersTest and FiltersInTemplate now pass.
This commit is contained in:
Ken Dreyer
2014-07-28 16:36:43 +00:00
committed by Florian Weingarten
parent 3e3a415457
commit 57d5426eed
3 changed files with 10 additions and 1 deletions
+4 -1
View File
@@ -16,10 +16,13 @@ class HashOrderingTest < Minitest::Test
include Liquid
def test_global_register_order
original_filters = Array.new(Strainer.class_eval('@@filters'))
Template.register_filter(MoneyFilter)
Template.register_filter(CanadianMoneyFilter)
assert_equal " 1000$ CAD ", Template.parse("{{1000 | money}}").render(nil, nil)
ensure
Strainer.class_eval('@@filters = ' + original_filters.to_s)
end
end