]> Cypherpunks repositories - gostls13.git/commitdiff
test: add a field tracking test
authorKeith Randall <khr@golang.org>
Wed, 21 Apr 2021 17:54:13 +0000 (10:54 -0700)
committerKeith Randall <khr@golang.org>
Wed, 21 Apr 2021 20:24:34 +0000 (20:24 +0000)
Now that we can set experiments at build time instead of make.bash time,
we can actually write a test for field tracking!

Update #20014

This CL contains a test for the functionality fixed in CL 312069.

Change-Id: I7569a7057bbc7c88ae25ae7bf974b0c8a4e35be8
Reviewed-on: https://go-review.googlesource.com/c/go/+/312217
Trust: Keith Randall <khr@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
test/fixedbugs/issue20014.dir/a/a.go [new file with mode: 0644]
test/fixedbugs/issue20014.dir/main.go [new file with mode: 0644]
test/fixedbugs/issue20014.go [new file with mode: 0644]
test/fixedbugs/issue20014.out [new file with mode: 0644]

diff --git a/test/fixedbugs/issue20014.dir/a/a.go b/test/fixedbugs/issue20014.dir/a/a.go
new file mode 100644 (file)
index 0000000..1e66326
--- /dev/null
@@ -0,0 +1,21 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package a
+
+type T struct {
+       X int `go:"track"`
+       Y int `go:"track"`
+       Z int // untracked
+}
+
+func (t *T) GetX() int {
+       return t.X
+}
+func (t *T) GetY() int {
+       return t.Y
+}
+func (t *T) GetZ() int {
+       return t.Z
+}
diff --git a/test/fixedbugs/issue20014.dir/main.go b/test/fixedbugs/issue20014.dir/main.go
new file mode 100644 (file)
index 0000000..ac9957d
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+import (
+       "strings"
+
+       "issue20014.dir/a"
+)
+
+func main() {
+       samePackage()
+       crossPackage()
+       // Print fields registered with field tracking.
+       for _, line := range strings.Split(fieldTrackInfo, "\n") {
+               if line == "" {
+                       continue
+               }
+               println(strings.Split(line, "\t")[0])
+       }
+}
+
+type T struct {
+       X int `go:"track"`
+       Y int `go:"track"`
+       Z int // untracked
+}
+
+func (t *T) GetX() int {
+       return t.X
+}
+func (t *T) GetY() int {
+       return t.Y
+}
+func (t *T) GetZ() int {
+       return t.Z
+}
+
+func samePackage() {
+       var t T
+       println(t.GetX())
+       println(t.GetZ())
+}
+
+func crossPackage() {
+       var t a.T
+       println(t.GetX())
+       println(t.GetZ())
+}
+
+// This global variable is set by the linker using the -k option.
+var fieldTrackInfo string
diff --git a/test/fixedbugs/issue20014.go b/test/fixedbugs/issue20014.go
new file mode 100644 (file)
index 0000000..e186aa1
--- /dev/null
@@ -0,0 +1,7 @@
+// runindir -goexperiment fieldtrack -ldflags -k=main.fieldTrackInfo
+
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package ignored
diff --git a/test/fixedbugs/issue20014.out b/test/fixedbugs/issue20014.out
new file mode 100644 (file)
index 0000000..252e78d
--- /dev/null
@@ -0,0 +1,6 @@
+0
+0
+0
+0
+main.T.X
+issue20014.dir/a.T.X