github.com/powerman/golang-tools@v0.1.11-0.20220410185822-5ad214d8d803/internal/typeparams/typeparams_test.go (about) 1 // Copyright 2021 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build go1.18 6 // +build go1.18 7 8 package typeparams_test 9 10 import ( 11 "go/ast" 12 "go/importer" 13 "go/parser" 14 "go/token" 15 "go/types" 16 "strings" 17 "testing" 18 19 "github.com/powerman/golang-tools/internal/apidiff" 20 "github.com/powerman/golang-tools/internal/testenv" 21 ) 22 23 func TestAPIConsistency(t *testing.T) { 24 testenv.NeedsGoBuild(t) // This is a lie. We actually need the source code. 25 26 // The packages below exclude enabled_*.go, as typeparams.Enabled is 27 // permitted to change between versions. 28 old := typeCheck(t, []string{"common.go", "typeparams_go117.go"}) 29 new := typeCheck(t, []string{"common.go", "typeparams_go118.go"}) 30 31 report := apidiff.Changes(old, new) 32 33 // Temporarily ignore API diff related to Environment, so that we can use a 34 // transient alias in go/types to allow renaming this type without ever 35 // breaking the x/tools builder. 36 // TODO(rfindley): remove this 37 var filteredChanges []apidiff.Change 38 for _, change := range report.Changes { 39 if strings.Contains(change.Message, "Environment") { 40 continue 41 } 42 filteredChanges = append(filteredChanges, change) 43 } 44 report.Changes = filteredChanges 45 if len(report.Changes) > 0 { 46 t.Errorf("API diff:\n%s", report) 47 } 48 } 49 50 func typeCheck(t *testing.T, filenames []string) *types.Package { 51 fset := token.NewFileSet() 52 var files []*ast.File 53 for _, name := range filenames { 54 f, err := parser.ParseFile(fset, name, nil, 0) 55 if err != nil { 56 t.Fatal(err) 57 } 58 files = append(files, f) 59 } 60 conf := types.Config{ 61 Importer: importer.Default(), 62 } 63 pkg, err := conf.Check("", fset, files, nil) 64 if err != nil { 65 t.Fatal(err) 66 } 67 return pkg 68 }