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  `))