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
+9 -1
View File
@@ -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
+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