|
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" |
@@ -322,10 +323,35 @@ func FuzzParser(f *testing.F) { |
322 | 323 | f.Add("col%29umn>val%29ue") |
323 | 324 |
|
324 | 325 | f.Fuzz(func(t *testing.T, expr string) { |
325 | | - _, err := ParseFilter(expr) |
| 326 | + f, err := ParseFilter(expr) |
326 | 327 |
|
327 | 328 | if strings.Count(expr, "(") != strings.Count(expr, ")") { |
328 | 329 | assert.Error(t, err) |
329 | 330 | } |
| 331 | + |
| 332 | + if err == nil { |
| 333 | + dump := spew.Sdump(f) |
| 334 | + |
| 335 | + assertDumpContainsAny := func(substrs ...string) { |
| 336 | + for _, substr := range substrs { |
| 337 | + if strings.Contains(dump, substr) { |
| 338 | + return |
| 339 | + } |
| 340 | + } |
| 341 | + |
| 342 | + assert.Failf(t, "Parsed expression dump did not contain any expected string", |
| 343 | + "Expression: %q\nExpected: %#v\n\n%s", expr, substrs, dump) |
| 344 | + } |
| 345 | + |
| 346 | + if strings.Contains(expr, "&") { |
| 347 | + assertDumpContainsAny("All") |
| 348 | + } |
| 349 | + if strings.Contains(expr, "|") { |
| 350 | + assertDumpContainsAny("Any", "None") |
| 351 | + } |
| 352 | + if strings.Contains(expr, "!") { |
| 353 | + assertDumpContainsAny("None", "UnEqual", "Unlike") |
| 354 | + } |
| 355 | + } |
330 | 356 | }) |
331 | 357 | } |
0 commit comments