mirror of
https://github.com/Shopify/liquid.git
synced 2026-10-03 00:55:11 -07:00
add variable parser timeout unit tests
This commit is contained in:
@@ -185,10 +185,17 @@ class VariableTest < Minitest::Test
|
|||||||
|
|
||||||
very_long_key = "1234567890" * 100
|
very_long_key = "1234567890" * 100
|
||||||
|
|
||||||
|
template_list = [
|
||||||
|
"{{['#{very_long_key}']}}", # valid
|
||||||
|
"{{['#{very_long_key}'}}", # missing closing bracket
|
||||||
|
"{{[['#{very_long_key}']}}", # extra open bracket
|
||||||
|
]
|
||||||
|
|
||||||
|
template_list.each do |template|
|
||||||
Timeout.timeout(1) do
|
Timeout.timeout(1) do
|
||||||
assert_template_result(
|
assert_template_result(
|
||||||
'bar',
|
'bar',
|
||||||
"{{['#{very_long_key}'}}",
|
template,
|
||||||
{
|
{
|
||||||
very_long_key => 'bar',
|
very_long_key => 'bar',
|
||||||
},
|
},
|
||||||
@@ -196,4 +203,5 @@ class VariableTest < Minitest::Test
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
require 'test_helper'
|
require 'test_helper'
|
||||||
|
require 'timeout'
|
||||||
|
|
||||||
class RegexpUnitTest < Minitest::Test
|
class RegexpUnitTest < Minitest::Test
|
||||||
include Liquid
|
include Liquid
|
||||||
@@ -37,10 +38,22 @@ class RegexpUnitTest < Minitest::Test
|
|||||||
|
|
||||||
def test_variable_parser
|
def test_variable_parser
|
||||||
assert_equal(['var'], 'var'.scan(VariableParser))
|
assert_equal(['var'], 'var'.scan(VariableParser))
|
||||||
|
assert_equal(['[var]'], '[var]'.scan(VariableParser))
|
||||||
assert_equal(['var', 'method'], 'var.method'.scan(VariableParser))
|
assert_equal(['var', 'method'], 'var.method'.scan(VariableParser))
|
||||||
assert_equal(['var', '[method]'], 'var[method]'.scan(VariableParser))
|
assert_equal(['var', '[method]'], 'var[method]'.scan(VariableParser))
|
||||||
assert_equal(['var', '[method]', '[0]'], 'var[method][0]'.scan(VariableParser))
|
assert_equal(['var', '[method]', '[0]'], 'var[method][0]'.scan(VariableParser))
|
||||||
assert_equal(['var', '["method"]', '[0]'], 'var["method"][0]'.scan(VariableParser))
|
assert_equal(['var', '["method"]', '[0]'], 'var["method"][0]'.scan(VariableParser))
|
||||||
assert_equal(['var', '[method]', '[0]', 'method'], 'var[method][0].method'.scan(VariableParser))
|
assert_equal(['var', '[method]', '[0]', 'method'], 'var[method][0].method'.scan(VariableParser))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_variable_parser_with_large_input
|
||||||
|
Timeout.timeout(1) { assert_equal(['[var]'], '[var]'.scan(VariableParser)) }
|
||||||
|
|
||||||
|
very_long_string = "foo" * 1000
|
||||||
|
|
||||||
|
# valid dynamic lookup
|
||||||
|
Timeout.timeout(1) { assert_equal(["[#{very_long_string}]"], "[#{very_long_string}]".scan(VariableParser)) }
|
||||||
|
# invalid dynamic lookup with missing closing bracket
|
||||||
|
Timeout.timeout(1) { assert_equal([very_long_string], "[#{very_long_string}".scan(VariableParser)) }
|
||||||
|
end
|
||||||
end # RegexpTest
|
end # RegexpTest
|
||||||
|
|||||||
Reference in New Issue
Block a user