The gobind command is about to get more powerful and able to generate complete and standalone bindings. Platform specific build tags based on GOOS or GOARCH are now meaningless to generate bindings from, so remove them from the test packages. The tags mattered to the reverse bound packages, since the go tool can't build them without the Go wrappers for the imported Java packages. Before this CL, the `android` tag was used to fool the go tool since the host GOOS is unlikely to be android. A fix is to check in the generated Go wrappers, but since the packages are for testing we don't want that. Instead, move the test packages to the testdata directory so the go tool ignores them. Change-Id: I57178e930a400f690ebd7a65758bed894eeb10b0 Reviewed-on: https://go-review.googlesource.com/99315 Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
72 lines
1.8 KiB
Go
72 lines
1.8 KiB
Go
// Copyright 2016 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 (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"testing"
|
|
)
|
|
|
|
var tests = []struct {
|
|
name string
|
|
lang string
|
|
pkg string
|
|
goos string
|
|
}{
|
|
{"ObjC-Testpkg", "objc", "golang.org/x/mobile/bind/testdata/testpkg", ""},
|
|
{"Java-Testpkg", "java", "golang.org/x/mobile/bind/testdata/testpkg", ""},
|
|
{"Go-Testpkg", "go", "golang.org/x/mobile/bind/testdata/testpkg", ""},
|
|
{"Java-Javapkg", "java", "golang.org/x/mobile/bind/testdata/testpkg/javapkg", "android"},
|
|
{"Go-Javapkg", "go", "golang.org/x/mobile/bind/testdata/testpkg/javapkg", "android"},
|
|
}
|
|
|
|
func installGobind() error {
|
|
if out, err := exec.Command("go", "install", "golang.org/x/mobile/cmd/gobind").CombinedOutput(); err != nil {
|
|
return fmt.Errorf("gobind install failed: %v: %s", err, out)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func runGobind(lang, pkg, goos string) error {
|
|
cmd := exec.Command("gobind", "-lang", lang, pkg)
|
|
if goos != "" {
|
|
cmd.Env = append(os.Environ(), "GOOS="+goos)
|
|
}
|
|
if out, err := cmd.CombinedOutput(); err != nil {
|
|
return fmt.Errorf("gobind -lang %s %s failed: %v: %s", lang, pkg, err, out)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func TestGobind(t *testing.T) {
|
|
if err := installGobind(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
for _, test := range tests {
|
|
t.Run(test.name, func(t *testing.T) {
|
|
if err := runGobind(test.lang, test.pkg, test.goos); err != nil {
|
|
t.Error(err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkGobind(b *testing.B) {
|
|
if err := installGobind(); err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
for _, test := range tests {
|
|
b.Run(test.name, func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
if err := runGobind(test.lang, test.pkg, test.goos); err != nil {
|
|
b.Error(err)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|