]> git.pond.sub.org Git - empserver/blobdiff - tests/test-common.sh
tests: Rewrite the previous commit's sed_i helper
[empserver] / tests / test-common.sh
index bb37b7730d9992ab41230f804d94cda05e137a5d..f54ba4521e0b93a965030dff40b79e29e26a8b19 100644 (file)
@@ -46,7 +46,58 @@ keep_journal 2
 GODNEWS 0
 running_test_suite 1
 EOF
-    cp `git ls-files "$srcdir"/src/lib/global | uniq | grep '\.config$'` sandbox/share/empire/builtin
+    cp `perl "$srcdir"/src/scripts/ls-sources.pl "$srcdir"/src/lib/global '\.config$'` sandbox/share/empire/builtin
+}
+
+copy_tables()
+{
+    local t
+
+    for t
+    do [ -e sandbox/etc/empire/"$t".config ] || cp "$srcdir"/src/lib/global/$t.config sandbox/etc/empire
+    done
+}
+
+# sed -i isn't portable...
+sed_i()
+{
+    local script="$1"
+    shift
+    for i
+    do sed "$script" "$i" >sandbox/$$ && mv sandbox/$$ "$i"
+    done
+}
+
+customize()
+{
+    local key
+    for key
+    do
+       case $key in
+       big-city)
+           copy_tables sect
+           sed_i '/"c" .* norm/d;/^#.*"c" .* cana/s/^#/ /' sandbox/etc/empire/sect.config
+           ;;
+       esac
+    done
+    echo "custom_tables \"`cd sandbox/etc/empire && echo *.config`\"" >>$econfig
+}
+
+run_and_cmp()
+{
+    run "$@"
+    cmp_run "$1"
+}
+
+run()
+{
+    local name=$1 ret
+    shift
+    set +e
+    "$@" >>sandbox/$name.out 2>>sandbox/$name.err
+    ret=$?
+    set -e
+    echo $ret >>sandbox/$name.status
 }
 
 now()
@@ -120,6 +171,8 @@ feed_input()
 
 feed_files()
 {
+    local i
+
     for i
     do
        c="${i##*/*-}"
@@ -130,7 +183,7 @@ feed_files()
 
 feed_dir()
 {
-    feed_files `git ls-files "$@" | uniq | grep '/[0-9][0-9]-[^/]*$'`
+    feed_files `perl "$srcdir"/src/scripts/ls-sources.pl "$@" '/[0-9][0-9]-[^/]*$'`
 }
 
 begin_test()
@@ -161,7 +214,9 @@ begin_test()
        mv $data/lostitems $data/setup.lostitems
        >$data/lostitems
        mv $data/journal.log $data/setup.journal.log
+       normalize sandbox/var/empire/setup.journal.log
        mv $data/server.log $data/setup.server.log
+       normalize sandbox/var/empire/setup.server.log
     fi
     start_server
 }
@@ -172,6 +227,18 @@ end_test ()
     $empdump -x >sandbox/final.xdump
 }
 
+cmp_run()
+{
+    local i j exp
+
+    for i
+    do
+       for j in status out err
+       do cmp_out "$i.$j"
+       done
+    done
+}
+
 cmp_logs_xdump()
 {
     cmp_out var/empire/server.log var/empire/journal.log final.xdump
@@ -179,32 +246,64 @@ cmp_logs_xdump()
 
 cmp_out()
 {
-    local exp act nrm
+    local i
+
     for i
-    do
-       exp="$testdir/${i##*/}"
-       act="sandbox/$i"
-       nrm="sandbox/normalized-${i##*/}"
+    do cmp_out1 "$i"
+    done
+}
+
+normalize()
+{
+    local act="$1"
+    local nrm="${2-sandbox/normalized-${1##*/}}"
+
+    case "$act" in
+    *journal.log)
+       perl "$srcdir"/tests/normalize.pl -j "$act" ;;
+    *server.log)
+       perl "$srcdir"/tests/normalize.pl -s "$act" ;;
+    *.xdump)
+       perl "$srcdir"/tests/normalize.pl "$act" ;;
+    *.err)
+       perl -pe 's/\s+$/\n/;' -e "s,\Q$srcdir/tests\E,tests," "$act" ;;
+    *)
+       perl -pe 's/\s+$/\n/;' "$act" ;;
+    esac >"$nrm"
+}
+
+cmp_out1()
+{
+    local i=$1 exp="${2-$testdir/${1##*/}}"
+    local act="sandbox/$i"
+    local nrm="sandbox/normalized-${i##*/}"
+
+    if [ ! -e "$exp" ]
+    then
        case "$i" in
-       */journal.log)
-           perl "$srcdir"/tests/normalize.pl -j "$act" ;;
-       */server.log)
-           perl "$srcdir"/tests/normalize.pl -s "$act" ;;
-       *.xdump)
-           perl "$srcdir"/tests/normalize.pl "$act" ;;
+       *.status)
+           exp=sandbox/ok.status
+           echo 0 >sandbox/ok.status
+           ;;
        *)
-           perl -pe 's/\s+$/\n/;' "$act" ;;
-       esac >"$nrm"
-       if diff -u "$exp" "$nrm" >"$nrm.diff"
-       then
-           echo "$i OK"
-       elif [ "$EMPIRE_CHECK_ACCEPT" ]
-       then
-           echo "$i CHANGED"
-           cp "$nrm" "$exp"
-       else
-           failed=y
-           echo "$i FAIL"
-       fi
-    done
+           [ ! -e "$act" ] && return
+           exp=/dev/null
+           ;;
+           *.status)   exp=sandbox/ok.status; echo 0 >sandbox/ok.status ;;
+           *)          exp=/dev/null ;;
+       esac
+    fi
+
+    normalize "$act" "$nrm"
+    if diff -u "$exp" "$nrm" >"$nrm.diff"
+    then
+       echo "$i OK"
+    elif [ "$EMPIRE_CHECK_ACCEPT" ]
+    then
+       echo "$i CHANGED"
+       cp "$nrm" "$exp"
+    else
+       failed=y
+       echo "$i FAIL"
+    fi
 }