commit:     cdfb0ef04feb09260ee2631c6900044fdbfe476f
Author:     Kerin Millar <kfm <AT> plushkava <DOT> net>
AuthorDate: Tue Feb  7 05:06:14 2023 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Tue Feb  7 23:39:33 2023 +0000
URL:        
https://gitweb.gentoo.org/proj/gentoo-functions.git/commit/?id=cdfb0ef0

Convert the test suite to sh, eliminating the bash dependency

This renders the test suite much more useful than it was because the
tests will now be performed using the system's sh(1) implementation,
whatever it may be.

Signed-off-by: Kerin Millar <kfm <AT> plushkava.net>
Signed-off-by: Sam James <sam <AT> gentoo.org>

 test-functions | 189 ++++++++++++++++++++++++++++++---------------------------
 1 file changed, 100 insertions(+), 89 deletions(-)

diff --git a/test-functions b/test-functions
index 39216b2..d5816f1 100755
--- a/test-functions
+++ b/test-functions
@@ -1,154 +1,165 @@
-#!/bin/bash
-
+#!/bin/sh
+# shellcheck disable=2015
 # Requires mktemp(1) and touch(1) from GNU coreutils.
 
 bailout() {
        printf 'Bail out! %s.\n' "$1"
+       cleanup_tmpdir
        exit 1
 }
 
 assign_tmpdir() {
+       # shellcheck disable=1007
        dir=$(mktemp -d) \
        && CDPATH= cd -- "${dir}" \
        || bailout "Couldn't create or change to the temp dir"
 }
 
