add variable parser timeout unit tests

This commit is contained in:
Michael Go
2023-02-01 21:15:35 -04:00
parent 2b40850e4a
commit bd9c3802c8
2 changed files with 30 additions and 9 deletions
+17 -9
View File
@@ -185,15 +185,23 @@ class VariableTest < Minitest::Test
very_long_key = "1234567890" * 100 very_long_key = "1234567890" * 100
Timeout.timeout(1) do template_list = [
assert_template_result( "{{['#{very_long_key}']}}", # valid
'bar', "{{['#{very_long_key}'}}", # missing closing bracket
"{{['#{very_long_key}'}}", "{{[['#{very_long_key}']}}", # extra open bracket
{ ]
very_long_key => 'bar',
}, template_list.each do |template|
error_mode: :lax, Timeout.timeout(1) do
) assert_template_result(
'bar',
template,
{
very_long_key => 'bar',
},
error_mode: :lax,
)
end
end end
end end
end end
+13
View File
@@ -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