github.com/luciferinlove/gqlgen@v0.17.16-bzc.1/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  }