diff --git a/go.mod b/go.mod index dd6a7ad..6a42579 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ toolchain go1.23.2 require ( github.com/google/gnostic-models v0.6.9 - github.com/itchyny/gojq v0.12.15 + github.com/itchyny/gojq v0.12.17 github.com/pkg/errors v0.9.1 github.com/stretchr/testify v1.10.0 gopkg.in/yaml.v3 v3.0.1 diff --git a/go.sum b/go.sum index 57da6f3..efabba7 100644 --- a/go.sum +++ b/go.sum @@ -63,8 +63,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/itchyny/gojq v0.12.15 h1:WC1Nxbx4Ifw5U2oQWACYz32JK8G9qxNtHzrvW4KEcqI= -github.com/itchyny/gojq v0.12.15/go.mod h1:uWAHCbCIla1jiNxmeT5/B5mOjSdfkCq6p8vxWg+BM10= +github.com/itchyny/gojq v0.12.17 h1:8av8eGduDb5+rvEdaOO+zQUjA04MS0m3Ps8HiD+fceg= +github.com/itchyny/gojq v0.12.17/go.mod h1:WBrEMkgAfAGO1LUcGOckBl5O726KPp+OlkKug0I/FEY= github.com/itchyny/timefmt-go v0.1.6 h1:ia3s54iciXDdzWzwaVKXZPbiXzxxnv1SPGFfM/myJ5Q= github.com/itchyny/timefmt-go v0.1.6/go.mod h1:RRDZYC5s9ErkjQvTvvU7keJjxUYzIISJGxm9/mAERQg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= diff --git a/internal/parser/parser.go b/internal/parser/parser.go index 7106d4b..0b4bd39 100644 --- a/internal/parser/parser.go +++ b/internal/parser/parser.go @@ -41,7 +41,7 @@ func ParseExpectations(spec string, sctx SourceContext) ([]*ParsedQuery, error) next = line } - if current != "" { + if current != "" && !strings.HasPrefix(current, "#") { query, err := ParseQuery(current, currentSCtx) if err != nil { return nil, errors.Wrapf(err, "parsing query ending at %s", sctx) @@ -55,7 +55,7 @@ func ParseExpectations(spec string, sctx SourceContext) ([]*ParsedQuery, error) return nil, errors.Wrap(err, "parsing expectations") } - if current != "" { + if current != "" && !strings.HasPrefix(current, "#") { query, err := ParseQuery(current, currentSCtx) if err != nil { return nil, errors.Wrapf(err, "parsing query ending at %s", sctx) diff --git a/internal/parser/parser_test.go b/internal/parser/parser_test.go new file mode 100644 index 0000000..6d6f039 --- /dev/null +++ b/internal/parser/parser_test.go @@ -0,0 +1,50 @@ +package parser + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestParseExpectations(t *testing.T) { + tests := map[string]struct { + spec string + want []string + errFunc assert.ErrorAssertionFunc + }{ + "empty": {spec: "", want: nil, errFunc: assert.NoError}, + "one query": { + spec: "foo | bar", + want: []string{"foo | bar"}, + errFunc: assert.NoError, + }, + "a couple of queries with comments": { + spec: `# a comment +query1 | very | + long +# comment in between +query2 | even | + longer +# trailing comment`, + want: []string{ + "query1 | very | long", + "query2 | even | longer", + }, + errFunc: assert.NoError, + }, + } + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + sourceCtx := SourceContext{ + Filename: name, + Line: 1, + } + got, err := ParseExpectations(tt.spec, sourceCtx) + tt.errFunc(t, err) + assert.Len(t, got, len(tt.want)) + for i, query := range got { + assert.Equal(t, tt.want[i], query.Source, "source of query %d should match", i) + } + }) + } +}