Merge branch 'tz/doc-apostrophe-no-longer-needed'
[gitweb.git] / t / test-lib-functions.sh
index bbf68712ccce6556b92004f55a8de14216dd57ac..788ea1f18b99c5edacd9ae0ee81310141c799c6e 100644 (file)
@@ -120,13 +120,7 @@ remove_cr () {
 # If $1 is 'infinity', output forever or until the receiving pipe stops reading,
 # whichever comes first.
 generate_zero_bytes () {
-       perl -e 'if ($ARGV[0] == "infinity") {
-               while (-1) {
-                       print "\0"
-               }
-       } else {
-               print "\0" x $ARGV[0]
-       }' "$@"
+       test-tool genzeros "$@"
 }
 
 # In some bourne shell implementations, the "unset" builtin returns
@@ -599,6 +593,15 @@ test_dir_is_empty () {
        fi
 }
 
+# Check if the file exists and has a size greater than zero
+test_file_not_empty () {
+       if ! test -s "$1"
+       then
+               echo "'$1' is not a non-empty file."
+               false
+       fi
+}
+
 test_path_is_missing () {
        if test -e "$1"
        then
@@ -940,6 +943,34 @@ test_when_finished () {
                } && (exit \"\$eval_ret\"); eval_ret=\$?; $test_cleanup"
 }
 
+# This function can be used to schedule some commands to be run
+# unconditionally at the end of the test script, e.g. to stop a daemon:
+#
+#      test_expect_success 'test git daemon' '
+#              git daemon &
+#              daemon_pid=$! &&
+#              test_atexit 'kill $daemon_pid' &&
+#              hello world
+#      '
+#
+# The commands will be executed before the trash directory is removed,
+# i.e. the atexit commands will still be able to access any pidfiles or
+# socket files.
+#
+# Note that these commands will be run even when a test script run
+# with '--immediate' fails.  Be careful with your atexit commands to
+# minimize any changes to the failed state.
+
+test_atexit () {
+       # We cannot detect when we are in a subshell in general, but by
+       # doing so on Bash is better than nothing (the test will
+       # silently pass on other shells).
+       test "${BASH_SUBSHELL-0}" = 0 ||
+       error "bug in test script: test_atexit does nothing in a subshell"
+       test_atexit_cleanup="{ $*
+               } && (exit \"\$eval_ret\"); eval_ret=\$?; $test_atexit_cleanup"
+}
+
 # Most tests can use the created repository, but some may need to create more.
 # Usage: test_create_repo <directory>
 test_create_repo () {
@@ -1302,7 +1333,7 @@ test_set_port () {
                        port=$(($port + 10000))
                fi
                ;;
-       *[^0-9]*|0*)
+       *[!0-9]*|0*)
                error >&7 "invalid port number: $port"
                ;;
        *)