github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/mobile/cmd/gomobile/bind_test.go (about)

     1  // Copyright 2015 The Go Authors.  All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package main
     6  
     7  import (
     8  	"bytes"
     9  	"os"
    10  	"path/filepath"
    11  	"strings"
    12  	"testing"
    13  	"text/template"
    14  )
    15  
    16  // TODO(crawshaw): TestBindIOS
    17  
    18  func TestBindAndroid(t *testing.T) {
    19  	androidHome := os.Getenv("ANDROID_HOME")
    20  	if androidHome == "" {
    21  		t.Skip("ANDROID_HOME not found, skipping bind")
    22  	}
    23  	platform, err := androidAPIPath()
    24  	if err != nil {
    25  		t.Skip("No android API platform found in $ANDROID_HOME, skipping bind")
    26  	}
    27  	platform = strings.Replace(platform, androidHome, "$ANDROID_HOME", -1)
    28  
    29  	defer func() {
    30  		xout = os.Stderr
    31  		buildN = false
    32  		buildX = false
    33  		buildO = ""
    34  		buildTarget = ""
    35  	}()
    36  	buildN = true
    37  	buildX = true
    38  	buildO = "asset.aar"
    39  	buildTarget = "android"
    40  
    41  	tests := []struct {
    42  		javaPkg    string
    43  		wantGobind string
    44  		wantPkgDir string
    45  	}{
    46  		{
    47  			wantGobind: "gobind -lang=java",
    48  			wantPkgDir: "go/asset",
    49  		},
    50  		{
    51  			javaPkg:    "com.example.foo",
    52  			wantGobind: "gobind -lang=java -javapkg=com.example.foo",
    53  			wantPkgDir: "com/example/foo",
    54  		},
    55  	}
    56  	for _, tc := range tests {
    57  		bindJavaPkg = tc.javaPkg
    58  
    59  		buf := new(bytes.Buffer)
    60  		xout = buf
    61  		gopath = filepath.SplitList(os.Getenv("GOPATH"))[0]
    62  		if goos == "windows" {
    63  			os.Setenv("HOMEDRIVE", "C:")
    64  		}
    65  		cmdBind.flag.Parse([]string{"golang.org/x/mobile/asset"})
    66  		err := runBind(cmdBind)
    67  		if err != nil {
    68  			t.Log(buf.String())
    69  			t.Fatal(err)
    70  		}
    71  		got := filepath.ToSlash(buf.String())
    72  
    73  		data := struct {
    74  			outputData
    75  			AndroidPlatform string
    76  			GobindJavaCmd   string
    77  			JavaPkgDir      string
    78  		}{
    79  			outputData:      defaultOutputData(),
    80  			AndroidPlatform: platform,
    81  			GobindJavaCmd:   tc.wantGobind,
    82  			JavaPkgDir:      tc.wantPkgDir,
    83  		}
    84  
    85  		wantBuf := new(bytes.Buffer)
    86  		if err := bindAndroidTmpl.Execute(wantBuf, data); err != nil {
    87  			t.Errorf("%+v: computing diff failed: %v", tc, err)
    88  			continue
    89  		}
    90  
    91  		diff, err := diff(got, wantBuf.String())
    92  		if err != nil {
    93  			t.Errorf("%+v: computing diff failed: %v", tc, err)
    94  			continue
    95  		}
    96  		if diff != "" {
    97  			t.Errorf("%+v: unexpected output:\n%s", tc, diff)
    98  		}
    99  	}
   100  }
   101  
   102  var bindAndroidTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPATH}}/pkg/gomobile
   103  WORK=$WORK
   104  GOOS=android GOARCH=arm CC=$GOMOBILE/android-ndk-r10e/arm/bin/arm-linux-androideabi-gcc CXX=$GOMOBILE/android-ndk-r10e/arm/bin/arm-linux-androideabi-g++ CGO_ENABLED=1 GOARM=7 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -tags="" -x golang.org/x/mobile/asset
   105  rm -r -f "$WORK/fakegopath"
   106  mkdir -p $WORK/fakegopath/pkg
   107  cp $GOMOBILE/pkg_android_arm/golang.org/x/mobile/asset.a $WORK/fakegopath/pkg/android_arm/golang.org/x/mobile/asset.a
   108  mkdir -p $WORK/fakegopath/pkg/android_arm/golang.org/x/mobile
   109  mkdir -p $WORK/go_asset
   110  gobind -lang=go -outdir=$WORK/go_asset golang.org/x/mobile/asset
   111  mkdir -p $WORK/androidlib
   112  GOOS=android GOARCH=arm CC=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-gcc{{.EXE}} CXX=$GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-g++{{.EXE}} CGO_ENABLED=1 GOARM=7 go build -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -tags="" -x -buildmode=c-shared -o=$WORK/android/src/main/jniLibs/armeabi-v7a/libgojni.so $WORK/androidlib/main.go
   113  mkdir -p $WORK/android/src/main/java/{{.JavaPkgDir}}
   114  {{.GobindJavaCmd}} -outdir=$WORK/android/src/main/java/{{.JavaPkgDir}} golang.org/x/mobile/asset
   115  mkdir -p $WORK/android/src/main/java/go
   116  rm $WORK/android/src/main/java/go/Seq.java
   117  ln -s $GOPATH/src/golang.org/x/mobile/bind/java/Seq.java $WORK/android/src/main/java/go/Seq.java
   118  PWD=$WORK/android/src/main/java javac -d $WORK/javac-output -source 1.7 -target 1.7 -bootclasspath {{.AndroidPlatform}}/android.jar *.java
   119  jar c -C $WORK/javac-output .
   120  `))