]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.regabi] go/types: port check_test.go ergonomics from dev.typeparams
authorRob Findley <rfindley@google.com>
Thu, 4 Feb 2021 16:06:15 +0000 (11:06 -0500)
committerRobert Findley <rfindley@google.com>
Thu, 4 Feb 2021 17:13:55 +0000 (17:13 +0000)
On the dev.typeparams and dev.go2go branches, check_test.go has been
updated to automatically discover test data. This is convenient, so port
it to dev.regabi.

Change-Id: I5da9a9a5139c35a2693e64364eb9928ece1cd7c6
Reviewed-on: https://go-review.googlesource.com/c/go/+/289713
Trust: Robert Findley <rfindley@google.com>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/go/types/check_test.go
src/go/types/testdata/decls2/decls2a.src [moved from src/go/types/testdata/decls2a.src with 100% similarity]
src/go/types/testdata/decls2/decls2b.src [moved from src/go/types/testdata/decls2b.src with 100% similarity]
src/go/types/testdata/importdecl0/importdecl0a.src [moved from src/go/types/testdata/importdecl0a.src with 100% similarity]
src/go/types/testdata/importdecl0/importdecl0b.src [moved from src/go/types/testdata/importdecl0b.src with 100% similarity]
src/go/types/testdata/importdecl1/importdecl1a.src [moved from src/go/types/testdata/importdecl1a.src with 100% similarity]
src/go/types/testdata/importdecl1/importdecl1b.src [moved from src/go/types/testdata/importdecl1b.src with 100% similarity]
src/go/types/testdata/issue25008/issue25008a.src [moved from src/go/types/testdata/issue25008a.src with 100% similarity]
src/go/types/testdata/issue25008/issue25008b.src [moved from src/go/types/testdata/issue25008b.src with 100% similarity]

index ce31dab68bb18067c453d555e26f99654761696f..47d749b3a331bd1e55dd472ab33d86aa40ddf980 100644 (file)
@@ -27,12 +27,14 @@ package types_test
 
 import (
        "flag"
+       "fmt"
        "go/ast"
        "go/importer"
        "go/parser"
        "go/scanner"
        "go/token"
        "internal/testenv"
+       "io/ioutil"
        "os"
        "path/filepath"
        "regexp"
@@ -48,54 +50,6 @@ var (
        testFiles   = flag.String("files", "", "space-separated list of test files")
 )
 
-// The test filenames do not end in .go so that they are invisible
-// to gofmt since they contain comments that must not change their
-// positions relative to surrounding tokens.
-
-// Each tests entry is list of files belonging to the same package.
-var tests = [][]string{
-       {"testdata/errors.src"},
-       {"testdata/importdecl0a.src", "testdata/importdecl0b.src"},
-       {"testdata/importdecl1a.src", "testdata/importdecl1b.src"},
-       {"testdata/importC.src"}, // special handling in checkFiles
-       {"testdata/cycles.src"},
-       {"testdata/cycles1.src"},
-       {"testdata/cycles2.src"},
-       {"testdata/cycles3.src"},
-       {"testdata/cycles4.src"},
-       {"testdata/cycles5.src"},
-       {"testdata/init0.src"},
-       {"testdata/init1.src"},
-       {"testdata/init2.src"},
-       {"testdata/decls0.src"},
-       {"testdata/decls1.src"},
-       {"testdata/decls2a.src", "testdata/decls2b.src"},
-       {"testdata/decls3.src"},
-       {"testdata/decls4.src"},
-       {"testdata/decls5.src"},
-       {"testdata/const0.src"},
-       {"testdata/const1.src"},
-       {"testdata/constdecl.src"},
-       {"testdata/vardecl.src"},
-       {"testdata/expr0.src"},
-       {"testdata/expr1.src"},
-       {"testdata/expr2.src"},
-       {"testdata/expr3.src"},
-       {"testdata/methodsets.src"},
-       {"testdata/shifts.src"},
-       {"testdata/builtins.src"},
-       {"testdata/conversions.src"},
-       {"testdata/conversions2.src"},
-       {"testdata/stmt0.src"},
-       {"testdata/stmt1.src"},
-       {"testdata/gotos.src"},
-       {"testdata/labels.src"},
-       {"testdata/literals.src"},
-       {"testdata/issues.src"},
-       {"testdata/blank.src"},
-       {"testdata/issue25008b.src", "testdata/issue25008a.src"}, // order (b before a) is crucial!
-}
-
 var fset = token.NewFileSet()
 
 // Positioned errors are of the form filename:line:column: message .
@@ -236,9 +190,13 @@ func eliminate(t *testing.T, errmap map[string][]string, errlist []error) {
        }
 }
 
