...
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
27
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
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 }
65
View as plain text