| #!/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. | |
| . "$GOROOT"/src/Make.$GOARCH | |
| if [ -z "$O" ]; then | |
| echo 'missing $O - maybe no Make.$GOARCH?' 1>&2 | |
| exit 1 | |
| fi | |
| CMD="./gofmt" | |
| TMP1=test_tmp1.go | |
| TMP2=test_tmp2.go | |
| TMP3=test_tmp3.go | |
| COUNT=0 | |
| count() { | |
| #echo $1 | |
| let COUNT=$COUNT+1 | |
| let M=$COUNT%10 | |
| if [ $M == 0 ]; then | |
| echo -n "." | |
| fi | |
| } | |
| error() { | |
| echo $1 | |
| exit 1 | |
| } | |
| # apply to one file | |
| apply1() { | |
| # the following files are skipped because they are test cases | |
| # for syntax errors and thus won't parse in the first place: | |
| case `basename "$F"` in | |
| func3.go | const2.go | char_lit1.go | \ | |
| bug014.go | bug050.go | bug068.go | bug083.go | bug088.go | \ | |
| bug106.go | bug121.go | bug125.go | bug133.go | bug160.go | \ | |
| bug163.go | bug166.go | bug169.go | bug217.go | bug222.go | \ | |
| bug226.go | bug228.go | bug248.go | bug274.go | bug280.go | \ | |
| bug282.go ) return ;; | |
| esac | |
| # the following directories are skipped because they contain test | |
| # cases for syntax errors and thus won't parse in the first place: | |
| case `dirname "$F"` in | |
| $GOROOT/test/syntax ) return ;; | |
| esac | |
| #echo $1 $2 | |
| "$1" "$2"; count "$F" | |
| } | |
| # apply to local files | |
| applydot() { | |
| for F in `find . -name "*.go" | grep -v "._"`; do | |
| apply1 "$1" $F | |
| done | |
| } | |
| # apply to all .go files we can find | |
| apply() { | |
| for F in `find "$GOROOT" -name "*.go" | grep -v "._"`; do | |
| apply1 "$1" $F | |
| done | |
| } | |
| cleanup() { | |
| rm -f $TMP1 $TMP2 $TMP3 | |
| } | |
| silent() { | |
| cleanup | |
| $CMD "$1" > /dev/null 2> $TMP1 | |
| if [ $? != 0 ]; then | |
| cat $TMP1 | |
| error "Error (silent mode test): test.sh $1" | |
| fi | |
| } | |
| idempotent() { | |
| cleanup | |
| $CMD "$1" > $TMP1 | |
| if [ $? != 0 ]; then | |
| error "Error (step 1 of idempotency test): test.sh $1" | |
| fi | |
| $CMD $TMP1 > $TMP2 | |
| if [ $? != 0 ]; then | |
| error "Error (step 2 of idempotency test): test.sh $1" | |
| fi | |
| $CMD $TMP2 > $TMP3 | |
| if [ $? != 0 ]; then | |
| error "Error (step 3 of idempotency test): test.sh $1" | |
| fi | |
| cmp -s $TMP2 $TMP3 | |
| if [ $? != 0 ]; then | |
| diff $TMP2 $TMP3 | |
| error "Error (step 4 of idempotency test): test.sh $1" | |
| fi | |
| } | |
| valid() { | |
| cleanup | |
| $CMD "$1" > $TMP1 | |
| if [ $? != 0 ]; then | |
| error "Error (step 1 of validity test): test.sh $1" | |
| fi | |
| $GC -o /dev/null $TMP1 | |
| if [ $? != 0 ]; then | |
| error "Error (step 2 of validity test): test.sh $1" | |
| fi | |
| } | |
| runtest() { | |
| #echo "Testing silent mode" | |
| cleanup | |
| "$1" silent "$2" | |
| #echo "Testing idempotency" | |
| cleanup | |
| "$1" idempotent "$2" | |
| } | |
| runtests() { | |
| if [ $# = 0 ]; then | |
| runtest apply | |
| # verify the pretty-printed files can be compiled with $GC again | |
| # do it in local directory only because of the prerequisites required | |
| #echo "Testing validity" | |
| # Disabled for now due to dependency problems | |
| # cleanup | |
| # applydot valid | |
| else | |
| for F in "$@"; do | |
| runtest apply1 "$F" | |
| done | |
| fi | |
| } | |
| # run over all .go files | |
| runtests "$@" | |
| cleanup | |
| # done | |
| echo | |
| echo "PASSED ($COUNT tests)" |