+cleanup_tmpdir() {
+       if [ -n "${dir}" ]; then
+               rm -rf -- "${dir}"
+       fi
+}
+
 test_is_older_than() {
-       local age desc i passed total tstamp
-       local -a tests=(
-               1  N/A           N/A
-               0  newer         newer
-               1  newer         newer-empty
-               0  newer         newer/file
-               1  newer         non-existent
-               1  newer         older
-               1  newer         older-empty
-               1  newer         older/file
-               0  newer-empty   newer
-               1  newer-empty   newer-empty
-               0  newer-empty   newer/file
-               1  newer-empty   non-existent
-               1  newer-empty   older
-               1  newer-empty   older-empty
-               1  newer-empty   older/file
-               1  newer/file    newer
-               1  newer/file    newer-empty
-               1  newer/file    newer/file
-               1  newer/file    non-existent
-               1  newer/file    older
-               1  newer/file    older-empty
-               1  newer/file    older/file
-               0  non-existent  newer
-               0  non-existent  newer-empty
-               0  non-existent  newer/file
-               1  non-existent  non-existent
-               0  non-existent  older
-               0  non-existent  older-empty
-               0  non-existent  older/file
-               0  older         newer
-               0  older         newer-empty
-               0  older         newer/file
-               1  older         non-existent
-               0  older         older
-               1  older         older-empty
-               0  older         older/file
-               0  older-empty   newer
-               0  older-empty   newer-empty
-               0  older-empty   newer/file
-               1  older-empty   non-existent
-               0  older-empty   older
-               1  older-empty   older-empty
-               0  older-empty   older/file
-               0  older/file    newer
-               0  older/file    newer-empty
-               0  older/file    newer/file
-               1  older/file    non-existent
-               1  older/file    older
-               1  older/file    older-empty
+       set -- \
+               1  N/A           N/A \
+               0  newer         newer \
+               1  newer         newer-empty \
+               0  newer         newer/file \
+               1  newer         non-existent \
+               1  newer         older \
+               1  newer         older-empty \
+               1  newer         older/file \
+               0  newer-empty   newer \
+               1  newer-empty   newer-empty \
+               0  newer-empty   newer/file \
+               1  newer-empty   non-existent \
+               1  newer-empty   older \
+               1  newer-empty   older-empty \
+               1  newer-empty   older/file \
+               1  newer/file    newer \
+               1  newer/file    newer-empty \
+               1  newer/file    newer/file \
+               1  newer/file    non-existent \
+               1  newer/file    older \
+               1  newer/file    older-empty \
+               1  newer/file    older/file \
+               0  non-existent  newer \
+               0  non-existent  newer-empty \
+               0  non-existent  newer/file \
+               1  non-existent  non-existent \
+               0  non-existent  older \
+               0  non-existent  older-empty \
+               0  non-existent  older/file \
+               0  older         newer \
+               0  older         newer-empty \
+               0  older         newer/file \
+               1  older         non-existent \
+               0  older         older \
+               1  older         older-empty \
+               0  older         older/file \
+               0  older-empty   newer \
+               0  older-empty   newer-empty \
+               0  older-empty   newer/file \
+               1  older-empty   non-existent \
+               0  older-empty   older \
+               1  older-empty   older-empty \
+               0  older-empty   older/file \
+               0  older/file    newer \
+               0  older/file    newer-empty \
+               0  older/file    newer/file \
+               1  older/file    non-existent \
+               1  older/file    older \
+               1  older/file    older-empty \
                1  older/file    older/file
-       )
 
        # The mtimes need to be explicitly assigned. Empirical evidence has 
shown
        # that executing mkdir(1) sequentially, with a single operand each time,
        # does not guarantee the order of the resulting mtimes. As such, the
        # implementation of touch(1) from coreutils is required.
-       local -x TZ=UTC
        tstamp=197001010000
        for age in older newer; do
-               mkdir "${age}"{,-empty} \
+               mkdir "${age}" "${age}-empty" \
                && touch -m -t "${tstamp%0}1" "${age}"/file \
-               && touch -m -t "${tstamp}" "${age}"{,-empty} \
+               && touch -m -t "${tstamp}" "${age}" "${age}-empty" \
                || bailout "Couldn't create or adjust the mtimes of the sample 
files"
                tstamp=197001010100 # add an hour
        done
 
-       total=$(( ${#tests[@]} / 3 ))
        passed=0
-       printf '1..%d\n' "${total}"
-       for ((i = 0; i < total; i++)); do
-               set -- "${tests[@]:i*3:3}"
-               if [[ $2 != N/A && $3 != N/A ]]; then
+       total=$(( $# / 3 ))
+       i=1
+       printf '%d..%d\n' "${i}" "${total}"
+       while [ "${i}" -le "${total}" ]; do
+               if [ "$2" != "N/A" ] && [ "$3" != "N/A" ]; then
                        desc="is_older_than $2 $3 (expecting $1)"
                        is_older_than "$2" "$3"
                else
                        desc="is_older_than (expecting $1)"
                        is_older_than
                fi
-               if (( $? == $1 )); then
-                       (( ++passed ))
+               if [ "$?" -eq "$1" ]; then
+                       passed=$((passed + 1))
                else
                        printf 'not '
                fi
-               printf 'ok %d - %s\n' "$((i + 1))" "${desc}"
+               printf 'ok %d - %s\n' "${i}" "${desc}"
+               i=$((i + 1))
+               shift 3
        done
        return "$(( passed < total ))"
 }
 
 test_get_bootparam() {
-       local desc i input passed total
-       local -a tests=(
-               1  N/A      "${input:=foo gentoo=bar,baz quux}"
-               1  ''       "${input}"
-               1  ''       "gentoo="
-               1  foo      "${input}"
-               0  bar      "${input}"
-               0  baz      "${input}"
-               1  bar,baz  "${input}"
-       )
+       set -- \
+               1  N/A      "${cmdline:=foo gentoo=bar,baz quux}" \
+               1  ''       "${cmdline}" \
+               1  ''       "gentoo=" \
+               1  foo      "${cmdline}" \
+               0  bar      "${cmdline}" \
+               0  baz      "${cmdline}" \
+               1  bar,baz  "${cmdline}"
 
-       total=$(( ${#tests[@]} / 3 ))
-       printf '1..%d\n' "${total}"
-       for ((i = 0; i < total; i++)); do
-               set -- "${tests[@]:i*3:3}"
-               if [[ $2 == N/A ]]; then
+       passed=0
+       total=$(( $# / 3 ))
+       i=1
+       printf '%d..%d\n' "${i}" "${total}"
+       while [ "${i}" -le "${total}" ]; do
+               if [ "$2" = "N/A" ]; then
                        desc="get_bootparam (expecting $1)"
-                       get_bootparam
+                       printf '%s\n' "$3" | get_bootparam
                else
                        desc="get_bootparam \"$2\" (expecting $1)"
-                       get_bootparam "$2"
-               fi <<<"$3"
-               if (( $? == $1 )); then
-                       (( ++passed ))
+                       printf '%s\n' "$3" | get_bootparam "$2"
+               fi
+               if [ "$?" -eq "$1" ]; then
+                       passed=$((passed + 1))
                else
                        printf 'not '
                fi
-               printf 'ok %d - %s\n' "$((i + 1))" "${desc}"
+               printf 'ok %d - %s\n' "${i}" "${desc}"
+               i=$((i + 1))
+               shift 3
        done
        return "$(( passed < total ))"
 }
 
+
 printf 'TAP version 14\n'
 
-if ! source ./functions.sh; then
+if ! . ./functions.sh; then
        bailout "Couldn't source ./functions.sh"
 fi
 
 unset -v dir
-trap '[[ ${dir} ]] && rm -rf -- "${dir}"' EXIT
 assign_tmpdir
 
-TEST_GENFUNCS=1
+export TEST_GENFUNCS=1
+export TZ=UTC
+
 rc=0
 test_is_older_than || rc=1
 test_get_bootparam || rc=1
+cleanup_tmpdir
 exit "${rc}"

Reply via email to