-func checkFiles(t *testing.T, testfiles []string) {
+func checkFiles(t *testing.T, sources []string) {
+       if len(sources) == 0 {
+               t.Fatal("no source files")
+       }
+
        // parse files and collect parser errors
-       files, errlist := parseFiles(t, testfiles)
+       files, errlist := parseFiles(t, sources)
 
        pkgName := "<no package>"
        if len(files) > 0 {
@@ -254,10 +212,13 @@ func checkFiles(t *testing.T, testfiles []string) {
 
        // typecheck and collect typechecker errors
        var conf Config
+
        // special case for importC.src
-       if len(testfiles) == 1 && strings.HasSuffix(testfiles[0], "importC.src") {
+       if len(sources) == 1 && strings.HasSuffix(sources[0], "importC.src") {
                conf.FakeImportC = true
        }
+       // TODO(rFindley) we may need to use the source importer when adding generics
+       // tests.
        conf.Importer = importer.Default()
        conf.Error = func(err error) {
                if *haltOnError {
@@ -306,44 +267,52 @@ func checkFiles(t *testing.T, testfiles []string) {
        }
 }
 
+// TestCheck is for manual testing of selected input files, provided with -files.
 func TestCheck(t *testing.T) {
-       testenv.MustHaveGoBuild(t)
-
-       // Declare builtins for testing.
-       DefPredeclaredTestFuncs()
-
-       // If explicit test files are specified, only check those.
-       if files := *testFiles; files != "" {
-               checkFiles(t, strings.Split(files, " "))
+       if *testFiles == "" {
                return
        }
-
-       // Otherwise, run all the tests.
-       for _, files := range tests {
-               checkFiles(t, files)
-       }
+       testenv.MustHaveGoBuild(t)
+       DefPredeclaredTestFuncs()
+       checkFiles(t, strings.Split(*testFiles, " "))
 }
 
-func TestFixedBugs(t *testing.T) { testDir(t, "fixedbugs") }
+func TestTestdata(t *testing.T)  { DefPredeclaredTestFuncs(); testDir(t, "testdata") }
+func TestFixedbugs(t *testing.T) { testDir(t, "fixedbugs") }
 
 func testDir(t *testing.T, dir string) {
        testenv.MustHaveGoBuild(t)
 
-       dirs, err := os.ReadDir(dir)
+       fis, err := os.ReadDir(dir)
        if err != nil {
-               t.Fatal(err)
+               t.Error(err)
+               return
        }
 
-       for _, d := range dirs {
-               testname := filepath.Base(d.Name())
-               testname = strings.TrimSuffix(testname, filepath.Ext(testname))
-               t.Run(testname, func(t *testing.T) {
-                       filename := filepath.Join(dir, d.Name())
-                       if d.IsDir() {
-                               t.Errorf("skipped directory %q", filename)
-                               return
+       for _, fi := range fis {
+               path := filepath.Join(dir, fi.Name())
+
+               // if fi is a directory, its files make up a single package
+               var files []string
+               if fi.IsDir() {
+                       fis, err := ioutil.ReadDir(path)
+                       if err != nil {
+                               t.Error(err)
+                               continue
+                       }
+                       files = make([]string, len(fis))
+                       for i, fi := range fis {
+                               // if fi is a directory, checkFiles below will complain
+                               files[i] = filepath.Join(path, fi.Name())
+                               if testing.Verbose() {
+                                       fmt.Printf("\t%s\n", files[i])
+                               }
                        }
-                       checkFiles(t, []string{filename})
+               } else {
+                       files = []string{path}
+               }
+               t.Run(filepath.Base(path), func(t *testing.T) {
+                       checkFiles(t, files)
                })
        }
 }