X-Git-Url: http://nitlanguage.org diff --git a/tests/tests.sh b/tests/tests.sh index bddecaf..9eda24c 100755 --- a/tests/tests.sh +++ b/tests/tests.sh @@ -18,23 +18,57 @@ # This shell script compile, run and verify Nit program files # Set lang do default to avoid failed tests because of locale -export LANG=C -export LC_ALL=C +export LANG=C.UTF-8 + +# Explore candidates for LC_ALL +# +# If C.UTF-8, the most agnostic UTF-8 locale is supported, we +# use it, otherwise we default to the UTF-8 system locale, and +# if unavailable, we default on C. +# +# Note that C however is not guaranteed to be UTF-8, and +# some tests may fail when relying on Unicode semantics. +locale_candidate=C.UTF-8 +if ! locale -a 2>/dev/null | grep -q C.UTF-8; then + locale_candidate="$(locale -a | grep -i utf8 | head -n1)" + if [ -z "$locale_candidate" ]; then + locale_candidate=C + fi +fi +export LC_ALL="$locale_candidate" + +if uname | grep Darwin 1>/dev/null 2>&1; then + export LANG=en_US.UTF-8 + export LC_ALL=en_US.UTF-8 +fi + export NIT_TESTING=true # Use the pid as a collision prevention export NIT_TESTING_ID=$$ export NIT_SRAND=0 +# Identify this as a tests.sh test to differentiate from a nitunit test +export NIT_TESTING_TESTS_SH=true + unset NIT_DIR # Get the first Java lib available if which_java=$(which javac 2>/dev/null); then - JAVA_HOME=$(dirname $(dirname $(readlink -f "$which_java"))) + + if sh -c "readlink -f ." 1>/dev/null 2>&1; then + READLINK="readlink -f" + else + # Darwin? + READLINK="readlink" + fi + JAVA_HOME=$(dirname $(dirname $($READLINK "$which_java"))) shopt -s nullglob paths=`echo $JAVA_HOME/jre/lib/*/{client,server}/libjvm.so` - paths=($paths) - JNI_LIB_PATH=`dirname ${paths[0]}` + if [ -n "$paths" ]; then + paths=($paths) + JNI_LIB_PATH=`dirname ${paths[0]}` + fi shopt -u nullglob fi @@ -130,12 +164,12 @@ else fi # Detect a working time command -if env time --quiet -f%U true 2>/dev/null; then - TIME="env time --quiet -f%U" -elif env time -f%U true 2>/dev/null; then - TIME="env time -f%U" -elif env gtime -f%U true 2>/dev/null; then - TIME="env gtime -f%U" +if command time --quiet -f%e true 2>/dev/null; then + TIME="command time --quiet -f%e" +elif command time -f%e true 2>/dev/null; then + TIME="command time -f%e" +elif command gtime -f%e true 2>/dev/null; then + TIME="command gtime -f%e" else TIME= fi @@ -148,12 +182,14 @@ else fi # Detect a working hostname command -if hostname --version | grep coreutils >/dev/null 2>&1; then +if hostname --version 2>&1 | grep coreutils >/dev/null 2>&1; then HOSTNAME="hostname" else HOSTNAME="hostname -s" fi +UNAME=`uname | sed s/-.*//` + # $1 is the pattern of the test # $2 is the file to compare to # the result is: @@ -373,7 +409,7 @@ need_skip() fi # Skip by OS - local os_skip_file=`uname`.skip + local os_skip_file=$UNAME.skip if test -e $os_skip_file && echo "$1" | grep -f "$os_skip_file" >/dev/null 2>&1; then echo "=> $2: [skip os]" echo >>$xml "" @@ -434,7 +470,7 @@ istodo() find_nitc() { local name="$enginebinname" - local recent=`ls -t ../src/$name ../src/$name_[0-9] ../bin/$name ../c_src/$name 2>/dev/null | head -1` + local recent=`ls -t ../src/$name ../src/$name_[0-9] ../bin/$name ../contrib/nitin/bin/$name ../c_src/$name 2>/dev/null | head -1` if [[ "x$recent" == "x" ]]; then echo "Could not find binary for engine $engine, aborting" exit 1 @@ -468,6 +504,7 @@ while [ $stop = false ]; do done enginebinname=$engine isinterpret= +isinteractive= case $engine in nitc|nitg) engine=nitcs; @@ -513,6 +550,10 @@ case $engine in OPT="--vm $OPT" savdirs="sav/niti/" ;; + nitin) + enginebinname=nitin + isinteractive=true + ;; nitj) engine=nitj; OPT="--compile-dir $compdir --ant" @@ -530,7 +571,7 @@ case $engine in ;; esac -savdirs="sav/`$HOSTNAME` sav/`uname` sav/$engine $savdirs sav/" +savdirs="sav/`$HOSTNAME` sav/$UNAME sav/$engine $savdirs sav/" # The default nitc compiler [ -z "$NITC" ] && find_nitc @@ -627,6 +668,15 @@ END > "$ff.compile.log" ERR=0 echo 0.0 > "$ff.time.out" + elif [ -n "$isinteractive" ]; then + cat > "$ff.bin" < "$ff.cmp.err" + > "$ff.compile.log" + ERR=0 + echo 0.0 > "$ff.time.out" else if skip_cc "$bf"; then nocc="--no-cc" @@ -692,7 +742,7 @@ END if [ -f "$ff.write" ]; then cat -- "$ff.write" >> "$ff.res" elif [ -d "$ff.write" ]; then - LANG=C /bin/ls -F "$ff.write" >> "$ff.res" + /bin/ls -F "$ff.write" >> "$ff.res" fi cp -- "$ff.res" "$ff.res2" cat -- "$ff.cmp.err" "$ff.err" "$ff.res2" > "$ff.res" @@ -734,7 +784,7 @@ END if [ -f "$fff.write" ]; then cat -- "$fff.write" >> "$fff.res" elif [ -d "$fff.write" ]; then - LANG=C /bin/ls -F -- "$fff.write" >> "$fff.res" + /bin/ls -F -- "$fff.write" >> "$fff.res" fi if [ -s "$fff.err" ]; then cp -- "$fff.res" "$fff.res2"