| #!/bin/bash |
| # Copyright 2012 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. |
| |
| set -e |
| go build -o testgo |
| |
| ok=true |
| |
| unset GOPATH |
| unset GOBIN |
| |
| # Test that error messages have file:line information |
| # at beginning of line. |
| for i in testdata/errmsg/*.go |
| do |
| # TODO: |cat should not be necessary here but is. |
| ./testgo test $i 2>&1 | cat >err.out || true |
| if ! grep -q "^$i:" err.out; then |
| echo "$i: missing file:line in error message" |
| cat err.out |
| ok=false |
| fi |
| done |
| |
| # Test local (./) imports. |
| testlocal() { |
| local="$1" |
| ./testgo build -o hello "testdata/$local/easy.go" |
| ./hello >hello.out |
| if ! grep -q '^easysub\.Hello' hello.out; then |
| echo "testdata/$local/easy.go did not generate expected output" |
| cat hello.out |
| ok=false |
| fi |
| |
| ./testgo build -o hello "testdata/$local/easysub/main.go" |
| ./hello >hello.out |
| if ! grep -q '^easysub\.Hello' hello.out; then |
| echo "testdata/$local/easysub/main.go did not generate expected output" |
| cat hello.out |
| ok=false |
| fi |
| |
| ./testgo build -o hello "testdata/$local/hard.go" |
| ./hello >hello.out |
| if ! grep -q '^sub\.Hello' hello.out || ! grep -q '^subsub\.Hello' hello.out ; then |
| echo "testdata/$local/hard.go did not generate expected output" |
| cat hello.out |
| ok=false |
| fi |
| |
| rm -f err.out hello.out hello |
| |
| # Test that go install x.go fails. |
| if ./testgo install "testdata/$local/easy.go" >/dev/null 2>&1; then |
| echo "go install testdata/$local/easy.go succeeded" |
| ok=false |
| fi |
| } |
| |
| # Test local imports |
| testlocal local |
| |
| # Test local imports again, with bad characters in the directory name. |
| bad='#$%:, &()*;<=>?\^{}' |
| rm -rf "testdata/$bad" |
| cp -R testdata/local "testdata/$bad" |
| testlocal "$bad" |
| rm -rf "testdata/$bad" |
| |
| # Test tests with relative imports. |
| if ! ./testgo test ./testdata/testimport; then |
| echo "go test ./testdata/testimport failed" |
| ok=false |
| fi |
| |
| # Test tests with relative imports in packages synthesized |
| # from Go files named on the command line. |
| if ! ./testgo test ./testdata/testimport/*.go; then |
| echo "go test ./testdata/testimport/*.go failed" |
| ok=false |
| fi |
| |
| # Test that without $GOBIN set, binaries get installed |
| # into the GOPATH bin directory. |
| rm -rf testdata/bin |
| if ! GOPATH=$(pwd)/testdata ./testgo install go-cmd-test; then |
| echo "go install go-cmd-test failed" |
| ok=false |
| elif ! test -x testdata/bin/go-cmd-test; then |
| echo "go install go-cmd-test did not write to testdata/bin/go-cmd-test" |
| ok=false |
| fi |
| |
| # And with $GOBIN set, binaries get installed to $GOBIN. |
| if ! GOBIN=$(pwd)/testdata/bin1 GOPATH=$(pwd)/testdata ./testgo install go-cmd-test; then |
| echo "go install go-cmd-test failed" |
| ok=false |
| elif ! test -x testdata/bin1/go-cmd-test; then |
| echo "go install go-cmd-test did not write to testdata/bin1/go-cmd-test" |
| ok=false |
| fi |
| |
| # Without $GOBIN set, installing a program outside $GOPATH should fail |
| # (there is nowhere to install it). |
| if ./testgo install testdata/src/go-cmd-test/helloworld.go; then |
| echo "go install testdata/src/go-cmd-test/helloworld.go should have failed, did not" |
| ok=false |
| fi |
| |
| # With $GOBIN set, should install there. |
| if ! GOBIN=$(pwd)/testdata/bin1 ./testgo install testdata/src/go-cmd-test/helloworld.go; then |
| echo "go install testdata/src/go-cmd-test/helloworld.go failed" |
| ok=false |
| elif ! test -x testdata/bin1/helloworld; then |
| echo "go install testdata/src/go-cmd-test/helloworld.go did not write testdata/bin1/helloworld" |
| ok=false |
| fi |
| |
| if $ok; then |
| echo PASS |
| else |
| echo FAIL |
| exit 1 |
| fi |