| 246 | } |
| 247 | |
| 248 | func TestParseDataStringWithVariablesAbnormal(t *testing.T) { |
| 249 | variablesMapping := map[string]interface{}{ |
| 250 | "var_1": "abc", |
| 251 | "var_2": "def", |
| 252 | "var_3": 123, |
| 253 | "var_4": map[string]interface{}{"a": 1}, |
| 254 | "var_5": true, |
| 255 | "var_6": nil, |
| 256 | "v": 4.5, // variable name with one character |
| 257 | "_v": 6.9, // variable name starts with underscore |
| 258 | } |
| 259 | |
| 260 | testData := []struct { |
| 261 | expr string |
| 262 | expect interface{} |
| 263 | }{ |
| 264 | {"$", "$"}, |
| 265 | {"var_1$", "var_1$"}, |
| 266 | {"var_1$123", "var_1$123"}, // variable should starts with a letter |
| 267 | {"ABC$var_1{", "ABCabc{"}, // { |
| 268 | {"ABC$var_1}", "ABCabc}"}, // } |
| 269 | {"{ABC$var_1{}a}", "{ABCabc{}a}"}, // {xx} |
| 270 | {"AB{C$var_1{}a}", "AB{Cabc{}a}"}, // {xx{}x} |
| 271 | {"ABC$$var_1{", "ABC$var_1{"}, // $$ |
| 272 | {"ABC$$$var_1{", "ABC$abc{"}, // $$$ |
| 273 | {"ABC$$$$var_1{", "ABC$$var_1{"}, // $$$$ |
| 274 | {"ABC$var_1${", "ABCabc${"}, // ${ |
| 275 | {"ABC$var_1${a", "ABCabc${a"}, // ${ |
| 276 | {"ABC$var_1$}a", "ABCabc$}a"}, // $} |
| 277 | {"ABC$var_1}{a", "ABCabc}{a"}, // }{ |
| 278 | {"ABC$var_1{}a", "ABCabc{}a"}, // {} |
| 279 | } |
| 280 | |
| 281 | parser := newParser() |
| 282 | for _, data := range testData { |
| 283 | parsedData, err := parser.Parse(data.expr, variablesMapping) |
| 284 | if !assert.NoError(t, err) { |
| 285 | t.Fatal() |
| 286 | } |
| 287 | if !assert.Equal(t, data.expect, parsedData) { |
| 288 | t.Fatal() |
| 289 | } |
| 290 | } |
| 291 | } |
| 292 | |
| 293 | func TestParseDataMapWithVariables(t *testing.T) { |
| 294 | variablesMapping := map[string]interface{}{ |