]> Cypherpunks repositories - gostls13.git/commitdiff
go/types: add a test that generated files match types2
authorRobert Findley <rfindley@google.com>
Wed, 18 Jan 2023 18:08:49 +0000 (13:08 -0500)
committerGopher Robot <gobot@golang.org>
Fri, 20 Jan 2023 21:15:52 +0000 (21:15 +0000)
Adjust the go/types file generation to run in a test, so that we can
easily reuse the existing logic to verify that the current content of
go/types matches the expected result of generating from types2.

This test will enforce that we don't forget to regenerate go/types when
making changes to types2.

Change-Id: Iee14b1402065f7f0ecbcf28000e07a06c08fa42e
Reviewed-on: https://go-review.googlesource.com/c/go/+/462758
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@google.com>
Auto-Submit: Robert Findley <rfindley@google.com>

39 files changed:
src/go/types/array.go
src/go/types/basic.go
src/go/types/chan.go
src/go/types/context.go
src/go/types/context_test.go
src/go/types/gccgosizes.go
src/go/types/generate.go
src/go/types/generate_test.go [moved from src/go/types/generator.go with 83% similarity]
src/go/types/hilbert_test.go
src/go/types/infer.go
src/go/types/instantiate.go
src/go/types/instantiate_test.go
src/go/types/lookup.go
src/go/types/main_test.go
src/go/types/map.go
src/go/types/named.go
src/go/types/object.go
src/go/types/object_test.go
src/go/types/objset.go
src/go/types/package.go
src/go/types/pointer.go
src/go/types/predicates.go
src/go/types/scope.go
src/go/types/selection.go
src/go/types/sizes.go
src/go/types/slice.go
src/go/types/subst.go
src/go/types/termlist.go
src/go/types/termlist_test.go
src/go/types/tuple.go
src/go/types/typelists.go
src/go/types/typeparam.go
src/go/types/typeterm.go
src/go/types/typeterm_test.go
src/go/types/under.go
src/go/types/unify.go
src/go/types/universe.go
src/go/types/util_test.go
src/go/types/validtype.go

index 759e2f2e67096b047423b21488ac3cd72e39faea..f19ce6e528b10002edfc8247142030d8b1fd371f 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 7d6decdb1ae36075086d82f6f4917b90bda1a654..d48361641322d078997e201c52ac0327fce038c5 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 565e9d2e9d1f34caab56bba5e6e23a3d6189ece2..940620067ce9103c54a6ea82e0ec8bb67ed60b40 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 81b2f139ebe9f38ce27396d94937b7c6edcb3e49..56368e1060853315ba6692bdd7eceff6d6e57f48 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2021 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 1340bf20536f83567c496653a8ecc03ed0366a54..c9f6dce728f35b23707dbeb6f4efeca70aa59f2e 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2021 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index d98105c69a94399d0ee3b1de2c0280e0fc316dda..9152c811e106545989942eb9b54624f344047bfd 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2019 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 6759f117b9d03b8e16cc64ff42b38d886d27fe5d..7fec74317063efc0b106dcb0f9cff22878149c02 100644 (file)
@@ -3,6 +3,6 @@
 // license that can be found in the LICENSE file.
 
 // This file exists only to drive go:generate.
-//go:generate go run generator.go
+//go:generate go test -run=Generate -write=all
 
 package types
similarity index 83%
rename from src/go/types/generator.go
rename to src/go/types/generate_test.go
index fc6295d3c8d8209aba0642f95763ae710361dac1..b6942279a8c36e063ec15677d58eec6b92b1682f 100644 (file)
@@ -2,81 +2,93 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-//go:build ignore
-
 // This file implements a custom generator to create various go/types
 // source files from the corresponding types2 files.
 
-package main
+package types_test
 
 import (
        "bytes"
        "flag"
-       "fmt"
        "go/ast"
        "go/format"
        "go/parser"
        "go/token"
-       "log"
+       "internal/diff"
        "os"
        "path/filepath"
        "runtime"
        "strings"
+       "testing"
 )
 
+var filesToWrite = flag.String("write", "", `go/types files to generate, or "all" for all files`)
+
 const (
-       srcDir = "cmd/compile/internal/types2"
-       dstDir = "go/types"
+       srcDir = "/src/cmd/compile/internal/types2/"
+       dstDir = "/src/go/types/"
 )
 
