@@ -6,7 +6,9 @@ package main
6
6
7
7
import (
8
8
"bytes"
9
+ "io/ioutil"
9
10
"os"
11
+ "os/exec"
10
12
"path/filepath"
11
13
"runtime"
12
14
"strings"
@@ -109,7 +111,7 @@ func TestAndroidBuild(t *testing.T) {
109
111
var androidBuildTmpl = template .Must (template .New ("output" ).Parse (`GOMOBILE={{.GOPATH}}/pkg/gomobile
110
112
WORK=$WORK
111
113
mkdir -p $WORK/lib/armeabi-v7a
112
- GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang++ CGO_ENABLED=1 GOARM=7 GO111MODULE=off go build -tags tag1 -x -buildmode=c-shared -o $WORK/lib/armeabi-v7a/libbasic.so golang.org/x/mobile/example/basic
114
+ GOOS=android GOARCH=arm CC=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-clang CXX=$NDK_PATH/toolchains/llvm/prebuilt/{{.NDKARCH}}/bin/armv7a-linux-androideabi16-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
113
115
` ))
114
116
115
117
func TestParseBuildTargetFlag (t * testing.T ) {
@@ -183,3 +185,87 @@ func TestRegexImportGolangXPackage(t *testing.T) {
183
185
}
184
186
}
185
187
}
188
+
189
+ func TestBuildWithGoModules (t * testing.T ) {
190
+ if runtime .GOOS == "android" {
191
+ t .Skipf ("gomobile are not available on %s" , runtime .GOOS )
192
+ }
193
+
194
+ dir , err := ioutil .TempDir ("" , "gomobile-test" )
195
+ if err != nil {
196
+ t .Fatal (err )
197
+ }
198
+ defer os .RemoveAll (dir )
199
+
200
+ if out , err := exec .Command ("go" , "build" , "-o=" + dir , "golang.org/x/mobile/cmd/gomobile" ).CombinedOutput (); err != nil {
201
+ t .Fatalf ("%v: %s" , err , string (out ))
202
+ }
203
+ path := dir
204
+ if p := os .Getenv ("PATH" ); p != "" {
205
+ path += string (filepath .ListSeparator ) + p
206
+ }
207
+
208
+ for _ , target := range []string {"android" , "ios" } {
209
+ t .Run (target , func (t * testing.T ) {
210
+ if target == "ios" {
211
+ t .Skip ("gomobile-build doesn't work for iOS. see https://golang.org/issue/32963" )
212
+ }
213
+
214
+ switch target {
215
+ case "android" :
216
+ androidHome := os .Getenv ("ANDROID_HOME" )
217
+ if androidHome == "" {
218
+ t .Skip ("ANDROID_HOME not found, skipping bind" )
219
+ }
220
+ if _ , err := androidAPIPath (); err != nil {
221
+ t .Skip ("No android API platform found in $ANDROID_HOME, skipping bind" )
222
+ }
223
+ case "ios" :
224
+ if ! xcodeAvailable () {
225
+ t .Skip ("Xcode is missing" )
226
+ }
227
+ }
228
+
229
+ var out string
230
+ switch target {
231
+ case "android" :
232
+ out = filepath .Join (dir , "basic.apk" )
233
+ case "ios" :
234
+ out = filepath .Join (dir , "Basic.app" )
235
+ }
236
+
237
+ tests := []struct {
238
+ Name string
239
+ Path string
240
+ Dir string
241
+ }{
242
+ {
243
+ Name : "Absolute Path" ,
244
+ Path : "golang.org/x/mobile/example/basic" ,
245
+ },
246
+ {
247
+ Name : "Relative Path" ,
248
+ Path : "./example/basic" ,
249
+ Dir : filepath .Join (".." , ".." ),
250
+ },
251
+ }
252
+
253
+ for _ , tc := range tests {
254
+ tc := tc
255
+ t .Run (tc .Name , func (t * testing.T ) {
256
+ args := []string {"build" , "-target=" + target , "-o=" + out }
257
+ if target == "ios" {
258
+ args = append (args , "-bundleid=org.golang.gomobiletest" )
259
+ }
260
+ args = append (args , tc .Path )
261
+ cmd := exec .Command (filepath .Join (dir , "gomobile" ), args ... )
262
+ cmd .Env = append (os .Environ (), "PATH=" + path , "GO111MODULE=on" )
263
+ cmd .Dir = tc .Dir
264
+ if out , err := cmd .CombinedOutput (); err != nil {
265
+ t .Errorf ("gomobile build failed: %v\n %s" , err , string (out ))
266
+ }
267
+ })
268
+ }
269
+ })
270
+ }
271
+ }
0 commit comments