From 5f33cbfd2886ac7148986da3c61ffc255123dc34 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Thu, 18 Apr 2019 15:37:55 +0800 Subject: [PATCH] fix: escape braces --- httprunner/parser.py | 12 +++++++----- tests/test_parser.py | 10 ++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/httprunner/parser.py b/httprunner/parser.py index 8faf1b5e..9dabd4e2 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -458,11 +458,15 @@ class LazyString(object): """ self._args = [] + def escape_braces(origin_string): + return origin_string.replace("{", "{{").replace("}", "}}") + try: match_start_position = raw_string.index("$", 0) - self._string = raw_string[0:match_start_position] + begin_string = raw_string[0:match_start_position] + self._string = escape_braces(begin_string) except ValueError: - self._string = raw_string + self._string = escape_braces(raw_string) return while match_start_position < len(raw_string): @@ -518,9 +522,7 @@ class LazyString(object): # break while loop match_start_position = len(raw_string) - remain_string = remain_string.replace("{", "{{") - remain_string = remain_string.replace("}", "}}") - self._string += remain_string + self._string += escape_braces(remain_string) def __repr__(self): return "LazyString({})".format(self.raw_string) diff --git a/tests/test_parser.py b/tests/test_parser.py index 6ad569ce..0675f198 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -305,6 +305,16 @@ class TestParserBasic(unittest.TestCase): self.assertEqual(var._args, ["var_1"]) self.assertEqual(var.to_value(variables_mapping), "ABCabc{") + var = parser.LazyString("{ABC$var_1{}a}", functions_mapping, check_variables_set) + self.assertEqual(var._string, "{{ABC{}{{}}a}}") + self.assertEqual(var._args, ["var_1"]) + self.assertEqual(var.to_value(variables_mapping), "{ABCabc{}a}") + + var = parser.LazyString("AB{C$var_1{}a}", functions_mapping, check_variables_set) + self.assertEqual(var._string, "AB{{C{}{{}}a}}") + self.assertEqual(var._args, ["var_1"]) + self.assertEqual(var.to_value(variables_mapping), "AB{Cabc{}a}") + # } var = parser.LazyString("ABC$var_1}", functions_mapping, check_variables_set) self.assertEqual(var._string, "ABC{}}}")