fix: escape '{' and '}'

This commit is contained in:
debugtalk
2019-04-17 15:29:13 +08:00
parent 336bdeeee2
commit c7def0d902
2 changed files with 36 additions and 8 deletions

View File

@@ -483,10 +483,15 @@ class LazyString(object):
try:
# find next $ location
match_start_position = raw_string.index("$", curr_position+1)
self._string += raw_string[curr_position:match_start_position]
remain_string = raw_string[curr_position:match_start_position]
except ValueError:
self._string += raw_string[curr_position:]
break
remain_string = raw_string[curr_position:]
# break while loop
match_start_position = len(raw_string)
remain_string = remain_string.replace("{", "{{")
remain_string = remain_string.replace("}", "}}")
self._string += remain_string
def __repr__(self):
return "LazyString({})".format(self.raw_string)

View File

@@ -326,21 +326,44 @@ class TestParserBasic(unittest.TestCase):
self.assertEqual(var.to_value(variables_mapping), "ABCabc/123abc/456")
var = parser.LazyString("ABC$var_1{", functions_mapping, check_variables_set)
self.assertEqual(var._string, "ABC{}{")
self.assertEqual(var._string, "ABC{}{{")
self.assertEqual(var._args, ["var_1"])
# self.assertEqual(var.to_value(variables_mapping), "ABCabc{")
self.assertEqual(var.to_value(variables_mapping), "ABCabc{")
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), "ABCabc}")
var = parser.LazyString("ABC$$var_1{", functions_mapping, check_variables_set)
self.assertEqual(var._string, "ABC${}{")
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{}${")
self.assertEqual(var._string, "ABC{}${{")
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._string, "ABC{}${{a")
self.assertEqual(var._args, ["var_1"])
self.assertEqual(var.to_value(variables_mapping), "ABCabc${a")
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("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("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("ABC$var_1/$var_2/$var_1", functions_mapping, check_variables_set)
self.assertEqual(var._string, "ABC{}/{}/{}")