aboutsummaryrefslogtreecommitdiff
path: root/misc
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2019-11-13 12:25:09 -0500
committerBryan C. Mills <bcmills@google.com>2019-11-13 20:53:39 +0000
commit49e05d4f91771fc6f090238a6a8c5f1796b01afe (patch)
tree3c7badb3a5ed2ca77e507fb36d380492fc27d69f /misc
parent7ad27481f84dbf325ee348831ed0f95dbf04094e (diff)
downloadgo-49e05d4f91771fc6f090238a6a8c5f1796b01afe.tar.gz
go-49e05d4f91771fc6f090238a6a8c5f1796b01afe.zip
misc/cgo/testgodefs: convert test from bash to Go
The bash version of the test wrote intermediate files to its testdata directory. Updates #28387 Updates #30316 Fixes #35536 Change-Id: Ib81b547d3c43e90df713a2172c8f399fefb53c68 Reviewed-on: https://go-review.googlesource.com/c/go/+/206901 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'misc')
-rwxr-xr-xmisc/cgo/testgodefs/test.bash24
-rw-r--r--misc/cgo/testgodefs/testgodefs_test.go83
2 files changed, 83 insertions, 24 deletions
diff --git a/misc/cgo/testgodefs/test.bash b/misc/cgo/testgodefs/test.bash
deleted file mode 100755
index e4ce2ee7a8..0000000000
--- a/misc/cgo/testgodefs/test.bash
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env bash
-
-# Copyright 2014 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.
-
-# We are testing cgo -godefs, which translates Go files that use
-# import "C" into Go files with Go definitions of types defined in the
-# import "C" block. Add more tests here.
-FILE_PREFIXES="anonunion issue8478 fieldtypedef"
-
-cd testdata
-
-RM=
-for FP in $FILE_PREFIXES
-do
- go tool cgo -godefs -srcdir . ${FP}.go > ${FP}_defs.go
- RM="${RM} ${FP}_defs.go"
-done
-
-go build -o testgodefs . && ./testgodefs
-EXIT=$?
-rm -rf _obj testgodefs ${RM}
-exit $EXIT
diff --git a/misc/cgo/testgodefs/testgodefs_test.go b/misc/cgo/testgodefs/testgodefs_test.go
new file mode 100644
index 0000000000..c02c3ff0ac
--- /dev/null
+++ b/misc/cgo/testgodefs/testgodefs_test.go
@@ -0,0 +1,83 @@
+// Copyright 2019 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 testgodefs
+
+import (
+ "bytes"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "strings"
+ "testing"
+)
+
+// We are testing cgo -godefs, which translates Go files that use
+// import "C" into Go files with Go definitions of types defined in the
+// import "C" block. Add more tests here.
+var filePrefixes = []string{
+ "anonunion",
+ "issue8478",
+ "fieldtypedef",
+}
+
+func TestGoDefs(t *testing.T) {
+ testdata, err := filepath.Abs("testdata")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ gopath, err := ioutil.TempDir("", "testgodefs-gopath")
+ if err != nil {
+ t.Fatal(err)
+ }
+ defer os.RemoveAll(gopath)
+
+ dir := filepath.Join(gopath, "src", "testgodefs")
+ if err := os.MkdirAll(dir, 0755); err != nil {
+ t.Fatal(err)
+ }
+
+ for _, fp := range filePrefixes {
+ cmd := exec.Command("go", "tool", "cgo",
+ "-godefs",
+ "-srcdir", testdata,
+ "-objdir", dir,
+ fp+".go")
+ cmd.Stderr = new(bytes.Buffer)
+
+ out, err := cmd.Output()
+ if err != nil {
+ t.Fatalf("%s: %v\n%s", strings.Join(cmd.Args, " "), err, cmd.Stderr)
+ }
+
+ if err := ioutil.WriteFile(filepath.Join(dir, fp+"_defs.go"), out, 0644); err != nil {
+ t.Fatal(err)
+ }
+ }
+
+ main, err := ioutil.ReadFile(filepath.Join("testdata", "main.go"))
+ if err != nil {
+ t.Fatal(err)
+ }
+ if err := ioutil.WriteFile(filepath.Join(dir, "main.go"), main, 0644); err != nil {
+ t.Fatal(err)
+ }
+
+ if err := ioutil.WriteFile(filepath.Join(dir, "go.mod"), []byte("module testgodefs\ngo 1.14\n"), 0644); err != nil {
+ t.Fatal(err)
+ }
+
+ // Use 'go run' to build and run the resulting binary in a single step,
+ // instead of invoking 'go build' and the resulting binary separately, so that
+ // this test can pass on mobile builders, which do not copy artifacts back
+ // from remote invocations.
+ cmd := exec.Command("go", "run", ".")
+ cmd.Env = append(os.Environ(), "GOPATH="+gopath)
+ cmd.Dir = dir
+ if out, err := cmd.CombinedOutput(); err != nil {
+ t.Fatalf("%s [%s]: %v\n%s", strings.Join(cmd.Args, " "), dir, err, out)
+ }
+}