diff --git a/generated_test.go b/generated_test.go new file mode 100644 index 0000000..c722a3f --- /dev/null +++ b/generated_test.go @@ -0,0 +1,37 @@ +package rootly + +import ( + "go/ast" + "go/parser" + "go/token" + "testing" +) + +func TestNoInterfaceTypeAliases(t *testing.T) { + fset := token.NewFileSet() + f, err := parser.ParseFile(fset, "schema.gen.go", nil, 0) + if err != nil { + t.Fatalf("failed to parse schema.gen.go: %v", err) + } + + for _, decl := range f.Decls { + genDecl, ok := decl.(*ast.GenDecl) + if !ok || genDecl.Tok != token.TYPE { + continue + } + for _, spec := range genDecl.Specs { + typeSpec, ok := spec.(*ast.TypeSpec) + if !ok || !typeSpec.Assign.IsValid() { + continue + } + + t.Run(typeSpec.Name.Name+" should not be an interface{}", func(t *testing.T) { + iface, ok := typeSpec.Type.(*ast.InterfaceType) + + if ok && iface.Methods.NumFields() == 0 { + t.Fail() + } + }) + } + } +}