aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorMichael Matloob <matloob@golang.org>2020-01-10 16:15:19 -0500
committerMichael Matloob <matloob@golang.org>2020-02-19 21:12:36 +0000
commitea38df043613ddd7b49f4b2d0109b4784b69c204 (patch)
tree5e207db89a47288fd453f6958a6a3478079df4fb /src/cmd
parent7e368b3f5ae7a11648dcf590ec1f14a4126169f4 (diff)
downloadgo-ea38df043613ddd7b49f4b2d0109b4784b69c204.tar.xz
cmd/go: convert TestBadCgoDirectives to the script framework
Part of converting all tests to script framework to improve test parallelism. Updates #36320 Updates #17751 Change-Id: I1328a87e2481b4555b01df5c898f1a8015412adc Reviewed-on: https://go-review.googlesource.com/c/go/+/214296 Reviewed-by: Jay Conrod <jayconrod@google.com>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/go/go_test.go112
-rw-r--r--src/cmd/go/testdata/script/cgo_bad_directives.txt126
2 files changed, 126 insertions, 112 deletions
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go
index ae7ecdd8c9..2c829f38b6 100644
--- a/src/cmd/go/go_test.go
+++ b/src/cmd/go/go_test.go
@@ -3340,118 +3340,6 @@ func TestBadCommandLines(t *testing.T) {
tg.grepStderr("invalid import path \"-x/y\"", "did not reject -x/y import path")
}
-func TestBadCgoDirectives(t *testing.T) {
- if !canCgo {
- t.Skip("no cgo")
- }
- tooSlow(t)
- tg := testgo(t)
- defer tg.cleanup()
-
- tg.tempFile("src/x/x.go", "package x\n")
- tg.setenv("GOPATH", tg.path("."))
-
- if runtime.Compiler == "gc" {
- tg.tempFile("src/x/x.go", `package x
-
- //go:cgo_ldflag "-fplugin=foo.so"
-
- import "C"
- `)
- tg.runFail("build", "x")
- tg.grepStderr("//go:cgo_ldflag .* only allowed in cgo-generated code", "did not reject //go:cgo_ldflag directive")
- }
-
- tg.must(os.Remove(tg.path("src/x/x.go")))
- tg.runFail("build", "x")
- tg.grepStderr("no Go files", "did not report missing source code")
- tg.tempFile("src/x/_cgo_yy.go", `package x
-
- //go:cgo_ldflag "-fplugin=foo.so"
-
- import "C"
- `)
- tg.runFail("build", "x")
- tg.grepStderr("no Go files", "did not report missing source code") // _* files are ignored...
-
- if runtime.Compiler == "gc" {
- tg.runFail("build", tg.path("src/x/_cgo_yy.go")) // ... but if forced, the comment is rejected
- // Actually, today there is a separate issue that _ files named
- // on the command line are ignored. Once that is fixed,
- // we want to see the cgo_ldflag error.
- tg.grepStderr("//go:cgo_ldflag only allowed in cgo-generated code|no Go files", "did not reject //go:cgo_ldflag directive")
- }
-
- tg.must(os.Remove(tg.path("src/x/_cgo_yy.go")))
-
- tg.tempFile("src/x/x.go", "package x\n")
- tg.tempFile("src/x/y.go", `package x
- // #cgo CFLAGS: -fplugin=foo.so
- import "C"
- `)
- tg.runFail("build", "x")
- tg.grepStderr("invalid flag in #cgo CFLAGS: -fplugin=foo.so", "did not reject -fplugin")
-
- tg.tempFile("src/x/y.go", `package x
- // #cgo CFLAGS: -Ibar -fplugin=foo.so
- import "C"
- `)
- tg.runFail("build", "x")
- tg.grepStderr("invalid flag in #cgo CFLAGS: -fplugin=foo.so", "did not reject -fplugin")
-
- tg.tempFile("src/x/y.go", `package x
- // #cgo pkg-config: -foo
- import "C"
- `)
- tg.runFail("build", "x")
- tg.grepStderr("invalid pkg-config package name: -foo", "did not reject pkg-config: -foo")
-
- tg.tempFile("src/x/y.go", `package x
- // #cgo pkg-config: @foo
- import "C"
- `)
- tg.runFail("build", "x")
- tg.grepStderr("invalid pkg-config package name: @foo", "did not reject pkg-config: -foo")
-
- tg.tempFile("src/x/y.go", `package x
- // #cgo CFLAGS: @foo
- import "C"
- `)
- tg.runFail("build", "x")
- tg.grepStderr("invalid flag in #cgo CFLAGS: @foo", "did not reject @foo flag")
-
- tg.tempFile("src/x/y.go", `package x
- // #cgo CFLAGS: -D
- import "C"
- `)
- tg.runFail("build", "x")
- tg.grepStderr("invalid flag in #cgo CFLAGS: -D without argument", "did not reject trailing -I flag")
-
- // Note that -I @foo is allowed because we rewrite it into -I /path/to/src/@foo
- // before the check is applied. There's no such rewrite for -D.
-
- tg.tempFile("src/x/y.go", `package x
- // #cgo CFLAGS: -D @foo
- import "C"
- `)
- tg.runFail("build", "x")
- tg.grepStderr("invalid flag in #cgo CFLAGS: -D @foo", "did not reject -D @foo flag")
-
- tg.tempFile("src/x/y.go", `package x
- // #cgo CFLAGS: -D@foo
- import "C"
- `)
- tg.runFail("build", "x")
- tg.grepStderr("invalid flag in #cgo CFLAGS: -D@foo", "did not reject -D@foo flag")
-
- tg.setenv("CGO_CFLAGS", "-D@foo")
- tg.tempFile("src/x/y.go", `package x
- import "C"
- `)
- tg.run("build", "-n", "x")
- tg.grepStderr("-D@foo", "did not find -D@foo in commands")
-}
-
func TestTwoPkgConfigs(t *testing.T) {
if !canCgo {
t.Skip("no cgo")
diff --git a/src/cmd/go/testdata/script/cgo_bad_directives.txt b/src/cmd/go/testdata/script/cgo_bad_directives.txt
new file mode 100644
index 0000000000..358284ffec
--- /dev/null
+++ b/src/cmd/go/testdata/script/cgo_bad_directives.txt
@@ -0,0 +1,126 @@
+[!cgo] skip
+[short] skip
+
+mkdir x
+cp x.go.txt x/x.go
+
+# Only allow //go:cgo_ldflag .* in cgo-generated code
+[gc] cp x_gc.go.txt x/x.go
+[gc] ! go build x
+[gc] stderr '//go:cgo_ldflag .* only allowed in cgo-generated code'
+
+# Ignore _* files
+rm x/x.go
+! go build x
+stderr 'no Go files'
+cp cgo_yy.go.txt x/_cgo_yy.go
+! go build x
+stderr 'no Go files' #_* files are ignored...
+
+[gc] ! go build x/_cgo_yy.go # ... but if forced, the comment is rejected
+# Actually, today there is a separate issue that _ files named
+# on the command line are ignored. Once that is fixed,
+# we want to see the cgo_ldflag error.
+[gc] stderr '//go:cgo_ldflag only allowed in cgo-generated code|no Go files'
+
+rm x/_cgo_yy.go
+
+# Reject #cgo CFLAGS: -fplugin=foo.so
+cp x.go.txt x/x.go
+cp y_fplugin.go.txt x/y.go
+! go build x
+stderr 'invalid flag in #cgo CFLAGS: -fplugin=foo.so'
+
+# Reject #cgo CFLAGS: -lbar -fplugin=foo.so
+cp y_lbar_fplugin.go.txt x/y.go
+! go build x
+stderr 'invalid flag in #cgo CFLAGS: -fplugin=foo.so'
+
+# Reject #cgo pkg-config: -foo
+cp y_pkgconfig_dash_foo.txt x/y.go
+! go build x
+stderr 'invalid pkg-config package name: -foo'
+
+# Reject #cgo pkg-config: @foo
+cp y_pkgconfig_at_foo.txt x/y.go
+! go build x
+stderr 'invalid pkg-config package name: @foo'
+
+# Reject #cgo CFLAGS: @foo
+cp y_cflags_at_foo.txt x/y.go
+! go build x
+stderr 'invalid flag in #cgo CFLAGS: @foo'
+
+# Reject #cgo CFLAGS: -D
+cp y_cflags_dash_d.txt x/y.go
+! go build x
+stderr 'invalid flag in #cgo CFLAGS: -D without argument'
+
+# Note that -I @foo is allowed because we rewrite it into -I /path/to/src/@foo
+# before the check is applied. There's no such rewrite for -D.
+
+# Reject #cgo CFLAGS: -D @foo
+cp y_cflags_dash_d_space_at_foo.txt x/y.go
+! go build x
+stderr 'invalid flag in #cgo CFLAGS: -D @foo'
+
+# Reject #cgo CFLAGS -D@foo
+cp y_cflags_dash_d_at_foo.txt x/y.go
+! go build x
+stderr 'invalid flag in #cgo CFLAGS: -D@foo'
+
+# Check for CFLAGS in commands
+env CGO_CFLAGS=-D@foo
+cp y_no_cflags.txt x/y.go
+go build -n x
+stderr '-D@foo'
+
+-- x_gc.go.txt --
+package x
+
+//go:cgo_ldflag "-fplugin=foo.so"
+
+import "C"
+-- cgo_yy.go.txt --
+package x
+
+//go:cgo_ldflag "-fplugin=foo.so"
+
+import "C"
+-- x.go.txt --
+package x
+-- y_fplugin.go.txt --
+package x
+// #cgo CFLAGS: -fplugin=foo.so
+import "C"
+-- y_lbar_fplugin.go.txt --
+package x
+// #cgo CFLAGS: -Ibar -fplugin=foo.so
+import "C"
+-- y_pkgconfig_dash_foo.txt --
+package x
+// #cgo pkg-config: -foo
+import "C"
+-- y_pkgconfig_at_foo.txt --
+package x
+// #cgo pkg-config: @foo
+import "C"
+-- y_cflags_at_foo.txt --
+package x
+// #cgo CFLAGS: @foo
+import "C"
+-- y_cflags_dash_d.txt --
+package x
+// #cgo CFLAGS: -D
+import "C"
+-- y_cflags_dash_d_space_at_foo.txt --
+package x
+// #cgo CFLAGS: -D @foo
+import "C"
+-- y_cflags_dash_d_at_foo.txt --
+package x
+// #cgo CFLAGS: -D@foo
+import "C"
+-- y_no_cflags.txt --
+package x
+import "C" \ No newline at end of file