summaryrefslogtreecommitdiff
path: root/test/runner.sh
blob: 827fa8fcbff08ad77b75c65a0ea9f76d34e70a51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#!/bin/sh

POSIXLY_CORRECT=1
export POSIXLY_CORRECT

TIDY='tidy --show-body-only 1 --quiet 1 --show-warnings 0'
SCRIPT="$1"
TESTDIR="$2"
PASSED=0
FAILED=0

abort() {
    echo "Error: $*"
    exit 1
}

test -f "$SCRIPT"   || abort "argument #1 invalid; not a file"
test -x "$SCRIPT"   || abort "argument #1 invalid; not executable"
echo "" | "$SCRIPT" || abort "argument #1 invalid; script failed to run"
test -d "$TESTDIR"  || abort "argument #2 invalid; not a directory"

for TEXT in "$TESTDIR"/*.text; do
    test -f "$TEXT" || abort "empty or invalid test directory"
    printf "$(basename "$TEXT" .text) ... "
    HTML=$(echo "$TEXT" | sed 's/\.text$/.html/')

    # We use mktemp to create an unpredictable, temporary filename.
    # The created file is immediately deleted, since we only want a
    # name to pass to mkfifo and "mktemp -u" is not portable.
    PIPE=$(mktemp .testpipe-XXXXXXXX)
    test -f "$PIPE" -a -n "$PIPE" || abort "mktemp failed"
    trap 'rm -f "$PIPE"' EXIT INT TERM HUP
    rm -f "$PIPE"
    mkfifo "$PIPE" || abort "unable to create named pipe"

    $SCRIPT "$TEXT" | $TIDY > "$PIPE" &
    DIFF=$($TIDY "$HTML" | diff "$PIPE" -)
    if test "$?" = 0; then
        PASSED=$(expr $PASSED + 1)
        echo OK
    else
        FAILED=$(expr $FAILED + 1)
        echo FAILED
        printf "\n$DIFF\n\n"
    fi
    rm -f "$PIPE"
done

printf "\n\n$PASSED passed; $FAILED failed.\n"
test "$FAILED" = 0 || exit 1