github.com/xushiwei/go@v0.0.0-20130601165731-2b9d83f45bc9/test/testlib (about) 1 # Copyright 2012 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 # These function names are also known to 6 # (and are the plan for transitioning to) run.go. 7 8 # helper (not known to run.go) 9 # group file list by packages and return list of packages 10 # each package is a comma-separated list of go files. 11 pkgs() { 12 pkglist=$(grep -h '^package ' $* | awk '{print $2}' | sort -u) 13 for p in $pkglist 14 do 15 echo $(grep -l "^package $p\$" $*) | tr ' ' , 16 done | sort 17 } 18 19 # +build aborts execution if the supplied tags don't match, 20 # i.e. none of the tags (x or !x) matches GOARCH or GOOS. 21 +build() { 22 if (( $# == 0 )); then 23 return 24 fi 25 for tag; do 26 case $tag in 27 $GOARCH|$GOOS) 28 #echo >&2 "match $tag in $1" 29 return # don't exclude. 30 ;; 31 '!'$GOARCH|'!'$GOOS) 32 ;; 33 '!'*) 34 # not x where x is neither GOOS nor GOARCH. 35 #echo >&2 "match $tag in $1" 36 return # don't exclude 37 ;; 38 esac 39 done 40 # no match. 41 exit 0 42 } 43 44 compile() { 45 $G $D/$F.go 46 } 47 48 compiledir() { 49 for pkg in $(pkgs $D/$F.dir/*.go) 50 do 51 $G -I . $(echo $pkg | tr , ' ') || return 1 52 done 53 } 54 55 errorcheckdir() { 56 lastzero="" 57 if [ "$1" = "-0" ]; then 58 lastzero="-0" 59 fi 60 pkgs=$(pkgs $D/$F.dir/*.go) 61 for pkg in $pkgs.last 62 do 63 zero="-0" 64 case $pkg in 65 *.last) 66 pkg=$(echo $pkg |sed 's/\.last$//') 67 zero=$lastzero 68 esac 69 errchk $zero $G -D . -I . -e $(echo $pkg | tr , ' ') 70 done 71 } 72 73 rundir() { 74 lastfile="" 75 for pkg in $(pkgs $D/$F.dir/*.go) 76 do 77 name=$(echo $pkg | sed 's/\.go.*//; s/.*\///') 78 $G -D . -I . -e $(echo $pkg | tr , ' ') || return 1 79 lastfile=$name 80 done 81 $L -o $A.out -L . $lastfile.$A 82 ./$A.out 83 } 84 85 rundircmpout() { 86 lastfile="" 87 for pkg in $(pkgs $D/$F.dir/*.go) 88 do 89 name=$(echo $pkg | sed 's/\.go.*//; s/.*\///') 90 $G -D . -I . -e $(echo $pkg | tr , ' ') || return 1 91 lastfile=$name 92 done 93 $L -o $A.out -L . $lastfile.$A 94 ./$A.out 2>&1 | cmp - $D/$F.out 95 } 96 97 build() { 98 $G $D/$F.go && $L $F.$A 99 } 100 101 runoutput() { 102 go run "$D/$F.go" "$@" > tmp.go 103 go run tmp.go 104 } 105 106 run() { 107 gofiles="" 108 ingo=true 109 while $ingo; do 110 case "$1" in 111 *.go) 112 gofiles="$gofiles $1" 113 shift 114 ;; 115 *) 116 ingo=false 117 ;; 118 esac 119 done 120 121 $G $D/$F.go $gofiles && $L $F.$A && ./$A.out "$@" 122 } 123 124 cmpout() { 125 $G $D/$F.go && $L $F.$A && ./$A.out 2>&1 | cmp - $D/$F.out 126 } 127 128 errorcheck() { 129 zero="" 130 if [ "$1" = "-0" ]; then 131 zero="-0" 132 shift 133 fi 134 errchk $zero $G -e $* $D/$F.go 135 } 136 137 errorcheckoutput() { 138 zero="" 139 if [ "$1" = "-0" ]; then 140 zero="-0" 141 shift 142 fi 143 go run "$D/$F.go" "$@" > tmp.go 144 errchk $zero $G -e tmp.go 145 } 146 147 skip() { 148 true 149 }