summaryrefslogtreecommitdiff
path: root/test/bin
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-02-21 09:00:02 +0000
committerpaltherr <paltherr@epfl.ch>2003-02-21 09:00:02 +0000
commitaf8181e6b33464138274f263a5ab1502571e5bc1 (patch)
treee7a79f61421ae6e74d29da7f3068686215d7e9b3 /test/bin
parent7394e750cbb646baaa52eb8c303674b250c3119e (diff)
downloadscala-af8181e6b33464138274f263a5ab1502571e5bc1.tar.gz
scala-af8181e6b33464138274f263a5ab1502571e5bc1.tar.bz2
scala-af8181e6b33464138274f263a5ab1502571e5bc1.zip
- Added scala-test
Diffstat (limited to 'test/bin')
-rwxr-xr-xtest/bin/scala-test465
1 files changed, 465 insertions, 0 deletions
diff --git a/test/bin/scala-test b/test/bin/scala-test
new file mode 100755
index 0000000000..539ce6bc90
--- /dev/null
+++ b/test/bin/scala-test
@@ -0,0 +1,465 @@
+#!/bin/sh
+
+##############################################################################
+# test script for scala tools
+##############################################################################
+
+VERSION="1.01";
+AUTHORS="Philippe Altherr";
+
+# $OldId: scala-test,v 1.20 2002/12/12 14:13:54 paltherr Exp $
+# $Id$
+
+##############################################################################
+# define prefix and script
+
+SOURCE="$0";
+while [ -h "$SOURCE" ]; do
+ LOOKUP="`ls -ld "$SOURCE"`";
+ TARGET="`expr "$LOOKUP" : '.*-> \(.*\)$'`";
+ if expr "${TARGET:-.}/" : '/.*/$' > /dev/null; then
+ SOURCE="${TARGET:-.}";
+ else
+ SOURCE="`dirname "$SOURCE"`/${TARGET:-.}";
+ fi;
+done;
+PREFIX=`dirname "$SOURCE"`;
+case "$PREFIX" in
+ bin | */bin ) PREFIX=`dirname "$PREFIX"`;;
+ * ) PREFIX=`cd "$PREFIX/.."; pwd`;
+esac
+SCRIPT="`basename $SOURCE`";
+
+##############################################################################
+# flow control functions
+
+abort() {
+ echo "$0: $1" 1>&2;
+ exit 1;
+}
+
+##############################################################################
+# print functions
+
+color_initialization() {
+ case "$1" in
+ many )
+ SETCOLOR_OUTLINE="printf \\033[1;39m";
+ SETCOLOR_SUCCESS="printf \\033[1;32m";
+ SETCOLOR_FAILURE="printf \\033[1;31m";
+ SETCOLOR_WARNING="printf \\033[1;33m";
+ SETCOLOR_NORMAL="printf \\033[0;39m";
+ ;;
+ some )
+ SETCOLOR_OUTLINE="printf \\033[1m";
+ SETCOLOR_SUCCESS="printf \\033[0m";
+ SETCOLOR_FAILURE="printf \\033[1m";
+ SETCOLOR_WARNING="printf \\033[1m";
+ SETCOLOR_NORMAL="printf \\033[0m";
+ ;;
+ none )
+ SETCOLOR_OUTLINE="";
+ SETCOLOR_SUCCESS="";
+ SETCOLOR_FAILURE="";
+ SETCOLOR_WARNING="";
+ SETCOLOR_NORMAL="";
+ ;;
+ * )
+ abort "unknown color mode \`$1'";
+ ;;
+ esac;
+}
+
+printf_outline() {
+ $SETCOLOR_OUTLINE;
+ printf "$@";
+ $SETCOLOR_NORMAL;
+}
+
+printf_success() {
+ $SETCOLOR_SUCCESS;
+ printf "$@";
+ $SETCOLOR_NORMAL;
+}
+
+printf_failure() {
+ $SETCOLOR_FAILURE;
+ printf "$@";
+ $SETCOLOR_NORMAL;
+}
+
+printf_warning() {
+ $SETCOLOR_WARNING;
+ printf "$@";
+ $SETCOLOR_NORMAL;
+}
+
+##############################################################################
+# print functions
+
+show_testing() {
+ printf_outline "testing: ";
+ printf "%-60s " "$1";
+}
+
+show_success() {
+ printf "[";
+ printf_success " OK ";
+ printf "]\\n";
+}
+
+show_failure() {
+ printf "[";
+ printf_failure "FAILED";
+ printf "]\\n";
+}
+
+##############################################################################
+# test functions
+
+test_interpretation() {
+ $SURUS $FLAGS "$source" -- Test;
+}
+
+test_compilation() {
+ output="$OBJDIR"/`expr "$source" : "\(.*\)\\.scala"`.obj;
+ classpath="$SCALA:$output";
+ if $CYGWIN; then
+ classpath=`cygpath -w -p "$classpath"`;
+ fi;
+ rm -rf "$output" &&
+ mkdir -p "$output" &&
+ $SOCOS -d "$output" $FLAGS "$source" &&
+ java -classpath "$classpath" Test &&
+ rm -rf "$output";
+}
+
+test_compilation_success() {
+# $SOCOS $FLAGS "$source" -nowarn -skip:genjava -target:java;
+ $SOCOS $FLAGS "$source" -nowarn -stop:expandmixins;
+}
+
+test_compilation_failure() {
+ if test_compilation_success "$@"; then false; else true; fi;
+}
+
+test_output() {
+ if [ -f "$expect" ]; then
+ $DIFF "$actual" "$expect";
+ else
+ cat /dev/null | $DIFF "$actual" -;
+ fi;
+}
+
+test_file() {
+ source="$FILE";
+ expect="`expr "$source" : "\(.*\)\\.scala"`.check";
+ actual="`expr "$source" : "\(.*\)\\.scala"`.log";
+ flags="`expr "$source" : "\(.*\)\\.scala"`.flags";
+ if [ -f "$flags" ]; then
+ FLAGS=`cat $flags`;
+ else
+ FLAGS="";
+ fi;
+ if [ "$FAILED" = "true" -a ! -f "$actual" ]; then
+ continue;
+ fi;
+ if [ "$HEAD" != "true" ]; then
+ printf_outline "$TEXT\\n";
+ HEAD="true";
+ fi;
+ show_testing "$FILE";
+ if [ "$NORUN" != "true" ]; then
+ rm -f "$actual";
+ "$TEST" 1> "$actual" 2>&1 && test_output 1> /dev/null 2>&1;
+ else
+ test ! -f "$actual";
+ fi;
+ if [ "$?" = 0 ]; then
+ SUCCESS_COUNT=`echo "$SUCCESS_COUNT+1" | bc`;
+ show_success;
+ rm -f "$actual";
+ else
+ FAILURE_COUNT=`echo "$FAILURE_COUNT+1" | bc`;
+ show_failure;
+ fi;
+ if [ -f "$actual" ]; then
+ if [ "$SHOWLOG" = "true" ]; then
+ cat "$actual";
+ fi;
+ if [ "$SHOWDIFF" = "true" ]; then
+ test_output;
+ fi;
+ fi;
+}
+
+test_one() {
+ HEAD="false";
+ TEXT="$1"; shift 1;
+ TEST="$1"; shift 1;
+
+ for FROM do
+ if [ -d "$FROM" -o -f "$FROM" ]; then
+ for FILE in . `find "$FROM" -name "*.scala"`; do
+ if [ "$FILE" = "." ]; then continue; fi;
+ test_file;
+ done;
+ fi;
+ done
+
+ if [ "$HEAD" = "true" ]; then
+ echo "";
+ fi;
+}
+
+
+test_all() {
+ printf_outline "Test configuration\\n";
+ printf_outline "socos executable: "; echo "$SOCOS";
+ printf_outline "surus executable: "; echo "$SURUS";
+ printf_outline "scala runtime : "; echo "$SCALA";
+ echo "";
+
+ test_one "Testing interpreter" \
+ test_interpretation $FILES_RUN $FILES_INT;
+ test_one "Testing jvm backend" \
+ test_compilation $FILES_RUN $FILES_JVM;
+ test_one "Testing compiler (on files whose compilation should succeed)" \
+ test_compilation_success $FILES_POS;
+ test_one "Testing compiler (on files whose compilation should fail)" \
+ test_compilation_failure $FILES_NEG;
+}
+
+##############################################################################
+# main functions
+
+print_usage() {
+ echo "Usage: $0 [OPTION]..."
+}
+
+print_help() {
+ print_usage;
+ echo "";
+ echo "--auto use filenames to select the test to run";
+ echo "--run next files test the interpreter and all backends";
+ echo "--int next files test the interpreter";
+ echo "--jvm next files test the jvm backend";
+ echo "--pos next files test a compilation success";
+ echo "--neg next files test a compilation failure";
+ echo "--no-run run no test, use results of last run";
+ echo "--show-log show output of failed tests";
+ echo "--show-diff show differences between actual and expected output";
+ echo "--failed test only files that failed last time";
+ echo "--errors=<int> specify the number of expected errors";
+ echo "--socos=<path> specify the socos command";
+ echo "--surus=<path> specify the surus command";
+ echo "--scala=<path> specify the scala runtime class path";
+ echo "--color=USAGE control the color usage (USAGE=none|some|many)";
+ echo "--objdir=<dir> specify where to place generated files";
+ echo "--help, -? display this help and exit";
+ echo "--version output version information and exit";
+}
+
+print_version() {
+ echo "$SCRIPT $VERSION";
+ echo "Written by $AUTHORS";
+}
+
+find_program0() {
+ # if there is a user-specified path, use this one
+ if [ -n "$fullpath" ]; then
+ if [ -x "$fullpath" ]; then
+ return 0;
+ else
+ abort "file \`$fullpath' is not executable";
+ fi;
+ fi;
+
+ # try the path used in the build tree
+ fullpath="`cd "$PREFIX/../"; pwd`/bin/$filename";
+ if [ -x "$fullpath" ]; then
+ return 0;
+ fi;
+
+ # try the path used in the standard distribution
+ fullpath="`cd "$PREFIX/../../../"; pwd`/bin/$filename";
+ if [ -x "$fullpath" ]; then
+ return 0;
+ fi;
+
+ # if the program can be found in the path, use it
+ if type=`type "$filename" 2> /dev/null`; then
+ fullpath=`expr "$type" : ".* is \(.*\)"`;
+ return 0;
+ fi;
+
+ abort "could not locate executable \`$filename'";
+}
+
+find_program() {
+ variable="$1"; shift 1;
+ filename="$1"; shift 1;
+ fullpath=`eval echo \\\$$variable`;
+ find_program0;
+ eval "$variable=\"$fullpath\"";
+}
+
+find_runtime0() {
+ # if there is a user-specified path, use this one
+ if [ -n "$fullpath" ]; then
+ return 0;
+ fi;
+
+ # try the path used in the build tree
+ fullpath="`dirname $filename`/..";
+ fullpath="`cd "$fullpath"; pwd`/classes";
+ if [ -d "$fullpath" ]; then
+ return 0;
+ fi;
+
+ # try the path used in the standard distribution
+ fullpath="`dirname $filename`/..";
+ fullpath="`cd "$fullpath"; pwd`/lib/scala.jar";
+ if [ -f "$fullpath" ]; then
+ return 0;
+ fi;
+
+ abort "could not locate runtime classes for \`$filename'";
+}
+
+find_runtime() {
+ variable="$1"; shift 1;
+ filename="$1"; shift 1;
+ fullpath=`eval echo \\\$$variable`;
+ find_runtime0;
+ eval "$variable=\"$fullpath\"";
+}
+
+add_file() {
+ TEST_ALL="false";
+ case "$TEST_TYPE" in
+ auto ) ;;
+ run ) FILES_RUN="$FILES_RUN $1"; return;;
+ int ) FILES_INT="$FILES_INT $1"; return;;
+ jvm ) FILES_JVM="$FILES_JVM $1"; return;;
+ pos ) FILES_POS="$FILES_POS $1"; return;;
+ neg ) FILES_NEG="$FILES_NEG $1"; return;;
+ * ) abort "unknown test type \`$TEST_TYPE'";;
+ esac;
+ case "$1" in
+ int | */int | */int/* | int/* ) FILES_RUN="$FILES_RUN $1";;
+ pos | */pos | */pos/* | pos/* ) FILES_POS="$FILES_POS $1";;
+ neg | */neg | */neg/* | neg/* ) FILES_NEG="$FILES_NEG $1";;
+ * ) abort "don't known what to do with \`$1'";;
+ esac;
+}
+
+main() {
+ NORUN="false";
+ SHOWLOG="false";
+ SHOWDIFF="false";
+ FAILED="false";
+ ERRORS=0;
+ SUCCESS_COUNT=0;
+ FAILURE_COUNT=0;
+ SRCDIR="$PREFIX";
+ OBJDIR=".";
+
+ TEST_ALL="true";
+ TEST_TYPE="auto";
+ FILES_RUN="";
+ FILES_INT="";
+ FILES_JVM="";
+ FILES_POS="";
+ FILES_NEG="";
+
+ CYGWIN="false";
+ DIFF="diff"
+ case `uname` in
+ CYGWIN* )
+ CYGWIN="true";
+ DIFF="diff --strip-trailing-cr";
+ ;;
+ esac
+
+ while [ $# -gt 0 ]; do
+ case "$1" in
+ --auto ) TEST_TYPE="auto"; shift 1;;
+ --run ) TEST_TYPE="run"; shift 1;;
+ --int ) TEST_TYPE="int"; shift 1;;
+ --jvm ) TEST_TYPE="jvm"; shift 1;;
+ --pos ) TEST_TYPE="pos"; shift 1;;
+ --neg ) TEST_TYPE="neg"; shift 1;;
+ --no-run ) NORUN="true"; shift 1;;
+ --show-log ) SHOWLOG="true"; shift 1;;
+ --show-diff ) SHOWDIFF="true"; shift 1;;
+ --failed ) FAILED="true"; shift 1;;
+ --errors= ) abort "illegal empty argument for option --errors";;
+ --errors=* )ERRORS=`expr "$1" : "--errors=\([0-9]*\)$"`;shift 1;;
+ --socos= ) abort "illegal empty argument for option --socos";;
+ --socos=* ) SOCOS=`expr "$1" : "--socos=\(.*\)"`; shift 1;;
+ --surus= ) abort "illegal empty argument for option --surus";;
+ --surus=* ) SURUS=`expr "$1" : "--surus=\(.*\)"`; shift 1;;
+ --scala= ) abort "illegal empty argument for option --scala";;
+ --scala=* ) SCALA=`expr "$1" : "--scala=\(.*\)"`; shift 1;;
+ --color= ) abort "illegal empty argument for option --color";;
+ --color=* ) COLOR=`expr "$1" : "--color=\(.*\)"`; shift 1;;
+ --objdir= ) abort "illegal empty argument for option --objdir";;
+ --objdir=* ) OBJDIR=`expr "$1" : "--objdir=\(.*\)"`; shift 1;;
+ --help| -? ) print_help; exit 0;;
+ --version ) print_version; exit 0;;
+ -* ) abort "unknown option $1";;
+ * ) add_file "$1"; shift 1;;
+ esac;
+ done;
+
+ if [ -z "$ERRORS" ]; then
+ abort "illegal non-numerical argument for option --errors";
+ fi;
+
+ color_initialization "${COLOR:-many}";
+ find_program SOCOS socos;
+ find_program SURUS surus;
+ find_runtime SCALA $SOCOS;
+
+ if [ "$TEST_ALL" = "true" ]; then
+ case "$TEST_TYPE" in
+ auto | run ) FILES_RUN="$FILES_RUN $SRCDIR/int";;
+ esac;
+ case "$TEST_TYPE" in
+ int ) FILES_INT="$FILES_INT $SRCDIR/int";;
+ esac;
+ case "$TEST_TYPE" in
+ jvm ) FILES_JVM="$FILES_JVM $SRCDIR/int";;
+ esac;
+ case "$TEST_TYPE" in
+ auto | pos ) FILES_POS="$FILES_POS $SRCDIR/pos $SRCDIR/cours";;
+ esac;
+ case "$TEST_TYPE" in
+ auto | neg ) FILES_NEG="$FILES_NEG $SRCDIR/neg";;
+ esac;
+ fi;
+
+ test_all;
+
+ if [ $FAILURE_COUNT -eq 0 ]; then
+ printf_success "All tests were successful\\n";
+ elif [ $FAILURE_COUNT -eq 1 ]; then
+ printf_failure "There was 1 test that failed\\n";
+ else
+ printf_failure "There were $FAILURE_COUNT tests that failed\\n";
+ fi;
+
+# printf_failure "\\n";
+# printf_failure "Note that currently there are 2 tests in section \"jvm backend\" that fail anyway\\n";
+
+ if [ $FAILURE_COUNT -eq "$ERRORS" ]; then
+ exit 0;
+ else
+ exit 1;
+ fi;
+}
+
+##############################################################################
+main "$@";
+##############################################################################