|
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"
|
@@ -398,10 +399,35 @@ func FuzzParser(f *testing.F) {
|
398 | 399 | f.Add("col%29umn>val%29ue")
|
399 | 400 |
|
400 | 401 | f.Fuzz(func(t *testing.T, expr string) {
|
401 |
| - _, err := ParseFilter(expr) |
| 402 | + f, err := ParseFilter(expr) |
402 | 403 |
|
403 | 404 | if strings.Count(expr, "(") != strings.Count(expr, ")") {
|
404 | 405 | assert.Error(t, err)
|
405 | 406 | }
|
| 407 | + |
| 408 | + if err == nil { |
| 409 | + dump := spew.Sdump(f) |
| 410 | + |
| 411 | + assertDumpContainsAny := func(substrs ...string) { |
| 412 | + for _, substr := range substrs { |
| 413 | + if strings.Contains(dump, substr) { |
| 414 | + return |
| 415 | + } |
| 416 | + } |
| 417 | + |
| 418 | + assert.Failf(t, "Parsed expression dump did not contain any expected string", |
| 419 | + "Expression: %q\nExpected: %#v\n\n%s", expr, substrs, dump) |
| 420 | + } |
| 421 | + |
| 422 | + if strings.Contains(expr, "&") { |
| 423 | + assertDumpContainsAny("All") |
| 424 | + } |
| 425 | + if strings.Contains(expr, "|") { |
| 426 | + assertDumpContainsAny("Any", "None") |
| 427 | + } |
| 428 | + if strings.Contains(expr, "!") { |
| 429 | + assertDumpContainsAny("None", "UnEqual", "Unlike") |
| 430 | + } |
| 431 | + } |
406 | 432 | })
|
407 | 433 | }
|
0 commit comments