diff options
Diffstat (limited to 'test/clitest')
-rwxr-xr-x | test/clitest | 497 |
1 files changed, 0 insertions, 497 deletions
diff --git a/test/clitest b/test/clitest deleted file mode 100755 index 9a26423d6e..0000000000 --- a/test/clitest +++ /dev/null @@ -1,497 +0,0 @@ -#!/bin/sh -############################################################################## -# __ # -# ________ ___ / / ___ Scala Tools Launch Script # -# / __/ __// _ | / / / _ | (c) 2002-2009, LAMP/EPFL # -# __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ # -# /____/\___/_/ |_/____/_/ | | # -# |/ # -############################################################################## - -# $Id$ - -############################################################################## -# Error functions - -# Prints a warning message on stderr. -warning() { - echo "$0: warning:" "$@" 1>&2; -} - -# Prints an error message on stderr. -error() { - echo "$0:" "$@" 1>&2; -} - -# Prints an error message on stderr and exits with a non-zero status. -abort() { - error "$@"; - exit 1; -} - -############################################################################## -# Printing functions - -# Initializes the printf functions -printf_initialization() { - case "$1" in - many ) - printf_font_outline="printf \\033[1;39m"; - printf_font_success="printf \\033[1;32m"; - printf_font_failure="printf \\033[1;31m"; - printf_font_warning="printf \\033[1;33m"; - printf_font_default="printf \\033[0;39m"; - ;; - some ) - printf_font_outline="printf \\033[1m"; - printf_font_success="printf \\033[0m"; - printf_font_failure="printf \\033[1m"; - printf_font_warning="printf \\033[1m"; - printf_font_default="printf \\033[0m"; - ;; - none ) - printf_font_outline=""; - printf_font_success=""; - printf_font_failure=""; - printf_font_warning=""; - printf_font_default=""; - ;; - * ) - abort "unknown color mode \`$1'"; - ;; - esac; -} - -# Prints formated text in outline font. -printf_outline() { - $printf_font_outline; - printf "$@"; - $printf_font_default; -} - -############################################################################## -# File name and path list conversion functions - -# Prints the OS-specific form of the specified Unix form file name. -get_os_filename() { - [ $# = 1 ] || abort "internal error"; - case "$UNAME" in - CYGWIN* ) cygpath --windows "$1";; - * ) echo "$@";; - esac; -} - -# Prints the Unix form of the specified OS-specific form file name. -get_unix_filename() { - [ $# = 1 ] || abort "internal error"; - case "$UNAME" in - CYGWIN* ) cygpath --unix "$1";; - * ) echo "$@";; - esac; -} - -# Prints the OS-specific form of the specified Unix form path list. -get_os_pathlist() { - [ $# = 1 ] || abort "internal error"; - case "$UNAME" in - CYGWIN* ) cygpath --window --path "$1";; - * ) echo "$@";; - esac; -} - -# Prints the Unix form of the specified OS-specific form path list. -get_unix_pathlist() { - [ $# = 1 ] || abort "internal error"; - case "$UNAME" in - CYGWIN* ) cygpath --unix --path "$1";; - * ) echo "$@";; - esac; -} - -############################################################################## -# Implementation of clitest - -# Prints the clitest usage. -test_print_usage() { - [ $# = 0 ] || abort "internal error"; - echo "Usage: $0 [OPTION]..." -} - -# Prints the clitest help. -test_print_help() { - [ $# = 0 ] || abort "internal error"; - test_print_usage; - echo ""; - echo "--quick use the 'quick' build instead of distribution"; - echo '--installed use the installed programs on $PATH' - echo "--debug redirect all outputs to standard output"; - echo "--info display information messages"; - echo "--javac run same tests with the Sun Java compiler"; - echo "--jikes run same tests with the IBM Java compiler"; - echo "--jredir=<dir> specify the Sun JRE installation directory (jikes)"; - echo "--objdir=<dir> specify where to place generated files"; - echo "--verbose display verbose messages"; - echo "--help, -? display this help and exit"; - echo "--version output version information and exit"; -} - -# Prints the clitest version. -test_print_version() { - [ $# = 0 ] || abort "internal error"; - echo "$SCRIPT 1.3"; -} - -# Adds a new file to the appropriate file list(s). -test_add_file() { - [ $# = 1 ] || abort "internal error"; - case "$1" in - *.scala ) - if [ ! \( -d "$1" -o -f "$1" \) ]; then - abort "don't know what to do with '$1'"; - fi; - dir=`dirname "$1"`; - file=`cd $dir && pwd`/`basename $1`; - FILES="$FILES $file";; - * ) - if [ ! -d "$1" ]; then - abort "don't know what to do with '$1'"; - fi; - dir=`cd "$1" && pwd`; - file=`find "$dir" -name "Main$SUFFIX" -a -type f -print`; - FILES="$FILES $file";; - esac; -} - -test_run() { - [ $# = 1 ] || abort "internal error"; - cmd="$1"; shift 1; - [ "$DEBUG" = "debug" ] && ( printf_outline "[DEBUG]"; echo "$cmd"); - eval "$cmd"; -} - -test_diff() { - [ $# = 2 ] || abort "internal error"; - check="$1"; shift 1; - log="$1"; shift 1; - [ "$DEBUG" = "debug" ] && return; - sed -e "s#$TEST_DIR/##g" $log > $TMP_FILE; - $DIFF $check $TMP_FILE > $DIFF_FILE - if [ -n "`cat $DIFF_FILE`" ] ; then - printf_outline "\\nDifferences between check and log files:\\n"; - file=`echo $check | sed -e "s#$PREFIX/##g"`; - printf "$file\\n"; - cat $DIFF_FILE; - fi -} - -test_compile() { - [ $# = 3 ] || abort "internal error"; - source="$1"; shift 1; - check="$1"; shift 1; - info="$1"; shift 1; - [ -d "$OUTPUT_DIR" ] || mkdir -p $OUTPUT_DIR; - [ -f "$LOG_FILE" ] && $RM $LOG_FILE; - if [ "$COMPILER" = "javac" ] || [ "$COMPILER" = "jikes" ]; then - suffix=".${COMPILER}"; - [ "$LANG" = "java5" ] && suffix=".${COMPILER}5"; - [ "$LANG" = "java6" ] && suffix=".${COMPILER}6"; - else - suffix=".$COMPILER"; - fi; - file=`echo $source | sed -e "s#$PREFIX/##g"`; - if [ "$LEVEL" = "info" ] || [ "$LEVEL" = "verbose" ] ; then - printf_outline "\\nSource file: $file\\n" - cat $source; - fi - printf "\\n"; - - #=`get_unix_filename "$source"`; - printf "Compile $file ($info) with unknown option '-dd'\\n" - test_run "env CLASSPATH= $COMPILER_COMMAND \ - -dd $OUTPUT_DIR $source 2>> $LOG_FILE 1>> $LOG_FILE"; - - printf "Compile $file ($info) with no classpath information\\n" - test_run "env CLASSPATH= $COMPILER_COMMAND \ - -d $OUTPUT_DIR $source 2>> $LOG_FILE 1>> $LOG_FILE"; - - printf "Compile $file ($info) with variable CLASSPATH\\n" - test_run "env CLASSPATH=$OUTPUT_DIR $COMPILER_COMMAND \ - -d $OUTPUT_DIR $source 2>> $LOG_FILE 1>> $LOG_FILE"; - - printf "Compile $file ($info) with option -classpath\\n" - test_run "env CLASSPATH= $COMPILER_COMMAND -classpath $OUTPUT_DIR \ - -d $OUTPUT_DIR $source 2>> $LOG_FILE 1>> $LOG_FILE"; - - printf "Compile $file ($info) with current directory as default classpath\\n" - test_run "(cd $OUTPUT_DIR && - env CLASSPATH= $COMPILER_COMMAND $source 2>> $LOG_FILE 1>> $LOG_FILE)"; - - test_diff "$check$suffix" "$LOG_FILE"; - - if [ "$LEVEL" = "verbose" ] ; then - printf_outline "\\nTest directory:\\n"; - $TREE $TMP_DIR; - fi -} - -test_execute() { - [ $# = 2 ] || abort "internal error"; - main="$1"; shift 1; - check="$1"; shift 1; - suffix=".$LANG"; - [ "$LANG" = "java6" ] && suffix=".java5"; - - [ -f "$LOG_FILE" ] && $RM $LOG_FILE; - printf "\\n"; - - printf "Execute $main with unknown option '-cpp'\\n" - test_run "env CLASSPATH= \ - $RUNTIME_COMMAND -cpp $OUTPUT_DIR $main 2 \ - 2>> $LOG_FILE 1>> $LOG_FILE"; - - printf "Execute $main with variable CLASSPATH\\n" - test_run "env CLASSPATH=$OUTPUT_DIR \ - $RUNTIME_COMMAND $main 1 \ - 2>> $LOG_FILE 1>> $LOG_FILE"; - - printf "Execute $main with option -classpath\\n" - test_run "env CLASSPATH= \ - $RUNTIME_COMMAND -classpath $OUTPUT_DIR $main 2 \ - 2>> $LOG_FILE 1>> $LOG_FILE"; - - printf "Execute $main with current directory as default classpath\\n" - test_run "(cd $OUTPUT_DIR && - env CLASSPATH= $RUNTIME_COMMAND $main 3 2>> $LOG_FILE 1>> $LOG_FILE)"; - - printf "Execute $main with quoted argument\\n" - test_run "env CLASSPATH= \ - $RUNTIME_COMMAND -classpath $OUTPUT_DIR $main 4 \"a b c\" \ - 2>> $LOG_FILE 1>> $LOG_FILE"; - - test_diff "$check$suffix" "$LOG_FILE"; -} - -test_interpret() { - [ $# = 2 ] || abort "internal error"; - main="$1"; shift 1; - check="$1"; shift 1; - [ "$LANG" = "scala" ] || return; - [ -f "$LOG_FILE" ] && $RM $LOG_FILE; - printf "\\n" - - printf "Interpret $main with unknown option '-cpp'\\n" - test_run "(env CLASSPATH= \ - printf $main'.main(Array(\"0\"))\n:q' | $INTERPRETER_COMMAND \ - -cpp $OUTPUT_DIR 2>> $LOG_FILE 1>> $LOG_FILE)"; - printf "\\n" >> $LOG_FILE # newline - - printf "Interpret $main with variable CLASSPATH\\n" - test_run "(printf $main'.main(Array(\"1\"))\n:q' \ - | env CLASSPATH=$OUTPUT_DIR $INTERPRETER_COMMAND \ - 2>> $LOG_FILE 1>> $LOG_FILE)"; - printf "\\n" >> $LOG_FILE # newline - - printf "Interpret $main with option -classpath\\n" - test_run "(env CLASSPATH= \ - printf $main'.main(Array(\"2\"))\n:q' | $INTERPRETER_COMMAND \ - -classpath $OUTPUT_DIR 2>> $LOG_FILE 1>> $LOG_FILE)"; - printf "\\n" >> $LOG_FILE # newline - - printf "Interpret $main with current directory as default classpath\\n" - test_run "(cd $OUTPUT_DIR && - printf $main'.main(Array(\"3\"))\n:q' | $INTERPRETER_COMMAND \ - 2>> $LOG_FILE 1>> $LOG_FILE)"; - printf "\\n" >> $LOG_FILE # newline - - test_diff "$check.scalaint" "$LOG_FILE"; -} - -test_docgen() { - [ $# = 2 ] || abort "internal error"; - source="$1"; shift 1; - check="$1"; shift 1; - [ -d "$OUTPUT_DIR" ] || mkdir -p $OUTPUT_DIR; - [ -f "$LOG_FILE" ] && $RM $LOG_FILE; - [ -d "$API_DIR" ] && $RM -r "$API_DIR/*" || mkdir -p $API_DIR; - suffix=".${LANG}_api"; - file=`echo $source | sed -e "s#$PREFIX/##g"`; - if [ "$LEVEL" = "info" ] || [ "$LEVEL" = "verbose" ] ; then - printf_outline "\\nSource file: $file\\n" - cat $source; - fi - printf "\\n"; - - printf "Generate documentation for $file\\n" - test_run "env CLASSPATH= $DOCGEN_COMMAND \ - -d $API_DIR $source 2>> $LOG_FILE 1>> $LOG_FILE"; - - n=`$TREE $API_DIR | wc -l`; - $TREE $API_DIR | tail -n `echo "$n-1" | bc` > "$LOG_FILE"; - test_diff "$check$suffix" "$LOG_FILE"; - - if [ "$LEVEL" = "verbose" ] ; then - printf_outline "\\nAPI directory:\\n"; - $TREE $API_DIR; - fi -} - -############################################################################## -# Initialization - -unset SCRIPT; -UNAME=`uname`; -SOURCE=$0; -SCRIPT=`basename "$SOURCE"`; -while [ -h "$SOURCE" ]; do - SCRIPT=`basename "$SOURCE"`; - 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"`/..; -prefix=$PREFIX; -PREFIX=`cd "$PREFIX"; pwd`; - -QUICK="$PREFIX/build/quick/bin/" -if [ -d "$PREFIX/dists" ]; then - LATEST="$PREFIX/dists/latest/bin/"; -else - if [ -d "$PREFIX/build" ]; then - LATEST="$QUICK"; - else - LATEST="$PREFIX/bin/"; - fi; -fi; -BIN_DIR="$LATEST" - -if [ -n "`which mktemp`" ] ; then - TMP_DIR=`mktemp -d` -else - TMP_DIR=${TMPDIR-/tmp}/tmp-$USER.`basename $0` -fi - -if [ -d "$PREFIX/test" ]; then - TEST_DIR="$PREFIX/test"; -elif [ -d "$PREFIX/misc/scala-test" ]; then - TEST_DIR="$PREFIX/misc/scala-test"; -else - abort "Test directory not found"; -fi; -SOURCE_DIR=$TEST_DIR/files/cli -OUTPUT_DIR=$TMP_DIR/classes -API_DIR=$TMP_DIR/api - -DIFF="diff"; -RM="rm -f"; -TREE="tree"; - -case `uname` in - CYGWIN* ) - DIFF="diff --text --strip-trailing-cr"; - ;; -esac; - -DEBUG=""; -LANG="scala"; -SUFFIX=".scala"; -COMPILER="scalac"; -LEVEL=""; -while [ $# -gt 0 ]; do - case "$1" in - --debug ) DEBUG="debug"; LEVEL="verbose"; shift 1;; - --quick ) BIN_DIR="$QUICK"; shift 1;; - --installed) BIN_DIR=""; shift 1;; - --info ) LEVEL="info"; shift 1;; - --javac ) LANG="java"; SUFFIX=".java"; COMPILER="javac"; shift 1;; - --jikes ) LANG="java"; SUFFIX=".java"; COMPILER="jikes"; shift 1;; - --jredir=* ) JRE_DIR=`expr "$1" : "--jredir=\(.*\)"`; shift 1;; - --objdir=* ) OUTPUT_DIR=`expr "$1" : "--objdir=\(.*\)"`; shift 1;; - --verbose ) LEVEL="verbose"; shift 1;; - --help ) test_print_help; exit 0;; - --version ) test_print_version; exit 0;; - -* ) abort "unknown option $1";; - * ) test_add_file "$1"; shift 1;; #test_print_usage; exit 0;; - esac; -done; - -if [ "$LANG" = "scala" ]; then - RUNTIME_COMMAND="${BIN_DIR}scala"; - COMPILER_COMMAND="${BIN_DIR}$COMPILER"; - INTERPRETER_COMMAND="${BIN_DIR}scala"; - DOCGEN_COMMAND="${BIN_DIR}scaladoc"; -elif [ "$LANG" = "java" ]; then - RUNTIME_COMMAND=`which ${JAVACMD:=java}` - BIN_DIR=`dirname $RUNTIME_COMMAND`; - [ "$COMPILER" = "javac" ] && COMPILER_COMMAND=$BIN_DIR/$COMPILER; - [ "$COMPILER" = "jikes" ] && COMPILER_COMMAND=`which $COMPILER`; - DOCGEN_COMMAND=`dirname "$COMPILER_COMMAND"`/javadoc; -else - abort "unknown language '$LANG'" -fi -[ -x "$COMPILER_COMMAND" ] || abort "Command $COMPILER_COMMAND not found"; -[ -x "$RUNTIME_COMMAND" ] || abort "Command $RUNTIME_COMMAND not found"; - -printf_initialization "${COLOR:-many}"; - -printf_outline "Output directory is : $OUTPUT_DIR\\n"; -printf_outline "Compiler command is : $COMPILER_COMMAND\\n"; -printf_outline "Runtime command is : $RUNTIME_COMMAND\\n"; - -jvm_version=`${JAVACMD:=java} -version 2>&1 | head -3 | tail -1` -printf_outline "Java runtime is : $jvm_version\\n"; -if [ "$LANG" = "scala" ]; then - [ `echo "$jvm_version" | grep -c "J9"` = "1" ] && LANG="${LANG}_j9"; -elif [ "$LANG" = "java" ]; then - if [ "$COMPILER" = "jikes" ]; then - if [ "$LANG" = "java" ]; then - jre_home=`dirname $RUNTIME_COMMAND`/..; - elif [ -n "$JRE_DIR" ]; then - jre_home=$JRE_DIR; - else - abort "Jikes requires Sun JVM (use option '--jredir')"; - fi; - cpath=`find $jre_home -name "rt.jar"`; - COMPILER_COMMAND="${COMPILER_COMMAND} -bootclasspath $cpath"; - fi; - [ `echo "$jvm_version" | grep -c "1\.5"` = "1" ] && LANG="${LANG}5"; - [ `echo "$jvm_version" | grep -c "1\.6"` = "1" ] && LANG="${LANG}6"; - [ `echo "$jvm_version" | grep -c "J9"` = "1" ] && LANG="${LANG}_j9"; -fi - -if [ "$DEBUG" = "debug" ] ; then - LOG_FILE=/dev/tty -else - LOG_FILE=${TMP_DIR}/${SCRIPT}.log -fi -DIFF_FILE=${TMP_DIR}/${SCRIPT}.diff -TMP_FILE=${TMP_DIR}/${SCRIPT}.tmp - -############################################################################## - -if [ -z "$FILES" ]; then - FILES=`find "$SOURCE_DIR" -name "Main$SUFFIX" -a -type f -print`; -fi; -for testfile in "" $FILES; do - [ -z "$testfile" ] && continue; - checkfile=`dirname "$testfile"`/`basename "$testfile" "$SUFFIX"`.check - info=`awk '$1 ~ /^\/\//{i=index($0,"@info ");if(i>0){print substr($0,i+6)}}' "$testfile"`; - test_compile "$testfile" "$checkfile" "$info"; - if [ "$?" = "0" ] ; then - scala_main=`echo "$testfile" | \ - sed -e "s#${SOURCE_DIR}/\(.*\)\${SUFFIX}#\1#g" -e "s#\/#\.#g"`; - test_execute "$scala_main" "$checkfile"; - test_interpret "$scala_main" "$checkfile"; - test_docgen "$testfile" "$checkfile"; - fi -done; - -############################################################################## -# Epilog - -$RM -r $TMP_DIR - -############################################################################## |