Now package names for Android is generated based on the given package path's base name, And the package name generation fails when the base name consists of only digits (e.g. github.com/hajimehoshi/ebiten/examples/2048). This CL fixes this problem by allowing only-number base name. Fixes #24511 Change-Id: I6108c46823d0b2ee08869b306922f62351fb1510 Reviewed-on: https://go-review.googlesource.com/102576 Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
183 lines
4.5 KiB
Go
183 lines
4.5 KiB
Go
// Copyright 2015 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 (
|
|
"bytes"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
"text/template"
|
|
)
|
|
|
|
func TestRFC1034Label(t *testing.T) {
|
|
tests := []struct {
|
|
in, want string
|
|
}{
|
|
{"a", "a"},
|
|
{"123", "-23"},
|
|
{"a.b.c", "a-b-c"},
|
|
{"a-b", "a-b"},
|
|
{"a:b", "a-b"},
|
|
{"a?b", "a-b"},
|
|
{"αβγ", "---"},
|
|
{"💩", "--"},
|
|
{"My App", "My-App"},
|
|
{"...", ""},
|
|
{".-.", "--"},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
if got := rfc1034Label(tc.in); got != tc.want {
|
|
t.Errorf("rfc1034Label(%q) = %q, want %q", tc.in, got, tc.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestAndroidPkgName(t *testing.T) {
|
|
tests := []struct {
|
|
in, want string
|
|
}{
|
|
{"a", "a"},
|
|
{"a123", "a123"},
|
|
{"a.b.c", "a_b_c"},
|
|
{"a-b", "a_b"},
|
|
{"a:b", "a_b"},
|
|
{"a?b", "a_b"},
|
|
{"αβγ", "go___"},
|
|
{"💩", "go_"},
|
|
{"My App", "My_App"},
|
|
{"...", "go___"},
|
|
{".-.", "go___"},
|
|
{"abstract", "abstract_"},
|
|
{"Abstract", "Abstract"},
|
|
{"12345", "go12345"},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
if got := androidPkgName(tc.in); got != tc.want {
|
|
t.Errorf("len %d", len(tc.in))
|
|
t.Errorf("androidPkgName(%q) = %q, want %q", tc.in, got, tc.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestAndroidBuild(t *testing.T) {
|
|
buf := new(bytes.Buffer)
|
|
defer func() {
|
|
xout = os.Stderr
|
|
buildN = false
|
|
buildX = false
|
|
}()
|
|
xout = buf
|
|
buildN = true
|
|
buildX = true
|
|
buildO = "basic.apk"
|
|
buildTarget = "android/arm"
|
|
gopath = filepath.ToSlash(filepath.SplitList(goEnv("GOPATH"))[0])
|
|
if goos == "windows" {
|
|
os.Setenv("HOMEDRIVE", "C:")
|
|
}
|
|
cmdBuild.flag.Parse([]string{"golang.org/x/mobile/example/basic"})
|
|
oldTags := ctx.BuildTags
|
|
ctx.BuildTags = []string{"tag1"}
|
|
defer func() {
|
|
ctx.BuildTags = oldTags
|
|
}()
|
|
err := runBuild(cmdBuild)
|
|
if err != nil {
|
|
t.Log(buf.String())
|
|
t.Fatal(err)
|
|
}
|
|
|
|
diff, err := diffOutput(buf.String(), androidBuildTmpl)
|
|
if err != nil {
|
|
t.Fatalf("computing diff failed: %v", err)
|
|
}
|
|
if diff != "" {
|
|
t.Errorf("unexpected output:\n%s", diff)
|
|
}
|
|
}
|
|
|
|
var androidBuildTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPATH}}/pkg/gomobile
|
|
WORK=$WORK
|
|
mkdir -p $WORK/lib/armeabi-v7a
|
|
GOOS=android GOARCH=arm CC=$GOMOBILE/ndk-toolchains/arm/bin/arm-linux-androideabi-clang CXX=$GOMOBILE/ndk-toolchains/arm/bin/arm-linux-androideabi-clang++ CGO_ENABLED=1 GOARM=7 go build -tags tag1 -x -buildmode=c-shared -o $WORK/lib/armeabi-v7a/libbasic.so golang.org/x/mobile/example/basic
|
|
`))
|
|
|
|
func TestParseBuildTargetFlag(t *testing.T) {
|
|
androidArchs := "arm,arm64,386,amd64"
|
|
iosArchs := "arm,arm64,amd64"
|
|
|
|
tests := []struct {
|
|
in string
|
|
wantErr bool
|
|
wantOS string
|
|
wantArchs string
|
|
}{
|
|
{"android", false, "android", androidArchs},
|
|
{"android,android/arm", false, "android", androidArchs},
|
|
{"android/arm", false, "android", "arm"},
|
|
|
|
{"ios", false, "darwin", iosArchs},
|
|
{"ios,ios/arm", false, "darwin", iosArchs},
|
|
{"ios/arm", false, "darwin", "arm"},
|
|
{"ios/amd64", false, "darwin", "amd64"},
|
|
|
|
{"", true, "", ""},
|
|
{"linux", true, "", ""},
|
|
{"android/x86", true, "", ""},
|
|
{"android/arm5", true, "", ""},
|
|
{"ios/mips", true, "", ""},
|
|
{"android,ios", true, "", ""},
|
|
{"ios,android", true, "", ""},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
gotOS, gotArchs, err := parseBuildTarget(tc.in)
|
|
if tc.wantErr {
|
|
if err == nil {
|
|
t.Errorf("-target=%q; want error, got (%q, %q, nil)", tc.in, gotOS, gotArchs)
|
|
}
|
|
continue
|
|
}
|
|
if err != nil || gotOS != tc.wantOS || strings.Join(gotArchs, ",") != tc.wantArchs {
|
|
t.Errorf("-target=%q; want (%v, [%v], nil), got (%q, %q, %v)",
|
|
tc.in, tc.wantOS, tc.wantArchs, gotOS, gotArchs, err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestRegexImportGolangXPackage(t *testing.T) {
|
|
tests := []struct {
|
|
in string
|
|
want string
|
|
wantLen int
|
|
}{
|
|
{"ffffffff t golang.org/x/mobile", "golang.org/x/mobile", 2},
|
|
{"ffffffff t github.com/example/repo/vendor/golang.org/x/mobile", "golang.org/x/mobile", 2},
|
|
{"ffffffff t github.com/example/golang.org/x/mobile", "", 0},
|
|
{"ffffffff t github.com/example/repo", "", 0},
|
|
{"ffffffff t github.com/example/repo/vendor", "", 0},
|
|
}
|
|
|
|
for _, tc := range tests {
|
|
res := nmRE.FindStringSubmatch(tc.in)
|
|
if len(res) != tc.wantLen {
|
|
t.Errorf("nmRE returned unexpected result for %q: want len(res) = %d, got %d",
|
|
tc.in, tc.wantLen, len(res))
|
|
continue
|
|
}
|
|
if tc.wantLen == 0 {
|
|
continue
|
|
}
|
|
if res[1] != tc.want {
|
|
t.Errorf("nmRE returned unexpected result. want (%v), got (%v)",
|
|
tc.want, res[1])
|
|
}
|
|
}
|
|
}
|