diff options
author | Bryan C. Mills <bcmills@google.com> | 2019-11-13 12:25:09 -0500 |
---|---|---|
committer | Bryan C. Mills <bcmills@google.com> | 2019-11-13 20:53:39 +0000 |
commit | 49e05d4f91771fc6f090238a6a8c5f1796b01afe (patch) | |
tree | 3c7badb3a5ed2ca77e507fb36d380492fc27d69f /misc | |
parent | 7ad27481f84dbf325ee348831ed0f95dbf04094e (diff) | |
download | go-git-49e05d4f91771fc6f090238a6a8c5f1796b01afe.tar.gz |
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-x | misc/cgo/testgodefs/test.bash | 24 | ||||
-rw-r--r-- | misc/cgo/testgodefs/testgodefs_test.go | 83 |
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) + } +} |