]> git.notmuchmail.org Git - notmuch/commitdiff
test: add test_expect_equal_file_nonempty
authorDavid Bremner <david@tethera.net>
Wed, 4 Aug 2021 10:42:32 +0000 (07:42 -0300)
committerDavid Bremner <david@tethera.net>
Sat, 21 Aug 2021 21:55:41 +0000 (14:55 -0700)
A common bug in tests is that the code used to generate the EXPECTED
file fails, generating no output. When the code generating the OUTPUT
file fails in the same way, the test passes, even though there is a
failure being hidden. Add a new test function that guards against
this.

test/test-lib.sh

index 6f4bb47fb88c681d015f0b879f3c7b148c34f70f..dc4962f560b6dc48dcf0de22fd7f25ac3903e832 100644 (file)
@@ -434,6 +434,26 @@ test_expect_equal_file () {
     test_diff_file_ "$1" "$2"
 }
 
     test_diff_file_ "$1" "$2"
 }
 
+# Like test_expect_equal, but takes two filenames. Fails if either is empty
+test_expect_equal_file_nonempty () {
+    exec 1>&6 2>&7             # Restore stdout and stderr
+    if [ -z "$inside_subtest" ]; then
+       error "bug in the test script: test_expect_equal_file_nonempty without test_begin_subtest"
+    fi
+    inside_subtest=
+    test "$#" = 2 ||
+       error "bug in the test script: not 2 parameters to test_expect_equal_file_nonempty"
+
+    for file in "$1" "$2"; do
+       if [ ! -s "$file" ]; then
+           test_failure_ "Missing or zero length file: $file"
+           return $?
+       fi
+    done
+
+    test_diff_file_ "$1" "$2"
+}
+
 # Like test_expect_equal, but arguments are JSON expressions to be
 # canonicalized before diff'ing.  If an argument cannot be parsed, it
 # is used unchanged so that there's something to diff against.
 # Like test_expect_equal, but arguments are JSON expressions to be
 # canonicalized before diff'ing.  If an argument cannot be parsed, it
 # is used unchanged so that there's something to diff against.