mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-12 23:40:45 -07:00
add variable parser timeout unit tests
This commit is contained in:
@@ -185,15 +185,23 @@ class VariableTest < Minitest::Test
|
||||
|
||||
very_long_key = "1234567890" * 100
|
||||
|
||||
Timeout.timeout(1) do
|
||||
assert_template_result(
|
||||
'bar',
|
||||
"{{['#{very_long_key}'}}",
|
||||
{
|
||||
very_long_key => 'bar',
|
||||
},
|
||||
error_mode: :lax,
|
||||
)
|
||||
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
|
||||
assert_template_result(
|
||||
'bar',
|
||||
template,
|
||||
{
|
||||
very_long_key => 'bar',
|
||||
},
|
||||
error_mode: :lax,
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'test_helper'
|
||||
require 'timeout'
|
||||
|
||||
class RegexpUnitTest < Minitest::Test
|
||||
include Liquid
|
||||
@@ -37,10 +38,22 @@ class RegexpUnitTest < Minitest::Test
|
||||
|
||||
def test_variable_parser
|
||||
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]', '[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))
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user