github.com/acrespo/mobile@v0.0.0-20190107162257-dc0771356504/cmd/gomobile/init_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 "runtime" 12 "strings" 13 "testing" 14 "text/template" 15 ) 16 17 var gopath string 18 19 func TestInit(t *testing.T) { 20 buf := new(bytes.Buffer) 21 gopathorig := os.Getenv("GOPATH") 22 defer func() { 23 xout = os.Stderr 24 buildN = false 25 buildX = false 26 os.Setenv("GOPATH", gopathorig) 27 }() 28 xout = buf 29 buildN = true 30 buildX = true 31 32 // Test that first GOPATH element is chosen correctly. 33 gopath = "/GOPATH1" 34 paths := []string{gopath, "/path2", "/path3"} 35 if goos == "windows" { 36 gopath = filepath.ToSlash(`C:\GOPATH1`) 37 paths = []string{gopath, `C:\PATH2`, `C:\PATH3`} 38 } 39 os.Setenv("GOPATH", strings.Join(paths, string(os.PathListSeparator))) 40 os.Setenv("GOROOT_BOOTSTRAP", "go1.4") 41 if goos == "windows" { 42 os.Setenv("HOMEDRIVE", "C:") 43 } 44 45 err := runInit(cmdInit) 46 if err != nil { 47 t.Log(buf.String()) 48 t.Fatal(err) 49 } 50 51 diff, err := diffOutput(buf.String(), initTmpl) 52 if err != nil { 53 t.Fatalf("computing diff failed: %v", err) 54 } 55 if diff != "" { 56 t.Errorf("unexpected output:\n%s", diff) 57 } 58 } 59 60 func diffOutput(got string, wantTmpl *template.Template) (string, error) { 61 got = filepath.ToSlash(got) 62 63 wantBuf := new(bytes.Buffer) 64 data := defaultOutputData() 65 if err := wantTmpl.Execute(wantBuf, data); err != nil { 66 return "", err 67 } 68 want := wantBuf.String() 69 if got != want { 70 return diff(got, want) 71 } 72 return "", nil 73 } 74 75 type outputData struct { 76 GOOS string 77 GOARCH string 78 GOPATH string 79 NDKARCH string 80 EXE string // .extension for executables. (ex. ".exe" for windows) 81 Xproj string 82 Xcontents string 83 Xinfo infoplistTmplData 84 } 85 86 func defaultOutputData() outputData { 87 data := outputData{ 88 GOOS: goos, 89 GOARCH: goarch, 90 GOPATH: gopath, 91 NDKARCH: ndkarch(), 92 Xproj: projPbxproj, 93 Xcontents: contentsJSON, 94 Xinfo: infoplistTmplData{BundleID: "org.golang.todo.basic", Name: "Basic"}, 95 } 96 if goos == "windows" { 97 data.EXE = ".exe" 98 } 99 return data 100 } 101 102 func ndkarch() string { 103 switch runtime.GOARCH { 104 case "amd64": 105 return "x86_64" 106 case "386": 107 return "x86" 108 default: 109 return runtime.GOARCH 110 } 111 } 112 113 var initTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPATH}}/pkg/gomobile 114 rm -r -f "$GOMOBILE" 115 mkdir -p $GOMOBILE 116 WORK={{.GOPATH}}/pkg/gomobile/work 117 go install -x golang.org/x/mobile/cmd/gobind 118 PWD=$NDK_PATH $NDK_PATH/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/python2.7 build/tools/make_standalone_toolchain.py --arch=arm --api=16 --install-dir=$GOMOBILE/ndk-toolchains/arm 119 PWD=$NDK_PATH $NDK_PATH/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/python2.7 build/tools/make_standalone_toolchain.py --arch=arm64 --api=21 --install-dir=$GOMOBILE/ndk-toolchains/arm64 120 PWD=$NDK_PATH $NDK_PATH/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/python2.7 build/tools/make_standalone_toolchain.py --arch=x86 --api=16 --install-dir=$GOMOBILE/ndk-toolchains/x86 121 PWD=$NDK_PATH $NDK_PATH/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin/python2.7 build/tools/make_standalone_toolchain.py --arch=x86_64 --api=21 --install-dir=$GOMOBILE/ndk-toolchains/x86_64 122 cp $OPENAL_PATH/include/AL/al.h $GOMOBILE/include/AL/al.h 123 mkdir -p $GOMOBILE/include/AL 124 cp $OPENAL_PATH/include/AL/alc.h $GOMOBILE/include/AL/alc.h 125 mkdir -p $GOMOBILE/include/AL 126 mkdir -p $WORK/build/armeabi 127 PWD=$WORK/build/armeabi cmake $OPENAL_PATH -DCMAKE_TOOLCHAIN_FILE=$OPENAL_PATH/XCompile-Android.txt -DHOST=arm-linux-androideabi 128 PWD=$WORK/build/armeabi $GOMOBILE/ndk-toolchains/arm/bin/make 129 cp $WORK/build/armeabi/libopenal.so $GOMOBILE/lib/armeabi-v7a/libopenal.so 130 mkdir -p $GOMOBILE/lib/armeabi-v7a 131 mkdir -p $WORK/build/arm64 132 PWD=$WORK/build/arm64 cmake $OPENAL_PATH -DCMAKE_TOOLCHAIN_FILE=$OPENAL_PATH/XCompile-Android.txt -DHOST=aarch64-linux-android 133 PWD=$WORK/build/arm64 $GOMOBILE/ndk-toolchains/arm64/bin/make 134 cp $WORK/build/arm64/libopenal.so $GOMOBILE/lib/arm64-v8a/libopenal.so 135 mkdir -p $GOMOBILE/lib/arm64-v8a 136 mkdir -p $WORK/build/x86 137 PWD=$WORK/build/x86 cmake $OPENAL_PATH -DCMAKE_TOOLCHAIN_FILE=$OPENAL_PATH/XCompile-Android.txt -DHOST=i686-linux-android 138 PWD=$WORK/build/x86 $GOMOBILE/ndk-toolchains/x86/bin/make 139 cp $WORK/build/x86/libopenal.so $GOMOBILE/lib/x86/libopenal.so 140 mkdir -p $GOMOBILE/lib/x86 141 mkdir -p $WORK/build/x86_64 142 PWD=$WORK/build/x86_64 cmake $OPENAL_PATH -DCMAKE_TOOLCHAIN_FILE=$OPENAL_PATH/XCompile-Android.txt -DHOST=x86_64-linux-android 143 PWD=$WORK/build/x86_64 $GOMOBILE/ndk-toolchains/x86_64/bin/make 144 cp $WORK/build/x86_64/libopenal.so $GOMOBILE/lib/x86_64/libopenal.so 145 mkdir -p $GOMOBILE/lib/x86_64 146 rm -r -f "$WORK" 147 `))