mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-18 10:20:43 -07:00
Add reject filter #1573
This commit is contained in:
committed by
Guilherme Carreiro
parent
42b6763546
commit
4b01977067
@@ -603,9 +603,38 @@ class StandardFiltersTest < Minitest::Test
|
||||
def test_replace
|
||||
assert_equal('b b b b', @filters.replace('a a a a', 'a', 'b'))
|
||||
assert_equal('2 2 2 2', @filters.replace('1 1 1 1', 1, 2))
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
assert_equal('1 1 1 1', @filters.replace('1 1 1 1', 2, 3))
|
||||
assert_template_result('2 2 2 2', "{{ '1 1 1 1' | replace: '1', 2 }}")
|
||||
|
||||
<<<<<<< HEAD
|
||||
assert_equal('b a a a', @filters.replace_first('a a a a', 'a', 'b'))
|
||||
=======
|
||||
>>>>>>> 38b7364f (Improve tests)
|
||||
assert_equal('2 1 1 1', @filters.replace_first('1 1 1 1', 1, 2))
|
||||
assert_equal('1 1 1 1', @filters.replace_first('1 1 1 1', 2, 3))
|
||||
assert_template_result('2 1 1 1', "{{ '1 1 1 1' | replace_first: '1', 2 }}")
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
|
||||
assert_equal('a a a b', @filters.replace_last('a a a a', 'a', 'b'))
|
||||
assert_equal('1 1 1 2', @filters.replace_last('1 1 1 1', 1, 2))
|
||||
assert_equal('1 1 1 1', @filters.replace_last('1 1 1 1', 2, 3))
|
||||
=======
|
||||
assert_equal('1 1 1 2', @filters.replace_last('1 1 1 1', '1', 2))
|
||||
=======
|
||||
>>>>>>> 38b7364f (Improve tests)
|
||||
assert_equal('1 1 1 2', @filters.replace_last('1 1 1 1', 1, 2))
|
||||
>>>>>>> 832516fb (Add replace_last and remove_last tests)
|
||||
assert_template_result('1 1 1 2', "{{ '1 1 1 1' | replace_last: '1', 2 }}")
|
||||
=======
|
||||
=======
|
||||
assert_equal('1 1 1 1', @filters.replace('1 1 1 1', 2, 3))
|
||||
>>>>>>> d81f7f04 (Add tests to make sure it returns original string on no replacement)
|
||||
=======
|
||||
>>>>>>> 63ae4cc2 (Remove redundant test assertions)
|
||||
assert_equal('b a a a', @filters.replace_first('a a a a', 'a', 'b'))
|
||||
assert_equal('2 1 1 1', @filters.replace_first('1 1 1 1', 1, 2))
|
||||
assert_equal('1 1 1 1', @filters.replace_first('1 1 1 1', 2, 3))
|
||||
@@ -614,11 +643,29 @@ class StandardFiltersTest < Minitest::Test
|
||||
assert_equal('a a a b', @filters.replace_last('a a a a', 'a', 'b'))
|
||||
assert_equal('1 1 1 2', @filters.replace_last('1 1 1 1', 1, 2))
|
||||
assert_equal('1 1 1 1', @filters.replace_last('1 1 1 1', 2, 3))
|
||||
<<<<<<< HEAD
|
||||
assert_template_result('b b b b', "{{ 'a a a a' | replace: 'a', 'b' }}")
|
||||
assert_template_result('2 2 2 2', "{{ '1 1 1 1' | replace: 1, 2 }}")
|
||||
assert_template_result('1 1 1 1', "{{ '1 1 1 1' | replace: 2, 3 }}")
|
||||
assert_template_result('b a a a', "{{ 'a a a a' | replace_first: 'a', 'b' }}")
|
||||
assert_template_result('2 1 1 1', "{{ '1 1 1 1' | replace_first: 1, 2 }}")
|
||||
assert_template_result('a a a a', "{{ 'a a a a' | replace_first: 'b', 'c' }}")
|
||||
assert_template_result('a a a b', "{{ 'a a a a' | replace_last: 'a', 'b' }}")
|
||||
assert_template_result('1 1 1 2', "{{ '1 1 1 1' | replace_last: 1, 2 }}")
|
||||
<<<<<<< HEAD
|
||||
>>>>>>> b3d14e5b (Update tests)
|
||||
=======
|
||||
assert_template_result('a a a a', "{{ 'a a a a' | replace_last: 'b', 'c' }}")
|
||||
>>>>>>> d81f7f04 (Add tests to make sure it returns original string on no replacement)
|
||||
=======
|
||||
assert_template_result('1 1 1 2', "{{ '1 1 1 1' | replace_last: '1', 2 }}")
|
||||
>>>>>>> 63ae4cc2 (Remove redundant test assertions)
|
||||
end
|
||||
|
||||
def test_remove
|
||||
assert_equal(' ', @filters.remove("a a a a", 'a'))
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
assert_template_result(' ', "{{ '1 1 1 1' | remove: 1 }}")
|
||||
|
||||
assert_equal('b a a', @filters.remove_first("a b a a", 'a '))
|
||||
@@ -626,6 +673,31 @@ class StandardFiltersTest < Minitest::Test
|
||||
|
||||
assert_equal('a a b', @filters.remove_last("a a b a", ' a'))
|
||||
assert_template_result('1 1 1 ', "{{ '1 1 1 1' | remove_last: 1 }}")
|
||||
=======
|
||||
assert_equal(' ', @filters.remove("1 1 1 1", 1))
|
||||
assert_equal('b a a', @filters.remove_first("a b a a", 'a '))
|
||||
assert_equal(' 1 1 1', @filters.remove_first("1 1 1 1", 1))
|
||||
assert_equal('a a b', @filters.remove_last("a a b a", ' a'))
|
||||
assert_equal('1 1 1 ', @filters.remove_last("1 1 1 1", 1))
|
||||
<<<<<<< HEAD
|
||||
<<<<<<< HEAD
|
||||
assert_template_result('a a a', "{{ 'a a a a' | remove_last: ' a' }}")
|
||||
>>>>>>> 832516fb (Add replace_last and remove_last tests)
|
||||
=======
|
||||
assert_template_result('a a b', "{{ 'a a b a' | remove_last: ' a' }}")
|
||||
>>>>>>> effee1ed (Update tests)
|
||||
=======
|
||||
assert_template_result(' ', "{{ 'a a a a' | remove: 'a' }}")
|
||||
=======
|
||||
>>>>>>> 63ae4cc2 (Remove redundant test assertions)
|
||||
assert_template_result(' ', "{{ '1 1 1 1' | remove: 1 }}")
|
||||
|
||||
assert_equal('b a a', @filters.remove_first("a b a a", 'a '))
|
||||
assert_template_result(' 1 1 1', "{{ '1 1 1 1' | remove_first: 1 }}")
|
||||
|
||||
assert_equal('a a b', @filters.remove_last("a a b a", ' a'))
|
||||
assert_template_result('1 1 1 ', "{{ '1 1 1 1' | remove_last: 1 }}")
|
||||
>>>>>>> b3d14e5b (Update tests)
|
||||
end
|
||||
|
||||
def test_pipes_in_string_arguments
|
||||
@@ -900,6 +972,81 @@ class StandardFiltersTest < Minitest::Test
|
||||
assert_nil(@filters.where([nil], "ok"))
|
||||
end
|
||||
|
||||
def test_reject
|
||||
input = [
|
||||
{ "handle" => "alpha", "ok" => true },
|
||||
{ "handle" => "beta", "ok" => false },
|
||||
{ "handle" => "gamma", "ok" => false },
|
||||
{ "handle" => "delta", "ok" => true },
|
||||
]
|
||||
|
||||
expectation = [
|
||||
{ "handle" => "alpha", "ok" => true },
|
||||
{ "handle" => "delta", "ok" => true },
|
||||
]
|
||||
|
||||
assert_equal(expectation, @filters.reject(input, "ok", false))
|
||||
assert_equal(expectation, @filters.reject(input, "ok"))
|
||||
end
|
||||
|
||||
def test_reject_no_key_set
|
||||
input = [
|
||||
{ "handle" => "alpha", "ok" => true },
|
||||
{ "handle" => "beta" },
|
||||
{ "handle" => "gamma" },
|
||||
{ "handle" => "delta", "ok" => true },
|
||||
]
|
||||
|
||||
expectation = [
|
||||
{ "handle" => "alpha", "ok" => true },
|
||||
{ "handle" => "delta", "ok" => true },
|
||||
]
|
||||
|
||||
assert_equal(expectation, @filters.reject(input, "ok"))
|
||||
end
|
||||
|
||||
def test_reject_non_array_map_input
|
||||
assert_equal([], @filters.reject({ "foo" => "bar" }, "foo", "bar"))
|
||||
assert_equal([{ "foo" => "baz" }], @filters.reject({ "foo" => "baz" }, "foo", "bar"))
|
||||
end
|
||||
|
||||
def test_reject_indexable_but_non_map_value
|
||||
assert_equal([], @filters.reject(1, "ok", true))
|
||||
assert_equal([], @filters.reject(1, "ok"))
|
||||
end
|
||||
|
||||
def test_reject_non_boolean_value
|
||||
input = [
|
||||
{ "message" => "Bonjour!", "language" => "French" },
|
||||
{ "message" => "Hello!", "language" => "English" },
|
||||
]
|
||||
|
||||
assert_equal([{ "message" => "Hello!", "language" => "English" }], @filters.reject(input, "language", "French"))
|
||||
assert_equal([{ "message" => "Bonjour!", "language" => "French" }], @filters.reject(input, "language", "English"))
|
||||
end
|
||||
|
||||
def test_reject_array_of_only_unindexable_values
|
||||
assert_equal([], @filters.reject([nil, nil], "ok", true))
|
||||
assert_equal([], @filters.reject([nil, nil], "ok"))
|
||||
end
|
||||
|
||||
def test_reject_deep
|
||||
input = [
|
||||
{ "item" => { "handle" => "alpha", "ok" => true } },
|
||||
{ "item" => { "handle" => "beta", "ok" => false } },
|
||||
{ "item" => { "handle" => "gamma", "ok" => false } },
|
||||
{ "item" => { "handle" => "delta", "ok" => true } },
|
||||
]
|
||||
|
||||
expectation = [
|
||||
{ "item" => { "handle" => "alpha", "ok" => true } },
|
||||
{ "item" => { "handle" => "delta", "ok" => true } },
|
||||
]
|
||||
|
||||
assert_equal(expectation, @filters.reject(input, "item.ok", false))
|
||||
assert_equal(expectation, @filters.reject(input, "item.ok"))
|
||||
end
|
||||
|
||||
def test_all_filters_never_raise_non_liquid_exception
|
||||
test_drop = TestDrop.new(value: "test")
|
||||
test_drop.context = Context.new
|
||||
@@ -926,6 +1073,7 @@ class StandardFiltersTest < Minitest::Test
|
||||
{ 1 => "bar" },
|
||||
["foo", 123, nil, true, false, Drop, ["foo"], { foo: "bar" }],
|
||||
]
|
||||
<<<<<<< HEAD
|
||||
StandardFilters.public_instance_methods(false).each do |method|
|
||||
arg_count = @filters.method(method).arity
|
||||
arg_count *= -1 if arg_count < 0
|
||||
@@ -934,6 +1082,25 @@ class StandardFiltersTest < Minitest::Test
|
||||
@filters.send(method, *args)
|
||||
rescue Liquid::Error
|
||||
nil
|
||||
=======
|
||||
test_types.each do |first|
|
||||
test_types.each do |second|
|
||||
test_types.each do |third|
|
||||
(@filters.methods - Object.methods).each do |method|
|
||||
arg_count = @filters.method(method).arity
|
||||
arg_count *= -1 if arg_count < 0
|
||||
inputs = [first]
|
||||
inputs << ([second] * (arg_count - 1)) if arg_count > 1
|
||||
inputs << ([third] * (arg_count - 1)) if arg_count > 2
|
||||
|
||||
begin
|
||||
@filters.send(method, *inputs)
|
||||
rescue Liquid::ArgumentError, Liquid::ZeroDivisionError
|
||||
nil
|
||||
end
|
||||
end
|
||||
end
|
||||
>>>>>>> f5e77b6d (Update test to support third argument)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user