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  }