github.com/yanyiwu/go@v0.0.0-20150106053140-03d6637dbb7f/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 _match() { 20 case $1 in 21 *,*) 22 #echo >&2 "match comma separated $1" 23 first=$(echo $1 | sed 's/,.*//') 24 rest=$(echo $1 | sed 's/[^,]*,//') 25 if _match $first && _match $rest; then 26 return 0 27 fi 28 return 1 29 ;; 30 '!'*) 31 #echo >&2 "match negation $1" 32 neg=$(echo $1 | sed 's/^!//') 33 if _match $neg; then 34 return 1 35 fi 36 return 0 37 ;; 38 $GOARCH|$GOOS) 39 #echo >&2 "match GOARCH or GOOS $1" 40 return 0 41 ;; 42 esac 43 return 1 44 } 45 46 # +build aborts execution if the supplied tags don't match, 47 # i.e. none of the tags (x or !x) matches GOARCH or GOOS. 48 +build() { 49 if (( $# == 0 )); then 50 return 51 fi 52 m=0 53 for tag; do 54 if _match $tag; then 55 m=1 56 fi 57 done 58 if [ $m = 0 ]; then 59 #echo >&2 no match 60 exit 0 61 fi 62 unset m 63 } 64 65 compile() { 66 $G $D/$F.go 67 } 68 69 compiledir() { 70 for pkg in $(pkgs $D/$F.dir/*.go) 71 do 72 $G -I . $(echo $pkg | tr , ' ') || return 1 73 done 74 } 75 76 errorcheckdir() { 77 lastzero="" 78 if [ "$1" = "-0" ]; then 79 lastzero="-0" 80 fi 81 pkgs=$(pkgs $D/$F.dir/*.go) 82 for pkg in $pkgs.last 83 do 84 zero="-0" 85 case $pkg in 86 *.last) 87 pkg=$(echo $pkg |sed 's/\.last$//') 88 zero=$lastzero 89 esac 90 errchk $zero $G -D . -I . -e $(echo $pkg | tr , ' ') 91 done 92 } 93 94 rundir() { 95 lastfile="" 96 for pkg in $(pkgs $D/$F.dir/*.go) 97 do 98 name=$(echo $pkg | sed 's/\.go.*//; s/.*\///') 99 $G -D . -I . -e $(echo $pkg | tr , ' ') || return 1 100 lastfile=$name 101 done 102 $L -o $A.out -L . $lastfile.$A 103 ./$A.out 104 } 105 106 rundircmpout() { 107 lastfile="" 108 for pkg in $(pkgs $D/$F.dir/*.go) 109 do 110 name=$(echo $pkg | sed 's/\.go.*//; s/.*\///') 111 $G -D . -I . -e $(echo $pkg | tr , ' ') || return 1 112 lastfile=$name 113 done 114 $L -o $A.out -L . $lastfile.$A 115 ./$A.out 2>&1 | cmp - $D/$F.out 116 } 117 118 build() { 119 $G $D/$F.go && $L $F.$A 120 } 121 122 runoutput() { 123 go run "$D/$F.go" "$@" > tmp.go 124 go run tmp.go 125 } 126 127 run() { 128 gofiles="" 129 ingo=true 130 while $ingo; do 131 case "$1" in 132 *.go) 133 gofiles="$gofiles $1" 134 shift 135 ;; 136 *) 137 ingo=false 138 ;; 139 esac 140 done 141 142 $G $D/$F.go $gofiles && $L $F.$A && ./$A.out "$@" 143 } 144 145 cmpout() { 146 $G $D/$F.go && $L $F.$A && ./$A.out 2>&1 | cmp - $D/$F.out 147 } 148 149 errorcheck() { 150 zero="" 151 if [ "$1" = "-0" ]; then 152 zero="-0" 153 shift 154 fi 155 errchk $zero $G -e $* $D/$F.go 156 } 157 158 errorcheckoutput() { 159 zero="" 160 if [ "$1" = "-0" ]; then 161 zero="-0" 162 shift 163 fi 164 go run "$D/$F.go" "$@" > tmp.go 165 errchk $zero $G -e tmp.go 166 } 167 168 skip() { 169 true 170 }