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