// Copyright 2015 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package main import ( "bytes" "os" "testing" "text/template" ) func TestInit(t *testing.T) { buf := new(bytes.Buffer) gopath := os.Getenv("GOPATH") defer func() { xout = os.Stderr buildN = false buildX = false os.Setenv("GOPATH", gopath) }() xout = buf buildN = true buildX = true // Test that first GOPATH element is chosen correctly. os.Setenv("GOPATH", "GOPATH1:/path2:/path3") err := runInit(cmdInit) if err != nil { t.Log(buf.String()) t.Fatal(err) } diff, err := diffOutput(buf.String(), initTmpl) if err != nil { t.Fatalf("computing diff failed: %v", err) } if diff != "" { t.Errorf("unexpected output:\n%s", diff) } } func diffOutput(got string, wantTmpl *template.Template) (string, error) { wantBuf := new(bytes.Buffer) data := outputData{ndkVersion, goos, goarch, ndkarch} if err := wantTmpl.Execute(wantBuf, data); err != nil { return "", err } want := wantBuf.String() if got != want { return diff(got, want) } return "", nil } type outputData struct { NDK string GOOS string GOARCH string NDKARCH string } var initTmpl = template.Must(template.New("output").Parse(`NDKCCPATH=GOPATH1/pkg/gomobile/android-{{.NDK}} rm -r -f "$NDKCCPATH" mkdir -p $NDKCCPATH WORK=GOPATH1/pkg/gomobile/android-{{.NDK}}/work mkdir -p $WORK/go/pkg cp -a $GOROOT/lib $WORK/go/lib cp -a $GOROOT/src $WORK/go/src ln -s $GOROOT/.git $WORK/go/.git curl -o$WORK/gomobile-{{.NDK}}-{{.GOOS}}-{{.NDKARCH}}.tar.gz https://dl.google.com/go/mobile/gomobile-{{.NDK}}-{{.GOOS}}-{{.NDKARCH}}.tar.gz tar xfz gomobile-{{.NDK}}-{{.GOOS}}-{{.NDKARCH}}.tar.gz mkdir -p $NDKCCPATH/arm/sysroot/usr mv $WORK/android-{{.NDK}}/platforms/android-15/arch-arm/usr/include $NDKCCPATH/arm/sysroot/usr/include mv $WORK/android-{{.NDK}}/platforms/android-15/arch-arm/usr/lib $NDKCCPATH/arm/sysroot/usr/lib mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.8/prebuilt/{{.GOOS}}-{{.NDKARCH}}/bin $NDKCCPATH/arm/bin mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.8/prebuilt/{{.GOOS}}-{{.NDKARCH}}/lib $NDKCCPATH/arm/lib mv $WORK/android-{{.NDK}}/toolchains/arm-linux-androideabi-4.8/prebuilt/{{.GOOS}}-{{.NDKARCH}}/libexec $NDKCCPATH/arm/libexec mkdir -p $NDKCCPATH/arm/arm-linux-androideabi/bin ln -s $NDKCCPATH/arm/bin/arm-linux-androideabi-ld $NDKCCPATH/arm/arm-linux-androideabi/bin/ld ln -s $NDKCCPATH/arm/bin/arm-linux-androideabi-as $NDKCCPATH/arm/arm-linux-androideabi/bin/as ln -s $NDKCCPATH/arm/bin/arm-linux-androideabi-gcc $NDKCCPATH/arm/arm-linux-androideabi/bin/gcc ln -s $NDKCCPATH/arm/bin/arm-linux-androideabi-g++ $NDKCCPATH/arm/arm-linux-androideabi/bin/g++ curl -o$WORK/gomobile-openal-soft-1.16.0.1.tar.gz https://dl.google.com/go/mobile/gomobile-openal-soft-1.16.0.1.tar.gz tar xfz gomobile-openal-soft-1.16.0.1.tar.gz mv $WORK/openal/include/AL $NDKCCPATH/arm/sysroot/usr/include/AL mkdir -p $NDKCCPATH/openal mv $WORK/openal/lib $NDKCCPATH/openal/lib PATH=$PATH GOOS=android GOARCH=arm GOARM=7 CGO_ENABLED=1 CC_FOR_TARGET=$NDKCCPATH/arm/bin/arm-linux-androideabi-gcc CXX_FOR_TARGET=$NDKCCPATH/arm/bin/arm-linux-androideabi-g++ TMPDIR=$WORK HOME=$HOME $WORK/go/src/make.bash --no-clean mv $WORK/go/pkg/tool/{{.GOOS}}_{{.GOARCH}}/5l $NDKCCPATH/arm/bin/5l mv $WORK/go/pkg/tool/{{.GOOS}}_{{.GOARCH}}/5g $NDKCCPATH/arm/bin/5g mv $WORK/go/pkg/tool/{{.GOOS}}_{{.GOARCH}}/asm $NDKCCPATH/arm/bin/asm mv $WORK/go/pkg/tool/{{.GOOS}}_{{.GOARCH}}/cgo $NDKCCPATH/arm/bin/cgo mv $WORK/go/pkg/tool/{{.GOOS}}_{{.GOARCH}}/nm $NDKCCPATH/arm/bin/nm mv $WORK/go/pkg/tool/linux_amd64/old5a $NDKCCPATH/arm/bin/old5a mv $WORK/go/pkg/tool/{{.GOOS}}_{{.GOARCH}}/pack $NDKCCPATH/arm/bin/pack mv $WORK/go/pkg/tool/{{.GOOS}}_{{.GOARCH}}/link $NDKCCPATH/arm/bin/link go build -o $NDKCCPATH/arm/bin/toolexec $WORK/toolexec.go rm -r -f "$GOROOT/pkg/android_arm" mv $WORK/go/pkg/android_arm $GOROOT/pkg/android_arm go version > GOPATH1/pkg/gomobile/version rm -r -f "$WORK" `))