adding chinese language (zh)
[edward.git] / run-tests
index 5cbdb2720d9bb66b88d1b633c0f347c91c6e80e2..30095eb2b4419eb8440398cac60e49b38e8f336a 100755 (executable)
--- a/run-tests
+++ b/run-tests
 # Copyright (C) 2015 Andrew Engelbrecht                     (AGPLv3+)    *
 #*************************************************************************
 
-G_HOME=./tests/testgnupghome
+#TEST_TYPES="gpg-flatten flatten gpg-plain"
+TEST_TYPES="gpg-flatten flatten"
 
-OUT_DIFF_1="$(./edward < ./tests/test1.eml | GNUPGHOME="$G_HOME" gpg 2> /dev/null | diff -Z -u ./tests/out1.txt - )"
+function _main {
 
-if [ -n "$OUT_DIFF_1" ] ; then
-    echo "*** test 1 failed! difference:" >&2
-    echo "$OUT_DIFF_1" >&2
-fi
+    TEST_TYPES="$1"
+    SCRIPT_DIR="$(_get_script_dir)"
 
+    _run_all_tests "$SCRIPT_DIR" "$TEST_TYPES"
+}
+
+function _run_all_tests {
+
+    SCRIPT_DIR="$1"
+    TEST_TYPES="$2"
+
+    ERROR_COUNT="0"
+    for TYPE in $TEST_TYPES ; do
+        ERRORS="$(_run_test_type "$SCRIPT_DIR" "$TYPE")"
+
+        ERROR_COUNT="$(expr "$ERROR_COUNT" + "$ERRORS")"
+    done
+
+    if [ "$ERROR_COUNT" -ne "0" ] ; then
+        echo "*** $PROGNAME: FAILED test count: $ERROR_COUNT" >&2
+        exit 1
+    fi
+
+    exit 0
+
+}
+
+function _run_test_type {
+
+    SCRIPT_DIR="$1"
+    TEST_TYPE="$2"
+
+    TESTS_DIR="$SCRIPT_DIR/tests"
+    G_HOME="$TESTS_DIR/testgnupghome"
+    EDWARD="$SCRIPT_DIR/edward"
+    EDWARD_OPT="-p"
+    FLATTEN_MIME="$TESTS_DIR/flatten-mime"
+
+    ERROR_COUNT="0"
+    for TEST_NAME in $(ls $TESTS_DIR/$TEST_TYPE-*.eml) ; do
+
+        TEST_INPUT="$TEST_NAME"
+        TEST_OUTPUT="$(dirname "$TEST_NAME")/$(basename -s .eml "$TEST_NAME").out"
+
+        if [ ! -f "$TEST_OUTPUT" ] ; then
+            echo "*** $PROGNAME: ERROR: File not found: $TEST_OUTPUT" >&2
+            ERROR_COUNT="$(expr "$ERROR_COUNT" + 1 )"
+            continue
+        fi
+
+        ERROR="$("_exec_$TEST_TYPE" "$TEST_NAME" "$G_HOME" "$EDWARD" "$EDWARD_OPT" "$FLATTEN_MIME" "$TEST_INPUT" "$TEST_OUTPUT")"
+
+        ERROR_COUNT="$(expr "$ERROR_COUNT" + "$ERROR")"
+
+    done
+
+    echo "$ERROR_COUNT"
+}
+
+function _exec_gpg-flatten {
+
+    TEST_NAME="$1"
+    G_HOME="$2"
+    TEST_EXEC_1="$3"
+    TEST_EXEC_1_OPT="$4"
+    TEST_EXEC_2="$5"
+    TEST_INPUT="$6"
+    TEST_OUTPUT="$7"
+
+    PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | GNUPGHOME="$G_HOME" gpg 2> /dev/null | "$TEST_EXEC_2" )"
+
+    ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")"
+
+    echo "$ERROR"
+}
+
+function _exec_gpg-plain {
+
+    TEST_NAME="$1"
+    G_HOME="$2"
+    TEST_EXEC_1="$3"
+    TEST_EXEC_1_OPT="$4"
+    TEST_INPUT="$6"
+    TEST_OUTPUT="$7"
+
+    PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | GNUPGHOME="$G_HOME" gpg 2> /dev/null )"
+
+    ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")"
+
+    echo "$ERROR"
+}
+
+function _exec_flatten {
+
+    TEST_NAME="$1"
+    TEST_EXEC_1="$3"
+    TEST_EXEC_1_OPT="$4"
+    TEST_EXEC_2="$5"
+    TEST_INPUT="$6"
+    TEST_OUTPUT="$7"
+
+    PROGRAM_OUT="$(time "$TEST_EXEC_1" "$TEST_EXEC_1_OPT" < "$TEST_INPUT" | "$TEST_EXEC_2" )"
+
+    ERROR="$(_diff "$TEST_NAME" "$TEST_OUTPUT" "$PROGRAM_OUT")"
+
+    echo "$ERROR"
+}
+
+function _diff {
+
+    TEST_NAME="$1"
+    TEST_OUT="$2"
+    PROGRAM_OUT="$3"
+
+    OUT_DIFF="$(echo "$PROGRAM_OUT" | diff -u "$TEST_OUT" - )"
+
+    if [ -n "$OUT_DIFF" ] ; then
+        echo "*** $PROGNAME: TEST $(basename "$TEST_NAME") FAILED! Output difference:" >&2
+        echo "$OUT_DIFF" >&2
+
+        echo -n "1"
+        return
+    fi
+
+    echo -n "0"
+}
+
+function _get_script_dir {
+
+    # gives the directory containing this script
+    # https://stackoverflow.com/questions/59895
+    SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+
+    echo -n "$SCRIPT_DIR"
+}
+
+PROGNAME="$(basename $0)"
+
+_main "$TEST_TYPES"