|
1 | 1 | package filter |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "github.com/davecgh/go-spew/spew" |
4 | 5 | "github.com/stretchr/testify/assert" |
5 | 6 | "strings" |
6 | 7 | "testing" |
@@ -353,10 +354,35 @@ func FuzzParser(f *testing.F) { |
353 | 354 | f.Add("col%29umn>val%29ue") |
354 | 355 |
|
355 | 356 | f.Fuzz(func(t *testing.T, expr string) { |
356 | | - _, err := ParseFilter(expr) |
| 357 | + f, err := ParseFilter(expr) |
357 | 358 |
|
358 | 359 | if strings.Count(expr, "(") != strings.Count(expr, ")") { |
359 | 360 | assert.Error(t, err) |
360 | 361 | } |
| 362 | + |
| 363 | + if err == nil { |
| 364 | + dump := spew.Sdump(f) |
| 365 | + |
| 366 | + assertDumpContainsAny := func(substrs ...string) { |
| 367 | + for _, substr := range substrs { |
| 368 | + if strings.Contains(dump, substr) { |
| 369 | + return |
| 370 | + } |
| 371 | + } |
| 372 | + |
| 373 | + assert.Failf(t, "Parsed expression dump did not contain any expected string", |
| 374 | + "Expression: %q\nExpected: %#v\n\n%s", expr, substrs, dump) |
| 375 | + } |
| 376 | + |
| 377 | + if strings.Contains(expr, "&") { |
| 378 | + assertDumpContainsAny("All") |
| 379 | + } |
| 380 | + if strings.Contains(expr, "|") { |
| 381 | + assertDumpContainsAny("Any", "None") |
| 382 | + } |
| 383 | + if strings.Contains(expr, "!") { |
| 384 | + assertDumpContainsAny("None", "UnEqual", "Unlike") |
| 385 | + } |
| 386 | + } |
361 | 387 | }) |
362 | 388 | } |
0 commit comments