github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/mobile/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 "strconv" 13 "strings" 14 "testing" 15 "text/template" 16 ) 17 18 var gopath string 19 20 func TestInit(t *testing.T) { 21 buf := new(bytes.Buffer) 22 gopathorig := os.Getenv("GOPATH") 23 defer func() { 24 xout = os.Stderr 25 buildN = false 26 buildX = false 27 initU = false 28 os.Setenv("GOPATH", gopathorig) 29 }() 30 xout = buf 31 buildN = true 32 buildX = true 33 initU = true 34 35 // Test that first GOPATH element is chosen correctly. 36 gopath = "/GOPATH1" 37 paths := []string{gopath, "/path2", "/path3"} 38 if goos == "windows" { 39 gopath = filepath.ToSlash(`C:\GOPATH1`) 40 paths = []string{gopath, `C:\PATH2`, `C:\PATH3`} 41 } 42 os.Setenv("GOPATH", strings.Join(paths, string(os.PathListSeparator))) 43 os.Setenv("GOROOT_BOOTSTRAP", "go1.4") 44 if goos == "windows" { 45 os.Setenv("HOMEDRIVE", "C:") 46 } 47 48 // TODO(hyangah): test with go1_6. 49 err := runInit(cmdInit) 50 if err != nil { 51 t.Log(buf.String()) 52 t.Fatal(err) 53 } 54 55 diff, err := diffOutput(buf.String(), initTmpl) 56 if err != nil { 57 t.Fatalf("computing diff failed: %v", err) 58 } 59 if diff != "" { 60 t.Errorf("unexpected output:\n%s", diff) 61 } 62 } 63 64 func diffOutput(got string, wantTmpl *template.Template) (string, error) { 65 got = filepath.ToSlash(got) 66 67 wantBuf := new(bytes.Buffer) 68 data := defaultOutputData() 69 if err := wantTmpl.Execute(wantBuf, data); err != nil { 70 return "", err 71 } 72 want := wantBuf.String() 73 if got != want { 74 return diff(got, want) 75 } 76 return "", nil 77 } 78 79 type outputData struct { 80 NDK string 81 GOOS string 82 GOARCH string 83 GOPATH string 84 NDKARCH string 85 EXE string // .extension for executables. (ex. ".exe" for windows) 86 Xproj string 87 Xcontents string 88 Xinfo infoplistTmplData 89 NumCPU string 90 } 91 92 func defaultOutputData() outputData { 93 data := outputData{ 94 NDK: ndkVersion, 95 GOOS: goos, 96 GOARCH: goarch, 97 GOPATH: gopath, 98 NDKARCH: ndkarch, 99 Xproj: projPbxproj, 100 Xcontents: contentsJSON, 101 Xinfo: infoplistTmplData{BundleID: "org.golang.todo.basic", Name: "Basic"}, 102 NumCPU: strconv.Itoa(runtime.NumCPU()), 103 } 104 if goos == "windows" { 105 data.EXE = ".exe" 106 } 107 return data 108 } 109 110 var initTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPATH}}/pkg/gomobile 111 mkdir -p $GOMOBILE/android-{{.NDK}} 112 WORK={{.GOPATH}}/pkg/gomobile/work 113 mkdir -p $GOMOBILE/dl 114 curl -o$GOMOBILE/dl/gomobile-{{.NDK}}-{{.GOOS}}-{{.NDKARCH}}.tar.gz https://dl.google.com/go/mobile/gomobile-{{.NDK}}-{{.GOOS}}-{{.NDKARCH}}.tar.gz 115 tar xfz $GOMOBILE/dl/gomobile-{{.NDK}}-{{.GOOS}}-{{.NDKARCH}}.tar.gz 116 mkdir -p $GOMOBILE/android-{{.NDK}}/arm/sysroot 117 mv $WORK/android-{{.NDK}}/platforms/android-15/arch-arm/usr $GOMOBILE/android-{{.NDK}}/arm/sysroot/usr 118 mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.8/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin $GOMOBILE/android-{{.NDK}}/arm/bin 119 mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.8/prebuilt/{{.GOOS}}-{{.NDKARCH}}/lib $GOMOBILE/android-{{.NDK}}/arm/lib 120 mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.8/prebuilt/{{.GOOS}}-{{.NDKARCH}}/libexec $GOMOBILE/android-{{.NDK}}/arm/libexec 121 mkdir -p $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin 122 ln -s $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-ld{{.EXE}} $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin/ld{{.EXE}} 123 ln -s $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-as{{.EXE}} $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin/as{{.EXE}} 124 ln -s $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-gcc{{.EXE}} $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin/gcc{{.EXE}} 125 ln -s $GOMOBILE/android-{{.NDK}}/arm/bin/arm-linux-androideabi-g++{{.EXE}} $GOMOBILE/android-{{.NDK}}/arm/arm-linux-androideabi/bin/g++{{.EXE}} 126 mkdir -p $GOMOBILE/dl 127 curl -o$GOMOBILE/dl/gomobile-openal-soft-1.16.0.1.tar.gz https://dl.google.com/go/mobile/gomobile-openal-soft-1.16.0.1.tar.gz 128 tar xfz $GOMOBILE/dl/gomobile-openal-soft-1.16.0.1.tar.gz 129 cp -r $WORK/openal/include/AL $GOMOBILE/android-{{.NDK}}/arm/sysroot/usr/include/AL 130 mkdir -p $GOMOBILE/android-{{.NDK}}/openal 131 mv $WORK/openal/lib $GOMOBILE/android-{{.NDK}}/openal/lib{{if eq .GOOS "darwin"}} 132 go install -p={{.NumCPU}} -x golang.org/x/mobile/gl 133 go install -p={{.NumCPU}} -x golang.org/x/mobile/app 134 go install -p={{.NumCPU}} -x golang.org/x/mobile/exp/app/debug{{end}} 135 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 install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_android_arm -x std 136 {{if eq .GOOS "darwin"}}GOOS=darwin GOARCH=arm GOARM=7 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -arch armv7 CGO_LDFLAGS=-isysroot=iphoneos -arch armv7 CGO_ENABLED=1 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_darwin_arm -x std 137 GOOS=darwin GOARCH=arm64 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -arch arm64 CGO_LDFLAGS=-isysroot=iphoneos -arch arm64 CGO_ENABLED=1 go install -p={{.NumCPU}} -pkgdir=$GOMOBILE/pkg_darwin_arm64 -x std 138 GOOS=darwin GOARCH=amd64 CC=clang-iphonesimulator CXX=clang-iphonesimulator CGO_CFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_LDFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_ENABLED=1 go install -p={{.NumCPU}} -tags=ios -pkgdir=$GOMOBILE/pkg_darwin_amd64 -x std 139 {{end}}go version > $GOMOBILE/version 140 rm -r -f "$WORK" 141 `))