From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id E48B01581D3 for ; Sat, 18 May 2024 14:04:42 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 32AA9E2A33; Sat, 18 May 2024 14:04:42 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 10D30E2A33 for ; Sat, 18 May 2024 14:04:42 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 370B533BE93 for ; Sat, 18 May 2024 14:04:41 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 7A2FC132F for ; Sat, 18 May 2024 14:04:39 +0000 (UTC) From: "Sam James" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Sam James" Message-ID: <1716027274.730f6a6388342cdbe2a80fe78cfce30b8c952cab.sam@gentoo> Subject: [gentoo-commits] proj/gentoo-functions:master commit in: / X-VCS-Repository: proj/gentoo-functions X-VCS-Files: test-functions X-VCS-Directories: / X-VCS-Committer: sam X-VCS-Committer-Name: Sam James X-VCS-Revision: 730f6a6388342cdbe2a80fe78cfce30b8c952cab X-VCS-Branch: master Date: Sat, 18 May 2024 14:04:39 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: b5ea9a7f-5509-4add-a9b6-eee2813ac8c9 X-Archives-Hash: 823449bb9dfc756fa35fce4b2a28a312 commit: 730f6a6388342cdbe2a80fe78cfce30b8c952cab Author: Kerin Millar plushkava net> AuthorDate: Sat May 18 10:04:13 2024 +0000 Commit: Sam James gentoo org> CommitDate: Sat May 18 10:14:34 2024 +0000 URL: https://gitweb.gentoo.org/proj/gentoo-functions.git/commit/?id=730f6a63 test-functions: Fix a spurious test failure The second-to-last commit added a test case for the die() function but also made it so that the exit status of each test is always compared to the expected value with the -eq operator. This turns out be insufficiently inflexible. For example, cd may return 2 in bash but 1 in another shell. Address this by requiring for each operand slice defined by a callback function to begin with an operator name, and by having the iterate_tests() function use the operator at the time of invoking the test utility. Signed-off-by: Kerin Millar plushkava.net> test-functions | 373 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 188 insertions(+), 185 deletions(-) diff --git a/test-functions b/test-functions index e087a3c..4360eb2 100755 --- a/test-functions +++ b/test-functions @@ -26,14 +26,14 @@ cleanup_tmpdir() { test_chdir() { set -- \ - 1 grandchild \ - 1 var \ - 0 -L \ - 0 -p \ - 0 -e \ - 0 -@ \ - 0 - \ - 0 child + ge 1 grandchild \ + ge 1 var \ + eq 0 -L \ + eq 0 -p \ + eq 0 -e \ + eq 0 -@ \ + eq 0 - \ + eq 0 child if ! mkdir -p -- -L -p -e -@ - child child/grandchild; then bailout "Couldn't set up all test directories" @@ -51,11 +51,12 @@ test_chdir() { && cd - >/dev/null } - iterate_tests 2 "$@" + iterate_tests 3 "$@" } test_chdir_noop() { - set -- 0 '' + set -- \ + eq 0 '' callback() { shift @@ -65,15 +66,15 @@ test_chdir_noop() { || { cd - >/dev/null; false; } } - iterate_tests 2 "$@" + iterate_tests 3 "$@" } test_die() { set -- \ - 1 0 \ - 2 2 \ - 126 126 \ - 255 255 + eq 1 0 \ + eq 2 2 \ + eq 126 126 \ + eq 255 255 callback() { test_description="( exit "$2" ); die" @@ -87,7 +88,7 @@ test_die() { fi } - iterate_tests 2 "$@" + iterate_tests 3 "$@" } test_ebegin() { @@ -111,60 +112,60 @@ test_ebegin() { test_is_older_than() { set -- \ - 1 N/A N/A \ - 1 newer N/A \ - 1 newer-empty N/A \ - 1 newer/file N/A \ - 1 non-existent 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 + ge 1 N/A N/A \ + ge 1 newer N/A \ + ge 1 newer-empty N/A \ + ge 1 newer/file N/A \ + ge 1 non-existent N/A \ + eq 0 newer newer \ + ge 1 newer newer-empty \ + eq 0 newer newer/file \ + ge 1 newer non-existent \ + ge 1 newer older \ + ge 1 newer older-empty \ + ge 1 newer older/file \ + eq 0 newer-empty newer \ + ge 1 newer-empty newer-empty \ + eq 0 newer-empty newer/file \ + ge 1 newer-empty non-existent \ + ge 1 newer-empty older \ + ge 1 newer-empty older-empty \ + ge 1 newer-empty older/file \ + ge 1 newer/file newer \ + ge 1 newer/file newer-empty \ + ge 1 newer/file newer/file \ + ge 1 newer/file non-existent \ + ge 1 newer/file older \ + ge 1 newer/file older-empty \ + ge 1 newer/file older/file \ + eq 0 non-existent newer \ + eq 0 non-existent newer-empty \ + eq 0 non-existent newer/file \ + ge 1 non-existent non-existent \ + eq 0 non-existent older \ + eq 0 non-existent older-empty \ + eq 0 non-existent older/file \ + eq 0 older newer \ + eq 0 older newer-empty \ + eq 0 older newer/file \ + ge 1 older non-existent \ + eq 0 older older \ + ge 1 older older-empty \ + eq 0 older older/file \ + eq 0 older-empty newer \ + eq 0 older-empty newer-empty \ + eq 0 older-empty newer/file \ + ge 1 older-empty non-existent \ + eq 0 older-empty older \ + ge 1 older-empty older-empty \ + eq 0 older-empty older/file \ + eq 0 older/file newer \ + eq 0 older/file newer-empty \ + eq 0 older/file newer/file \ + ge 1 older/file non-existent \ + ge 1 older/file older \ + ge 1 older/file older-empty \ + ge 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 @@ -184,24 +185,24 @@ test_is_older_than() { is_older_than "$@" } - iterate_tests 3 "$@" + iterate_tests 4 "$@" } test_get_bootparam() { cmdline="foo gentoo=bar,baz quux" set -- \ - 1 "${cmdline}" N/A \ - 1 "${cmdline}" '' \ - 1 "gentoo=" '' \ - 1 "${cmdline}" foo \ - 0 "${cmdline}" bar \ - 0 "foo gentoo=gentoo=1,bar baz" bar \ - 0 "foo gentoo=bar,gentoo=1 baz" bar \ - 0 "${cmdline}" baz \ - 1 "${cmdline}" bar,baz \ - 0 "foo gentoo=bar,gentoo=1 baz" gentoo=1 \ - 0 "foo gentoo=gentoo=1,bar baz" gentoo=1 \ - 1 "${cmdline}" quux + ge 1 "${cmdline}" N/A \ + ge 1 "${cmdline}" '' \ + ge 1 "gentoo=" '' \ + ge 1 "${cmdline}" foo \ + eq 0 "${cmdline}" bar \ + eq 0 "foo gentoo=gentoo=1,bar baz" bar \ + eq 0 "foo gentoo=bar,gentoo=1 baz" bar \ + eq 0 "${cmdline}" baz \ + ge 1 "${cmdline}" bar,baz \ + eq 0 "foo gentoo=bar,gentoo=1 baz" gentoo=1 \ + eq 0 "foo gentoo=gentoo=1,bar baz" gentoo=1 \ + ge 1 "${cmdline}" quux callback() { cmdline=$2 @@ -210,16 +211,16 @@ test_get_bootparam() { printf '%s\n' "${cmdline}" | get_bootparam "$@" } - iterate_tests 3 "$@" + iterate_tests 4 "$@" } test_esyslog() { set -- \ - 1 0 N/A N/A N/A \ - 1 0 debug N/A N/A \ - 0 0 debug user N/A \ - 0 0 debug user '' \ - 0 1 debug user message + ge 1 0 N/A N/A N/A \ + ge 1 0 debug N/A N/A \ + eq 0 0 debug user N/A \ + eq 0 0 debug user '' \ + eq 0 1 debug user message logger() { # esyslog() ignores empty messages. By overriding logger(1), it @@ -242,54 +243,54 @@ test_esyslog() { esac } - iterate_tests 5 "$@" + iterate_tests 6 "$@" } test_is_identifier() { set -- \ - 1 '' \ - 1 _ \ - 1 0 \ - 1 0a \ - 1 0Z \ - 1 9 \ - 1 9a \ - 1 9Z \ - 1 /a \ - 1 /Z \ - 1 .a \ - 1 .Z \ - 1 [a \ - 1 [Z \ - 1 '`a' \ - 1 '`Z' \ - 1 '{a' \ - 1 '{Z' \ - 1 '|a' \ - 1 '|Z' \ - 1 a/ \ - 1 Z/ \ - 1 a. \ - 1 Z. \ - 1 a[ \ - 1 Z[ \ - 1 'a`' \ - 1 'Z`' \ - 1 'a{' \ - 1 'Z{' \ - 1 'a|' \ - 1 'Z|' \ - 0 a \ - 0 Z \ - 0 __ \ - 0 _a \ - 0 _Z \ - 0 a_ \ - 0 Z_ \ - 0 a_a \ - 0 a_Z \ - 0 Z_a \ - 0 Z_Z + ge 1 '' \ + ge 1 _ \ + ge 1 0 \ + ge 1 0a \ + ge 1 0Z \ + ge 1 9 \ + ge 1 9a \ + ge 1 9Z \ + ge 1 /a \ + ge 1 /Z \ + ge 1 .a \ + ge 1 .Z \ + ge 1 '[a' \ + ge 1 '[Z' \ + ge 1 '`a' \ + ge 1 '`Z' \ + ge 1 '{a' \ + ge 1 '{Z' \ + ge 1 '|a' \ + ge 1 '|Z' \ + ge 1 a/ \ + ge 1 Z/ \ + ge 1 a. \ + ge 1 Z. \ + ge 1 'a[' \ + ge 1 'Z[' \ + ge 1 'a`' \ + ge 1 'Z`' \ + ge 1 'a{' \ + ge 1 'Z{' \ + ge 1 'a|' \ + ge 1 'Z|' \ + eq 0 a \ + eq 0 Z \ + eq 0 __ \ + eq 0 _a \ + eq 0 _Z \ + eq 0 a_ \ + eq 0 Z_ \ + eq 0 a_a \ + eq 0 a_Z \ + eq 0 Z_a \ + eq 0 Z_Z callback() { shift @@ -297,24 +298,24 @@ test_is_identifier() { is_identifier "$@" } - iterate_tests 2 "$@" + iterate_tests 3 "$@" } test_is_int() { set -- \ - 1 N/A \ - 1 ' ' \ - 1 ' 1 ' \ - 1 '' \ - 1 +1 \ - 1 +008 \ - 1 -008 \ - 1 008 \ - 1 x \ - 0 0 \ - 0 1 \ - 0 -1 \ - 0 123456789 + ge 1 N/A \ + ge 1 ' ' \ + ge 1 ' 1 ' \ + ge 1 '' \ + ge 1 +1 \ + ge 1 +008 \ + ge 1 -008 \ + ge 1 008 \ + ge 1 x \ + eq 0 0 \ + eq 0 1 \ + eq 0 -1 \ + eq 0 123456789 callback() { shift @@ -322,19 +323,19 @@ test_is_int() { is_int "$@" } - iterate_tests 2 "$@" + iterate_tests 3 "$@" } test_is_visible() { set -- \ - 1 '' \ - 1 ' ' \ - 1 "$(printf '\t')" \ - 1 "$(printf '\a')" \ - 0 . \ - 0 ' . ' \ - 0 "$(printf '\t.\t')" \ - 0 "$(printf '\a.\a')" + ge 1 '' \ + ge 1 ' ' \ + ge 1 "$(printf '\t')" \ + ge 1 "$(printf '\a')" \ + eq 0 . \ + eq 0 ' . ' \ + eq 0 "$(printf '\t.\t')" \ + eq 0 "$(printf '\a.\a')" callback() { shift @@ -342,35 +343,35 @@ test_is_visible() { _is_visible "$@" } - iterate_tests 2 "$@" + iterate_tests 3 "$@" } test_yesno() { set -- \ - 0 yes \ - 0 YES \ - 0 Yes \ - 0 true \ - 0 TRUE \ - 0 true \ - 0 on \ - 0 ON \ - 0 On \ - 0 1 \ - 1 no \ - 1 NO \ - 1 No \ - 1 false \ - 1 FALSE \ - 1 False \ - 1 off \ - 1 OFF \ - 1 Off \ - 1 0 \ - 1 not_a_nameref \ - 1 not-a-valid-nameref \ - 1 '_"; set -- yes # code injection' \ - 0 truthful_nameref + eq 0 yes \ + eq 0 YES \ + eq 0 Yes \ + eq 0 true \ + eq 0 TRUE \ + eq 0 true \ + eq 0 on \ + eq 0 ON \ + eq 0 On \ + eq 0 1 \ + ge 1 no \ + ge 1 NO \ + ge 1 No \ + ge 1 false \ + ge 1 FALSE \ + ge 1 False \ + ge 1 off \ + ge 1 OFF \ + ge 1 Off \ + ge 1 0 \ + ge 1 not_a_nameref \ + ge 1 not-a-valid-nameref \ + ge 1 '_"; set -- yes # code injection' \ + eq 0 truthful_nameref # shellcheck disable=2034 truthful_nameref=yes @@ -381,7 +382,7 @@ test_yesno() { yesno "$@" } - iterate_tests 2 "$@" + iterate_tests 3 "$@" } iterate_tests() { @@ -393,7 +394,7 @@ iterate_tests() { i=0 while [ "$((i += 1))" -le "${total}" ]; do code="callback" - j=0 + j=1 while [ "$((j += 1))" -le "${slice_width}" ]; do if eval "[ \"\$${j}\" = N/A ]"; then break @@ -402,12 +403,14 @@ iterate_tests() { fi done eval "${code}" - if [ "$?" -eq "$1" ]; then + retval=$? + if [ "${retval}" -"$1" "$2" ]; then passed=$((passed + 1)) else printf 'not ' fi - printf 'ok %d - %s (expecting %s)\n' "$((testnum += 1))" "${test_description}" "$1" + printf 'ok %d - %s (test %d -%s %d)\n' \ + "$((testnum += 1))" "${test_description}" "${retval}" "$1" "$2" shift "${slice_width}" done return "$(( passed < total ))"