-var fset = token.NewFileSet()
-
-func main() {
-       flag.Parse()
-
-       // process provided filenames, if any
-       if flag.NArg() > 0 {
-               for _, filename := range flag.Args() {
-                       generate(filename, filemap[filename])
+// TestGenerate verifies that generated files in go/types match their types2
+// counterpart. If -write is set, this test actually writes the expected
+// content to go/types; otherwise, it just compares with the existing content.
+func TestGenerate(t *testing.T) {
+       // If filesToWrite is set, write the generated content to disk.
+       // In the special case of "all", write all files in filemap.
+       write := *filesToWrite != ""
+       var files []string // files to process
+       if *filesToWrite != "" && *filesToWrite != "all" {
+               files = strings.Split(*filesToWrite, ",")
+       } else {
+               for file := range filemap {
+                       files = append(files, file)
                }
-               fmt.Printf("generated %d files\n", flag.NArg())
-               return
        }
 
-       // otherwise process per filemap below
-       for filename, action := range filemap {
-               generate(filename, action)
+       for _, filename := range files {
+               generate(t, filename, write)
        }
-       fmt.Printf("generated %d files\n", len(filemap))
 }
 
-func generate(filename string, action action) {
+func generate(t *testing.T, filename string, write bool) {
        // parse src
-       srcFilename := filepath.FromSlash(runtime.GOROOT() + "/src/" + srcDir + "/" + filename)
+       srcFilename := filepath.FromSlash(runtime.GOROOT() + srcDir + filename)
        file, err := parser.ParseFile(fset, srcFilename, nil, parser.ParseComments)
        if err != nil {
-               log.Fatal(err)
+               t.Fatal(err)
        }
 
        // fix package name
        file.Name.Name = strings.ReplaceAll(file.Name.Name, "types2", "types")
 
        // rewrite AST as needed
-       if action != nil {
+       if action := filemap[filename]; action != nil {
                action(file)
        }
 
        // format AST
        var buf bytes.Buffer
-       buf.WriteString("// Code generated by \"go run generator.go\"; DO NOT EDIT.\n\n")
+       buf.WriteString("// Code generated by \"go test -run=Generate -write=all\"; DO NOT EDIT.\n\n")
        if err := format.Node(&buf, fset, file); err != nil {
-               log.Fatal(err)
+               t.Fatal(err)
        }
+       generatedContent := buf.Bytes()
 
-       // write dst
-       dstFilename := filepath.FromSlash(runtime.GOROOT() + "/src/" + dstDir + "/" + filename)
-       if err := os.WriteFile(dstFilename, buf.Bytes(), 0o644); err != nil {
-               log.Fatal(err)
+       dstFilename := filepath.FromSlash(runtime.GOROOT() + dstDir + filename)
+       onDiskContent, err := os.ReadFile(dstFilename)
+       if err != nil {
+               t.Fatalf("reading %q: %v", filename, err)
+       }
+
+       if d := diff.Diff(filename+" (on disk)", onDiskContent, filename+" (generated)", generatedContent); d != nil {
+               if write {
+                       t.Logf("applying change:\n%s", d)
+                       if err := os.WriteFile(dstFilename, generatedContent, 0o644); err != nil {
+                               t.Fatalf("writing %q: %v", filename, err)
+                       }
+               } else {
+                       t.Errorf("generated file content does not match:\n%s", string(d))
+               }
        }
 }
 
index 15e5ae3aca6999c60cebf4ddf090c72ce210c946..7da2a7ded1c1d19108bba6c4a1a2813f22a2fa70 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index ef143535405f75455f22b7c78209a2b3f80a44a5..5f91b526d97558b1b6a94da51b2566cd1971e020 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2018 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index ab3a9451c0c44972ffb42e76bd1bcaf674f09898..11afb7a853e41b8679da7c70b3feb1e33d7a2dd3 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2021 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 91b2a1aaba55fa2482d6ceb278475af3186ca579..574f3aeb86bd8423742e7504b47aaefaa423d591 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2021 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index fa2b7b2f4b766885d5cf0296dbbee4f3e188c796..2d6501b7390a874432b77bf29368b305dec7fd33 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index b0630947c13d4b2985acf2475cf07b3cf9fcb265..fda9d102a3d3a258898cbe615935cbba3534efa2 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2022 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 9827e8c1477920aa63c12875ef6d53115fdd06bb..febb0d3a0b76de2722356a875c00c5fa87e12416 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index f1b2685ec34b23a36a045c3b7f78b47ba4c4a84b..413eaada271832f03d6ee38f2bc86c14ad91d88b 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 74b630af9e078986ea79c0adbbb1ddc2d45de2b5..e47ef2ebecd7fa85a4bcc6d72970f70b5f43c33c 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index b0459260a1316354bd1b677023a2524fbeb6df3a..bed8de3637574b5f6ae7f20959e07b8a2d8e1b76 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2016 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 4e7aaac500b3febf68b9d3f1f678286b4fde0a9f..e6ea37566e319f3e0e60ea2123f07aead7c0b2b7 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 7a64aa9fe4c6a734dcf4943186fdd395f5350748..7aa62fb7a3b715dca8ec60e4d719bc22ddfd4fd1 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 091824c55e061a665489894fec112cfb4cc770c5..5b45ab77553186f5c772b8c46bf5ccccf7eeff8a 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index c80d41d702e51d368b7b0c441978dfbc05e5a08f..1927844732e2364ab4b86cd8fb90180333214036 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2012 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 433f31a478c30ac7a9b0c944ab6aa26987830176..bf646f688210219cfe3cc325a1f50a64f06543fa 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index bc26f39b3fc8aebbf0d9a75d7e4f8331704742de..c79e13c6eb65d7645c8bfc4ee9fc465955a9395a 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index fb7a16699a8744c9601f81d2fd298af517901c21..d32866913e75a80b3d18b8c1b71cb5020ead0948 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2013 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 0fb8476d248c9179cd6d17beee2372908693a4d8..934549c2d413ebd6404894ca343666a4b8302dd2 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 3be5c02be2e084f04e7fbdbadbf4c0ab8b00b24d..30c48e1badc4bd628010a83e006cbf2892ddae3f 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2018 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 46de92459bdc320d6a1fc56bd924519d4d0268eb..9bc631c0e6f519b66959451d90d48d2b3fe18eb0 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2021 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 7499fc6b9ef52ca90e8f17b64e787f2e48066b86..cf0c1905163537dc6a56416c926d6c91a7db637d 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2021 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 8ccf0289a3f6634a879b475c9855d4ed37125bf1..e5e3914bb21079a45ad5754dc2007e8ce83cddfa 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 864a34fa54206cba1bb7eccc924fd334fea798fb..c000de2272545a25d4ba88d1da45526a4009067c 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2021 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index c573fa86335b3dbb3d4d557c4e224c49b416dd45..763fcc61f0d65f55b5993e7f33843b763ec0c34b 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index d862add06e7370fb94785ecc5ed46816f9046e13..c86442c43fe5dbb45b5dcb7b664afcf0ca1dccbf 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2021 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index bf67f3872ddce885cfc41a6b463655f8adbcec56..c6370f44fee79b985ddee657476be394c36c7d8e 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2021 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 0c2410e74edef73c8441f3f9e1c288b4ccf0db29..f17d3bcda4c85319eda6c63769b3278cfb2c6342 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 9db63ca9ecc4e5730c3f23750c4d6c0bffe9a659..9fb0c75893ce806c90825aced74df71cc2a9c6fb 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2020 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 6984cf849b7fdf95acbdb0ab9e8d24ca07c58bd2..d32a8ed4e8f279b3a87978a9bff25323b1eb0ce5 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2011 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 4667451a97059bf3f88c22231caebaa54dae1361..205237211fd96078f94772095bc6f9afc7ef22c6 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2023 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
index 5fd5f73cfa89837b996ad291898434e76c5b47a5..d915fef825516bad9d356fad2d66d41c1eb54d15 100644 (file)
@@ -1,4 +1,4 @@
-// Code generated by "go run generator.go"; DO NOT EDIT.
+// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.
 
 // Copyright 2022 The Go Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style