summaryrefslogtreecommitdiff
path: root/src/cmd/gofmt/test.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/gofmt/test.sh')
-rwxr-xr-xsrc/cmd/gofmt/test.sh162
1 files changed, 162 insertions, 0 deletions
diff --git a/src/cmd/gofmt/test.sh b/src/cmd/gofmt/test.sh
new file mode 100755
index 000000000..063a0727f
--- /dev/null
+++ b/src/cmd/gofmt/test.sh
@@ -0,0 +1,162 @@
+#!/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.
+
+eval $(gomake --no-print-directory -f ../../Make.inc go-env)
+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 | blank1.go | ddd1.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 | bug287.go | bug298.go | bug299.go | bug300.go | \
+ bug302.go | bug306.go | bug322.go | bug324.go | bug335.go | \
+ bug340.go | bug349.go | bug351.go | bug358.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)"