github.com/99designs/gqlgen@v0.17.45/codegen/testserver/generated_test.go (about) 1 package testserver 2 3 import ( 4 "fmt" 5 "go/ast" 6 "go/parser" 7 "go/token" 8 "os" 9 "path/filepath" 10 "strings" 11 "testing" 12 13 eqgo "github.com/kevinmbeaulieu/eq-go/eq-go" 14 "github.com/stretchr/testify/require" 15 ) 16 17 func TestLayouts(t *testing.T) { 18 singlefileFSet := token.NewFileSet() 19 singlefilePkg := loadPackage("singlefile", singlefileFSet) 20 21 followschemaFSet := token.NewFileSet() 22 followschemaPkg := loadPackage("followschema", followschemaFSet) 23 24 eq, msg := eqgo.PackagesEquivalent(singlefilePkg, singlefileFSet, followschemaPkg, followschemaFSet, nil) 25 if !eq { 26 // When msg is too long, require.True(...) omits it entirely. 27 // Therefore use fmt.Fprintln to print it manually instead. 28 fmt.Fprintln(os.Stderr, msg) 29 require.Fail(t, "Packages not equivalent") 30 } 31 } 32 33 func loadPackage(name string, fset *token.FileSet) *ast.Package { 34 path, err := filepath.Abs(name) 35 if err != nil { 36 panic(err) 37 } 38 files, err := os.ReadDir(path) 39 if err != nil { 40 panic(err) 41 } 42 43 pkg := ast.Package{ 44 Name: name, 45 Files: make(map[string]*ast.File), 46 } 47 for _, f := range files { 48 // Only compare generated files. 49 if strings.HasSuffix(f.Name(), ".generated.go") || 50 f.Name() == "generated.go" || 51 f.Name() == "resolver.go" || 52 f.Name() == "stub.go" || 53 f.Name() == "models-gen.go" { 54 filename := filepath.Join(path, f.Name()) 55 src, err := parser.ParseFile(fset, filename, nil, parser.AllErrors) 56 if err != nil { 57 panic(err) 58 } 59 pkg.Files[filename] = src 60 } 61 } 62 63 return &pkg 64 }