]> git.saurik.com Git - apt.git/blobdiff - test/integration/framework
tests: enhance output of grep and test fails
[apt.git] / test / integration / framework
index 190d4d665a48305e268c8178f515b9e6cd116e48..153c5bb255d856469426a400050d348538e34435 100644 (file)
@@ -77,12 +77,6 @@ if [ $MSGLEVEL -le 2 ]; then
        msgnmsg() { true; }
        msgtest() { true; }
        msgpass() { printf " ${CPASS}P${CNORMAL}"; }
-       msgskip() { printf " ${CWARNING}S${CNORMAL}" >&2; }
-       if [ -n "$CFAIL" ]; then
-               msgfail() { printf " ${CFAIL}FAIL${CNORMAL}" >&2; EXIT_CODE=$((EXIT_CODE+1)); }
-       else
-               msgfail() { printf " ###FAILED###" >&2; EXIT_CODE=$((EXIT_CODE+1)); }
-       fi
 fi
 if [ $MSGLEVEL -le 3 ]; then
        msginfo() { true; }
@@ -1228,6 +1222,36 @@ testmarkedauto() {
        aptmark showauto 2>&1 | checkdiff $COMPAREFILE - && msgpass || msgfail
 }
 
+msgfailoutput() {
+       local MSG="$1"
+       local OUTPUT="$2"
+       shift 2
+       echo >&2
+       if [ "$1" = 'grep' ]; then
+               while [ -n "$2" ]; do shift; done
+               echo "#### Complete file: $1 ####"
+               cat >&2 "$1" || true
+               echo '#### grep output ####'
+       elif [ "$1" = 'test' ]; then
+               # doesn't support ! or non-file flags
+               msgfailoutputstatfile() {
+                       local FILEFLAGS='^-[bcdefgGhkLOprsStuwx]$'
+                       if expr match "$1" "$FILEFLAGS" >/dev/null; then
+                               echo "#### stat(2) of file: $2 ####"
+                               stat "$2" || true
+                       fi
+               }
+               msgfailoutputstatfile "$2" "$3"
+               while [ -n "$5" ] && [ "$4" = '-o' -o "$4" = '-a' ]; do
+                       shift 3
+                       msgfailoutputstatfile "$2" "$3"
+               done
+               echo '#### test output ####'
+       fi
+       cat >&2 $OUTPUT
+       msgfail "$MSG"
+}
+
 testsuccess() {
        if [ "$1" = '--nomsg' ]; then
                shift
@@ -1237,10 +1261,10 @@ testsuccess() {
        local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output"
        if "$@" >${OUTPUT} 2>&1; then
                if expr match "$1" '^apt.*' >/dev/null; then
-                       if grep -q -E '^[WE]: ' "$OUTPUT"; then
-                               echo >&2
-                               cat >&2 $OUTPUT
-                               msgfail 'successful run, but output contains warnings/errors'
+                       if grep -q -E ' runtime error: ' "$OUTPUT"; then
+                               msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
+                       elif grep -q -E '^[WE]: ' "$OUTPUT"; then
+                               msgfailoutput 'successful run, but output contains warnings/errors' "$OUTPUT" "$@"
                        else
                                msgpass
                        fi
@@ -1249,9 +1273,7 @@ testsuccess() {
                fi
        else
                local EXITCODE=$?
-               echo >&2
-               cat >&2 $OUTPUT
-               msgfail "exitcode $EXITCODE"
+               msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@"
        fi
        aptautotest 'testsuccess' "$@"
 }
@@ -1264,14 +1286,12 @@ testwarning() {
        local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testsuccess.output"
        if "$@" >${OUTPUT} 2>&1; then
                if expr match "$1" '^apt.*' >/dev/null; then
-                       if grep -q -E '^E: ' "$OUTPUT"; then
-                               echo >&2
-                               cat >&2 $OUTPUT
-                               msgfail 'successful run, but output contains errors'
+                       if grep -q -E ' runtime error: ' "$OUTPUT"; then
+                               msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
+                       elif grep -q -E '^E: ' "$OUTPUT"; then
+                               msgfailoutput 'successful run, but output contains errors' "$OUTPUT" "$@"
                        elif ! grep -q -E '^W: ' "$OUTPUT"; then
-                               echo >&2
-                               cat >&2 $OUTPUT
-                               msgfail 'successful run, but output contains no warnings'
+                               msgfailoutput 'successful run, but output contains no warnings' "$OUTPUT" "$@"
                        else
                                msgpass
                        fi
@@ -1295,16 +1315,14 @@ testfailure() {
        local OUTPUT="${TMPWORKINGDIRECTORY}/rootdir/tmp/testfailure.output"
        if "$@" >${OUTPUT} 2>&1; then
                local EXITCODE=$?
-               echo >&2
-               cat >&2 $OUTPUT
-               msgfail "exitcode $EXITCODE"
+               msgfailoutput "exitcode $EXITCODE" "$OUTPUT" "$@"
        else
                local EXITCODE=$?
                if expr match "$1" '^apt.*' >/dev/null; then
-                       if ! grep -q -E '^E: ' "$OUTPUT"; then
-                               echo >&2
-                               cat >&2 $OUTPUT
-                               msgfail "run failed with exitcode ${EXITCODE}, but with no errors"
+                       if grep -q -E ' runtime error: ' "$OUTPUT"; then
+                               msgfailoutput 'compiler detected undefined behavior' "$OUTPUT" "$@"
+                       elif ! grep -q -E '^E: ' "$OUTPUT"; then
+                               msgfailoutput "run failed with exitcode ${EXITCODE}, but with no errors" "$OUTPUT" "$@"
                        else
                                msgpass
                        fi