From 7a89a726b9a08fd77fca41d41368435ec2e53c1e Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 17 Apr 2019 16:22:32 +0800 Subject: [PATCH] use $$ to escape $ notation --- httprunner/parser.py | 13 ++++++++++++- tests/test_parser.py | 10 ++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/httprunner/parser.py b/httprunner/parser.py index 924816a3..e74919ac 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -7,6 +7,8 @@ import re from httprunner import exceptions, utils, validator from httprunner.compat import basestring, builtin_str, numeric_types, str +# use $$ to escape $ notation +dolloar_regex_compile = re.compile(r"\$\$") # TODO: change variable notation from $var to {{var}} # $var_1 variable_regex_compile = re.compile(r"\$(\w+)") @@ -447,7 +449,16 @@ class LazyString(object): while match_start_position < len(raw_string): - # Notice: functions must be handled before variables + # Notice: notation priority + # $$ > ${func($a, $b)} > $var + + # search $$ + dollar_match = dolloar_regex_compile.match(raw_string, match_start_position) + if dollar_match: + match_start_position = dollar_match.end() + self._string += "$" + continue + # search function like ${func($a, $b)} func_match = function_regex_compile.match(raw_string, match_start_position) if func_match: diff --git a/tests/test_parser.py b/tests/test_parser.py index e87dc1eb..3c2a0455 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -336,10 +336,20 @@ class TestParserBasic(unittest.TestCase): self.assertEqual(var.to_value(variables_mapping), "ABCabc}") var = parser.LazyString("ABC$$var_1{", functions_mapping, check_variables_set) + self.assertEqual(var._string, "ABC$var_1{{") + self.assertEqual(var._args, []) + self.assertEqual(var.to_value(variables_mapping), "ABC$var_1{") + + var = parser.LazyString("ABC$$$var_1{", functions_mapping, check_variables_set) self.assertEqual(var._string, "ABC${}{{") self.assertEqual(var._args, ["var_1"]) self.assertEqual(var.to_value(variables_mapping), "ABC$abc{") + var = parser.LazyString("ABC$$$$var_1{", functions_mapping, check_variables_set) + self.assertEqual(var._string, "ABC$$var_1{{") + self.assertEqual(var._args, []) + self.assertEqual(var.to_value(variables_mapping), "ABC$$var_1{") + var = parser.LazyString("ABC$var_1${", functions_mapping, check_variables_set) self.assertEqual(var._string, "ABC{}${{") self.assertEqual(var._args, ["var_1"])