1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
package schema_test
import (
"testing"
"github.com/graph-gophers/graphql-go/internal/schema"
)
type parseTestCase struct {
description string
sdl string
expected *schema.Schema
err error
}
var parseTests = []parseTestCase{{
description: "Parses interface definition",
sdl: "interface Greeting { message: String! }",
expected: &schema.Schema{
Types: map[string]schema.NamedType{
"Greeting": &schema.Interface{
Name: "Greeting",
Fields: []*schema.Field{{Name: "message"}},
}},
}}, {
description: "Parses type with description string",
sdl: `
"Single line description."
type Type {
field: String
}`,
expected: &schema.Schema{
Types: map[string]schema.NamedType{
"Type": &schema.Object{
Name: "Type",
Desc: "Single line description.",
}},
}}, {
description: "Parses type with multi-line description string",
sdl: `
"""
Multi-line description.
"""
type Type {
field: String
}`,
expected: &schema.Schema{
Types: map[string]schema.NamedType{
"Type": &schema.Object{
Name: "Type",
Desc: "Multi-line description.",
}},
}}, {
description: "Parses type with multi-line description and ignores comments",
sdl: `
"""
Multi-line description with ignored comments.
"""
# This comment should be ignored.
type Type {
field: String
}`,
expected: &schema.Schema{
Types: map[string]schema.NamedType{
"Type": &schema.Object{
Name: "Type",
Desc: "Multi-line description with ignored comments.",
}},
}},
}
func TestParse(t *testing.T) {
setup := func(t *testing.T) *schema.Schema {
t.Helper()
return schema.New()
}
for _, test := range parseTests {
t.Run(test.description, func(t *testing.T) {
t.Skip("TODO: add support for descriptions")
schema := setup(t)
err := schema.Parse(test.sdl)
if err != nil {
t.Fatal(err)
}
// TODO: verify schema is the same as expected.
})
}
}
|