X-Git-Url: https://git.draconx.ca/gitweb/dxcommon.git/blobdiff_plain/843799dbec995b276a7d017bb32c053747b55400..HEAD:/tests/functions.at diff --git a/tests/functions.at b/tests/functions.at index 507c105..bede78e 100644 --- a/tests/functions.at +++ b/tests/functions.at @@ -1,26 +1,8 @@ -dnl Copyright © 2015, 2021 Nick Bowler -dnl -dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2. -dnl This is free software: you are free to do what the fuck you want to. -dnl There is NO WARRANTY, to the extent permitted by law. - -m4_divert_push([PREPARE_TESTS])dnl -test_run_tap () { - "$builddir/t/$1" > "$1.tap" - status=$? - cat "$1.tap" - prove -e cat "$1.tap" - return $status -} -m4_divert_pop([PREPARE_TESTS]) - -m4_define([TEST_TAP], [AT_CHECK([test_run_tap "$1"], [0], [ignore])]) -m4_define([TEST_TAP_SIMPLE], [dnl -AT_SETUP([$1]) -AT_KEYWORDS([$4])dnl -m4_n([$3])dnl -TEST_TAP([$2]) -AT_CLEANUP]) +# Copyright © 2015, 2021-2024 Nick Bowler +# +# License GPLv3+: GNU General Public License version 3 or any later version. +# This is free software: you are free to change and redistribute it. +# There is NO WARRANTY, to the extent permitted by law. AT_BANNER([Binary packing functions]) @@ -32,6 +14,7 @@ TEST_TAP_SIMPLE([64-bit unsigned unpacking], [packtestu64], [], [pack]) AT_BANNER([Help formatting functions]) AT_SETUP([help_print_desc]) +AT_KEYWORDS([help]) AT_SKIP_IF([test ! -x "$builddir/t/helpdesc"]) @@ -50,11 +33,54 @@ sed -e '5,$s/^/ /' -e '6,$s/^/ /' \ AT_CHECK(["$builddir/t/helpdesc" 0 0 10 5 30 20 40 40 /dev/null], [ancient_printf=false], +[[sed -n -e 's/ [0-9]*$//' -e '/^ *-/p' -e 's/^ *-.*/ 0/p' expout >expout.tmp +mv -f expout.tmp expout +ancient_printf=:]]) AT_CHECK([m4_join([ ], ["$builddir/t/helpopt"], @@ -66,17 +92,87 @@ AT_CHECK([m4_join([ ], [--quux -q '@<:@ARG@:>@'], [--hello-this-is-a-very-long-option 20], [--hello-this-is-a-very-long-option 50], - [--not-long 12])], [0], -[[ --foo 7 - -b, --bar 11 - --baz=ARG 11 - -B, --baz=ARG 15 - --quux[=ARG] 14 - -q, --quux[=ARG] 18 - --hello-this-is-a-very-long-option + [--not-long 12], + [--flagged -f \&])], [0], [expout]) + +# ... we ultimately skip the test so there's an indication (other than an +# outright failure) that the function is not working completely. +AT_SKIP_IF([$ancient_printf]) + +AT_CLEANUP + +AT_SETUP([help_print_optstring (getopt_long_only)]) +AT_KEYWORDS([help]) + +AT_DATA([expout], +[[ -foo 5 + -bar 5 + -baz ARG 9 + -baz ARG 9 + -quux [ARG] 12 + -quux [ARG] 12 + -hello-this-is-a-very-long-option 0 - --hello-this-is-a-very-long-option 36 - --not-long 12 + -hello-this-is-a-very-long-option 34 + -not-long 10 + -flagged 9 ]]) +# Some very old printf implementations return 0 on success instead of the +# number of bytes written. The help_print_optstring function is not fully +# functional in this case. It should fallback to printing a newline and +# returning 0 so the overall --help output should be mostly acceptable. +# +# We verify that this indeed works properly by adjusting the expected +# output accordingly, but ... +AS_IF(["$builddir/t/printfchk" >/dev/null], [ancient_printf=false], +[[sed -n -e 's/ [0-9]*$//' -e '/^ *-/p' -e 's/^ *-.*/ 0/p' expout >expout.tmp +mv -f expout.tmp expout +ancient_printf=:]]) + +AT_CHECK([m4_join([ ], + ["$builddir/t/helpopt2"], + [--foo], + [--bar -b], + [--baz ARG], + [--baz -B ARG], + [--quux '@<:@ARG@:>@'], + [--quux -q '@<:@ARG@:>@'], + [--hello-this-is-a-very-long-option 20], + [--hello-this-is-a-very-long-option 50], + [--not-long 12], + [--flagged -f \&])], [0], [expout]) + +# ... we ultimately skip the test so there's an indication (other than an +# outright failure) that the function is not working completely. +AT_SKIP_IF([$ancient_printf]) + AT_CLEANUP + +AT_SETUP([help_print_optstring (NLS fullwidth/halfwidth)]) +AT_KEYWORDS([help nls]) + +AT_SKIP_IF([test ! -x "$builddir/t/helpopt3"]) +TEST_UTF8_LOCALE([locale_utf8]) + +# Avoid some deficient shell parsers barfing on UTF-8 sequences by +# generating them this way using octal escapes. +$AWK 'BEGIN { + zenkaku = "--\345\205\250\350\247\222"; + hankaku = "--\357\276\212\357\276\235\357\275\266\357\275\270" + + print zenkaku, hankaku >"args" + + print " " zenkaku "\t" "7" + print " " hankaku "\t" "7" +}' >expout