| 322 | } |
| 323 | |
| 324 | func TestStrings(t *testing.T) { |
| 325 | env, err := cel.NewEnv(Strings()) |
| 326 | if err != nil { |
| 327 | t.Fatalf("cel.NewEnv(Strings()) failed: %v", err) |
| 328 | } |
| 329 | for i, tst := range stringTests { |
| 330 | tc := tst |
| 331 | t.Run(fmt.Sprintf("[%d]", i), func(t *testing.T) { |
| 332 | var asts []*cel.Ast |
| 333 | pAst, iss := env.Parse(tc.expr) |
| 334 | if iss.Err() != nil { |
| 335 | t.Fatalf("env.Parse(%v) failed: %v", tc.expr, iss.Err()) |
| 336 | } |
| 337 | asts = append(asts, pAst) |
| 338 | if !tc.parseOnly { |
| 339 | cAst, iss := env.Check(pAst) |
| 340 | if iss.Err() != nil { |
| 341 | t.Fatalf("env.Check(%v) failed: %v", tc.expr, iss.Err()) |
| 342 | } |
| 343 | asts = append(asts, cAst) |
| 344 | } |
| 345 | for _, ast := range asts { |
| 346 | prg, err := env.Program(ast) |
| 347 | if err != nil { |
| 348 | t.Fatal(err) |
| 349 | } |
| 350 | out, _, err := prg.Eval(cel.NoVars()) |
| 351 | if tc.err != "" { |
| 352 | if err == nil { |
| 353 | t.Fatalf("got value %v, wanted error %s for expr: %s", |
| 354 | out.Value(), tc.err, tc.expr) |
| 355 | } |
| 356 | if !strings.Contains(err.Error(), tc.err) { |
| 357 | t.Errorf("got %q, expected error to contain %q for expr: %s", err, tc.err, tc.expr) |
| 358 | } |
| 359 | } else if err != nil { |
| 360 | t.Fatal(err) |
| 361 | } else if out.Value() != true { |
| 362 | t.Errorf("got %v, wanted true for expr: %s", out.Value(), tc.expr) |
| 363 | } |
| 364 | } |
| 365 | }) |
| 366 | } |
| 367 | } |
| 368 | |
| 369 | func TestStringsVersions(t *testing.T) { |
| 370 | versionCases := []struct { |