| #!/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 | \ |
| 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 ) 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)" |