summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authormichelou <michelou@epfl.ch>2006-03-30 14:57:01 +0000
committermichelou <michelou@epfl.ch>2006-03-30 14:57:01 +0000
commit6e3e914fa891a0922b9169f98627d838932ec221 (patch)
tree586222fc0fe6b820d27d266bb41fae187f1c879a /test
parent2608a0b3ec618b47d4636965a94d2ca04a265129 (diff)
downloadscala-6e3e914fa891a0922b9169f98627d838932ec221.tar.gz
scala-6e3e914fa891a0922b9169f98627d838932ec221.tar.bz2
scala-6e3e914fa891a0922b9169f98627d838932ec221.zip
added (simple) test script for testing Scala co...
added (simple) test script for testing Scala commands
Diffstat (limited to 'test')
-rwxr-xr-xtest/clitest371
1 files changed, 371 insertions, 0 deletions
diff --git a/test/clitest b/test/clitest
new file mode 100755
index 0000000000..38521d5fdf
--- /dev/null
+++ b/test/clitest
@@ -0,0 +1,371 @@
+#!/bin/sh
+##############################################################################
+# __ #
+# ________ ___ / / ___ Scala Tools Launch Script #
+# / __/ __// _ | / / / _ | (c) 2002-2006, LAMP/EPFL #
+# __\ \/ /__/ __ |/ /__/ __ | #
+# /____/\___/_/ |_/____/_/ | | #
+# |/ #
+##############################################################################
+
+# $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;
+}
+
+##############################################################################
+# 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 "--info display information messages";
+ 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.0";
+}
+
+##############################################################################
+# 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/exec"
+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.123
+fi
+
+ECHO="echo -e"
+DIFF="diff";
+
+case `uname` in
+ CYGWIN* )
+ DIFF="diff --text --strip-trailing-cr";
+ ;;
+esac;
+
+LEVEL="silent";
+while [ $# -gt 0 ]; do
+ case "$1" in
+ --info ) LEVEL="info"; shift 1;;
+ --verbose ) LEVEL="verbose"; shift 1;;
+ --help| -? ) test_print_help; exit 0;;
+ --version ) test_print_version; exit 0;;
+ -* ) abort "unknown option $1";;
+ * ) test_print_usage; exit 0;;
+ esac;
+done;
+
+SCALA=${BIN_DIR}/scala
+SCALAC=${BIN_DIR}/scalac
+SCALAINT=${BIN_DIR}/scalaint
+
+printf_initialization "${COLOR:-many}";
+
+printf_outline "Test directory is : ${TMP_DIR}\\n";
+printf_outline "Scala binaries in : ${BIN_DIR}\\n";
+jvm_version=`${JAVACMD:=java} -version 2>&1 | head -3 | tail -1`
+printf_outline "Java runtime is : $jvm_version\\n\\n";
+
+##############################################################################
+# Variables
+
+SOURCE_DIR=${TMP_DIR}/src
+OUTPUT_DIR=${TMP_DIR}/classes
+
+SCALA_PACKAGE1=test1
+SCALA_PACKAGE2=test2
+
+SCALA_MAIN1=${SCALA_PACKAGE1}.Main
+SCALA_MAIN2=${SCALA_PACKAGE2}.Main
+
+SOURCE_DIR_PACKAGE1=${SOURCE_DIR}/`echo ${SCALA_PACKAGE1} | tr '.' '/'`
+SOURCE_DIR_PACKAGE2=${SOURCE_DIR}/`echo ${SCALA_PACKAGE2} | tr '.' '/'`
+
+SOURCE_FILE1=${SOURCE_DIR_PACKAGE1}/Main.scala
+SOURCE_FILE2=${SOURCE_DIR_PACKAGE2}/Main.scala
+
+LOG_FILE=${TMP_DIR}/${SCRIPT}.log
+CHECK_FILE=${TMP_DIR}/${SCRIPT}.check
+
+##############################################################################
+# Tests
+
+rm -rf ${TMP_DIR}/*
+mkdir -p ${SOURCE_DIR_PACKAGE1} ${SOURCE_DIR_PACKAGE2}
+mkdir -p ${OUTPUT_DIR}
+
+(cat << EOF
+package ${SCALA_PACKAGE1}
+object Main {
+ def main(args: Array[String]) = {
+ val arg = if (args.length > 0) args(0) else "?"
+ Console.println("1: test " + arg + " passed")
+ }
+}
+EOF
+) > ${SOURCE_FILE1}
+
+################################# scalac #####################################
+printf_outline "Test the 'scalac' command\\n"
+
+printf "\\tCase 0: do not use any classpath information (0 dependency)\\n"
+env CLASSAPTH= ${SCALAC} -d ${OUTPUT_DIR} ${SOURCE_FILE1} 2>> ${LOG_FILE}
+
+if [ "$?" = "0" ] ; then
+
+ ################################## scala #################################
+ printf_outline "\\nTest the 'scala' command\\n"
+
+ printf "\\tCase 1: use the CLASSPATH environment variable\\n"
+ env CLASSPATH=${OUTPUT_DIR} ${SCALA} ${SCALA_MAIN1} 1 \
+ 1>> ${LOG_FILE}
+
+ printf "\\tCase 2: use the -classpath option\\n"
+ env CLASSPATH= ${SCALA} -cp ${OUTPUT_DIR} ${SCALA_MAIN1} 2 \
+ 1>> ${LOG_FILE}
+
+ printf "\\tCase 3: use the current directory as default classpath\\n"
+ (cd ${OUTPUT_DIR} &&
+ env CLASSPATH= ${SCALA} ${SCALA_MAIN1} 3 1>> ${LOG_FILE})
+
+ ############################## scalaint ##################################
+ printf_outline "\\nTest the 'scalaint' command\\n"
+
+ printf "\\tCase 1: use the CLASSPATH environment variable\\n"
+ (env CLASSPATH=${OUTPUT_DIR} \
+ printf "${SCALA_MAIN1}.main(Array(\"1\"))\n:q" | ${SCALAINT} \
+ 1>> ${LOG_FILE})
+ printf "\\n" >> ${LOG_FILE} # newline
+
+ printf "\\tCase 2: use the -classpath option\\n"
+ (env CLASSPATH= \
+ printf "${SCALA_MAIN1}.main(Array(\"2\"))\n:q" | ${SCALAINT} \
+ -classpath ${OUTPUT_DIR} 1>> ${LOG_FILE})
+ printf "\\n" >> ${LOG_FILE} # newline
+
+ printf "\\tCase 3: use the current directory as default classpath\\n"
+ (cd ${OUTPUT_DIR} &&
+ printf "${SCALA_MAIN1}.main(Array(\"3\"))\n:q" | ${SCALAINT} 1>> ${LOG_FILE})
+ printf "\\n" >> ${LOG_FILE} # newline
+
+fi
+
+##############################################################################
+
+(cat << EOF
+package ${SCALA_PACKAGE2}
+object Main {
+ def main(args: Array[String]) = {
+ Console.print("2: ")
+ ${SCALA_MAIN1}.main(args)
+ }
+}
+EOF
+) > ${SOURCE_FILE2}
+
+################################# scalac #####################################
+printf_outline "\\nTest the 'scalac' command\n"
+
+printf "\\tCase 0: do not use any classpath information (1 dependency)\\n"
+env CLASSPATH= ${SCALAC} ${SOURCE_FILE2} 2>> ${LOG_FILE}
+
+printf "\\tCase 1: use the CLASSPATH environment variable\\n"
+env CLASSPATH=${OUTPUT_DIR} ${SCALAC} \
+ -d ${OUTPUT_DIR} ${SOURCE_FILE2} 2>> ${LOG_FILE}
+
+printf "\\tCase 2: use the -classpath option\\n"
+env CLASSPATH= ${SCALAC} -classpath ${OUTPUT_DIR} \
+ -d ${OUTPUT_DIR} ${SOURCE_FILE2} 2>> ${LOG_FILE}
+
+printf "\\tCase 3: use the current directory as default classpath\\n"
+(cd ${OUTPUT_DIR} &&
+env CLASSPATH= ${SCALAC} ${SOURCE_FILE2} 2>> ${LOG_FILE})
+
+if [ "$?" = "0" ] ; then
+
+ ############################## scala #####################################
+ printf_outline "\\nTest the 'scala' command\\n"
+
+ printf "\\tCase 1: use the CLASSPATH environment variable\\n"
+ env CLASSPATH=${OUTPUT_DIR} ${SCALA} ${SCALA_MAIN2} 1 \
+ 1>> ${LOG_FILE}
+
+ printf "\\tCase 2: use the -classpath option\\n"
+ env CLASSPATH= ${SCALA} -cp ${OUTPUT_DIR} ${SCALA_MAIN2} 2 \
+ 1>> ${LOG_FILE}
+
+ printf "\\tCase 3: use the current directory as default classpath\\n"
+ (cd ${OUTPUT_DIR} &&
+ env CLASSPATH= ${SCALA} ${SCALA_MAIN2} 3 1>> ${LOG_FILE})
+
+fi
+
+##############################################################################
+# Check file
+
+(cat << EOF
+1: test 1 passed
+1: test 2 passed
+1: test 3 passed
+This is an interpreter for Scala.
+Type in expressions to have them evaluated.
+Type :quit to exit the interpreter.
+Type :compile followed by a filename to compile a complete Scala file.
+Type :load followed by a filename to load a sequence of interpreter commands.
+Type :help to repeat this message later.
+
+scala> 1: test 1 passed
+line0: scala.Unit = ()
+
+scala>
+This is an interpreter for Scala.
+Type in expressions to have them evaluated.
+Type :quit to exit the interpreter.
+Type :compile followed by a filename to compile a complete Scala file.
+Type :load followed by a filename to load a sequence of interpreter commands.
+Type :help to repeat this message later.
+
+scala> 1: test 2 passed
+line0: scala.Unit = ()
+
+scala>
+This is an interpreter for Scala.
+Type in expressions to have them evaluated.
+Type :quit to exit the interpreter.
+Type :compile followed by a filename to compile a complete Scala file.
+Type :load followed by a filename to load a sequence of interpreter commands.
+Type :help to repeat this message later.
+
+scala> 1: test 3 passed
+line0: scala.Unit = ()
+
+scala>
+${TMP_DIR}/src/test2/Main.scala:5 error: not found: value test1
+ test1.Main.main(args)
+ ^
+one error found
+2: 1: test 1 passed
+2: 1: test 2 passed
+2: 1: test 3 passed
+EOF
+) > ${CHECK_FILE}
+
+printf_outline "\\nDifferences between check file and log file:\\n"
+${DIFF} ${CHECK_FILE} ${LOG_FILE}
+
+##############################################################################
+# Epilog
+
+if [ "$LEVEL" = "info" ] ; then
+ printf_outline "\\nSource files:\\n"
+ cat ${SOURCE_FILE1} ${SOURCE_FILE2}
+elif [ "$LEVEL" = "verbose" ] ; then
+ printf_outline "\\nSource files:\\n"
+ cat ${SOURCE_FILE1} ${SOURCE_FILE2}
+ printf_outline "\\nTest directory:\\n"
+ tree ${TMP_DIR}
+fi
+
+rm -rf ${TMP_DIR}
+
+##############################################################################