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