#!/usr/bin/env bash # Copyright 2009 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 goos=$(go env GOOS) defer_panic_recover=" defer defer2 " effective_go=" eff_bytesize eff_qr eff_sequence " error_handling=" error error2 error3 error4 " law_of_reflection=" interface interface2 " c_go_cgo=" cgo1 cgo2 cgo3 cgo4 " # cgo1 and cgo2 don't run on freebsd, srandom has a different signature if [ "$goos" == "freebsd" ]; then c_go_cgo="cgo3 cgo4" fi timeout=" timeout1 timeout2 " gobs=" gobs1 gobs2 " json=" json1 json2 json3 json4 json5 " all=$(echo $defer_panic_recover $effective_go $error_handling $law_of_reflection $c_go_cgo $timeout $gobs $json slices go1) for i in $all; do go build $i.go done # Write to temporary file to avoid mingw bash bug. TMPFILE="${TMPDIR:-/tmp}/gotest3.$USER" function testit { ./$1 >"$TMPFILE" 2>&1 || true x=$(echo $(cat "$TMPFILE")) # extra echo canonicalizes if ! echo "$x" | grep "$2" > /dev/null then echo $1 failed: '"'$x'"' is not '"'$2'"' fi } testit defer '^0 3210 2$' testit defer2 '^Calling g. Printing in g 0 Printing in g 1 Printing in g 2 Printing in g 3 Panicking! Defer in g 3 Defer in g 2 Defer in g 1 Defer in g 0 Recovered in f 4 Returned normally from f.$' testit eff_bytesize '^1.00YB 9.09TB$' testit eff_sequence '^\[-1 2 6 16 44\]$' testit go1 '^Christmas is a holiday: true Sleeping for 0.123s.*go1.go already exists$' testit interface2 "^type: float64$" testit json1 "^$" testit json2 "the reciprocal of i is" testit json3 "Age is int 6" testit json4 "^$" rm -f $all "$TMPFILE"