Skip to content

Commit ba58051

Browse files
tests: updated tests for query run errors
1 parent 9696ed4 commit ba58051

File tree

1 file changed

+72
-7
lines changed

1 file changed

+72
-7
lines changed

bindings_test.go

Lines changed: 72 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -387,14 +387,79 @@ func testCaptures(t *testing.T, body, sq string, expected []string) {
387387
}
388388

389389
func TestQueryError(t *testing.T) {
390-
assert := assert.New(t)
391-
392-
q, err := NewQuery([]byte("((unknown) name: (identifier))"), getTestGrammar())
390+
grammar := getTestGrammar()
391+
392+
tests := []struct {
393+
name string
394+
query string
395+
expected *QueryError
396+
}{
397+
{
398+
name: "syntax error",
399+
query: "((expression)",
400+
expected: &QueryError{
401+
Type: QueryErrorSyntax,
402+
Message: "invalid syntax at line 1 column 1\n\n ^",
403+
},
404+
},
405+
{
406+
name: "node type error",
407+
query: "((unknown))",
408+
expected: &QueryError{
409+
Type: QueryErrorNodeType,
410+
Message: "invalid node type 'unknown' at line 1 column 0",
411+
},
412+
},
413+
{
414+
name: "field error",
415+
query: "(sum invalid_field: (number))",
416+
expected: &QueryError{
417+
Type: QueryErrorField,
418+
Message: "invalid field 'invalid_field' at line 1 column 0",
419+
},
420+
},
421+
{
422+
name: "capture error",
423+
query: "((#eq? @missing \"value\")",
424+
expected: &QueryError{
425+
Type: QueryErrorCapture,
426+
Message: "invalid capture 'missing' at line 1 column 0",
427+
},
428+
},
429+
{
430+
name: "structure error",
431+
query: "(number (expression ) @query)",
432+
expected: &QueryError{
433+
Type: QueryErrorStructure,
434+
Message: "invalid structure at line 1 column 0\n(expression ) @query)\n^",
435+
},
436+
},
437+
// TODO: this error only happens when a language with incompatible version is being used
438+
// {
439+
// name: "language error",
440+
// query: "",
441+
// expected: &QueryError{
442+
// Type: QueryErrorLanguage,
443+
// Message: "incompatible language at line 1 column 0",
444+
// },
445+
// },
446+
}
393447

394-
assert.Nil(q)
395-
assert.NotNil(err)
396-
assert.EqualValues(&QueryError{Offset: 0x02, Type: QueryErrorNodeType,
397-
Message: "invalid node type 'unknown' at line 1 column 0"}, err)
448+
for _, tt := range tests {
449+
t.Run(tt.name, func(t *testing.T) {
450+
assert := assert.New(t)
451+
q, err := NewQuery([]byte(tt.query), grammar)
452+
if !assert.Nil(q) {
453+
return
454+
}
455+
assert.NotNil(err)
456+
queryErr, ok := err.(*QueryError)
457+
if assert.True(ok, "error type: %T, err: %v", err, err) {
458+
assert.Equal(tt.expected.Type, queryErr.Type)
459+
assert.Equal(tt.expected.Message, queryErr.Message)
460+
}
461+
})
462+
}
398463
}
399464

400465
func doWorkLifetime(t testing.TB, n *Node) {

0 commit comments

Comments
 (0)