lib/html: implement the tag list as an hashset instead of a array.
[nit.git] / tests / tests.sh
index 67edfbd..99e3008 100755 (executable)
@@ -181,23 +181,23 @@ EOF
 function process_result()
 {
        # Result
-       pattern=$1
-       description=$2
-       pack=$3
-       SAV=""
-       NSAV=""
-       FIXME=""
-       NFIXME=""
-       SOSO=""
-       NSOSO=""
-       SOSOF=""
-       NSOSOF=""
-       OLD=""
-       LIST=""
-       FIRST=""
+       local pattern=$1
+       local description=$2
+       local pack=$3
+       local SAV=""
+       local NSAV=""
+       local FIXME=""
+       local NFIXME=""
+       local SOSO=""
+       local NSOSO=""
+       local SOSOF=""
+       local NSOSOF=""
+       local OLD=""
+       local LIST=""
+       local FIRST=""
 
        # Truncate too big res file
-       size=$(wc -c < "$outdir/$pattern.res")
+       local size=$(wc -c < "$outdir/$pattern.res")
        if test -n "$reslimit" -a "$size" -gt "$reslimit"; then
                # The most portable way to truncate a file is with Perl
                perl -e "truncate \"$outdir/$pattern.res\", $reslimit;"
@@ -207,7 +207,7 @@ function process_result()
        echo >>$xml "<testcase classname='`xmlesc "$pack"`' name='`xmlesc "$description"`' time='`cat -- "$outdir/$pattern.time.out"`' `timestamp`>"
        #for sav in "sav/$engine/fixme/$pattern.res" "sav/$engine/$pattern.res" "sav/fixme/$pattern.res" "sav/$pattern.res" "sav/$pattern.sav"; do
        for savdir in $savdirs; do
-               sav=$savdir/fixme/$pattern.res
+               local sav=$savdir/fixme/$pattern.res
                compare_to_result "$pattern" "$sav"
                case "$?" in
                        0)
@@ -260,7 +260,7 @@ function process_result()
                esac
        done
        OLD=`echo "$OLD" | sed -e 's/   */ /g' -e 's/^ //' -e 's/ $//'`
-       grep 'NOT YET IMPLEMENTED' "$outdir/$pattern.res" >/dev/null
+       istodo  "$outdir/$pattern.res"
        NYI="$?"
        if [ -n "$SAV" ]; then
                if [ -n "$OLD" ]; then
@@ -360,38 +360,68 @@ need_skip()
        fi
 
        # Skip by OS
-       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 "<testcase classname='`xmlesc "$3"`' name='`xmlesc "$2"`' `timestamp`><skipped/></testcase>"
                return 0
        fi
+
+       # Skip by hostname
+       local host_skip_file=`hostname -s`.skip
+       if test -e $host_skip_file && echo "$1" | grep -f "$host_skip_file" >/dev/null 2>&1; then
+               echo "=> $2: [skip hostname]"
+               echo >>$xml "<testcase classname='`xmlesc "$3"`' name='`xmlesc "$2"`' `timestamp`><skipped/></testcase>"
+               return 0
+       fi
        return 1
 }
 
 skip_exec()
 {
        test "$noskip" = true && return 1
-       if echo "$1" | grep -f "exec.skip" >/dev/null 2>&1; then
-               echo -n "_ "
-               return 0
-       fi
+       for savdir in $savdirs .; do
+               local f="$savdir/exec.skip"
+               test -f "$f" || continue
+               if echo "$1" | grep -f "$f" >/dev/null 2>&1; then
+                       echo -n "_ no exec by $f; "
+                       return 0
+               fi
+       done
        return 1
 }
 
 skip_cc()
 {
        test "$noskip" = true && return 1
-       if echo "$1" | grep -f "cc.skip" >/dev/null 2>&1; then
-               return 0
-       fi
+       for savdir in $savdirs .; do
+               local f="$savdir/cc.skip"
+               test -f "$f" || continue
+               if echo "$1" | grep -f "$f" >/dev/null 2>&1; then
+                       return 0
+               fi
+       done
+       return 1
+}
+
+# Check that the resfile ($1) matches some magic strings in `todo` files.
+istodo()
+{
+       test "$no" = true && return 1
+       for savdir in $savdirs .; do
+               local f="$savdir/todo"
+               test -f "$f" || continue
+               if grep -f "$f" "$1" >/dev/null 2>&1; then
+                       return 0
+               fi
+       done
        return 1
 }
 
 find_nitc()
 {
-       name="$enginebinname"
-       recent=`ls -t ../src/$name ../src/$name_[0-9] ../bin/$name ../c_src/$name 2>/dev/null | head -1`
+       local name="$enginebinname"
+       local recent=`ls -t ../src/$name ../src/$name_[0-9] ../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
@@ -472,7 +502,7 @@ case $engine in
                ;;
        nitj)
                engine=nitj;
-               OPT="--compile-dir $compdir"
+               OPT="--compile-dir $compdir --ant"
                enginebinname=nitj;
                savdirs="sav/nitc-common/"
                ;;
@@ -487,7 +517,7 @@ case $engine in
                ;;
 esac
 
-savdirs="sav/$engine $savdirs sav/"
+savdirs="sav/`hostname -s` sav/`uname` sav/$engine $savdirs sav/"
 
 # The default nitc compiler
 [ -z "$NITC" ] && find_nitc
@@ -548,7 +578,7 @@ for ii in "$@"; do
 
        tmp=${ii/../AA}
        if [ "x$tmp" = "x$ii" ]; then
-               includes="-I . -I ../lib/standard -I ../lib/standard/collection -I alt"
+               includes="-I . -I ../lib/core -I ../lib/core/collection -I alt"
        else
                includes="-I alt"
        fi