-dnl Copyright © 2015, 2021-2023 Nick Bowler
+dnl Copyright © 2015, 2021-2024 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])
-
AT_BANNER([Binary packing functions])
TEST_TAP_SIMPLE([signed unpacking], [packtests], [], [pack])
AT_CHECK(["$builddir/t/helpdesc" 0 0 10 5 30 20 40 40 <test.txt],
[0], [expout])
+AT_CHECK([AS_ECHO_N(["no trailing newline"]) |
+ "$builddir/t/helpdesc" 0 0], [0],
+[no trailing newline
+])
+
AT_CLEANUP
AT_SETUP([help_print_desc (empty description)])
AT_SKIP_IF([test ! -x "$builddir/t/helpdesc"])
-AT_CHECK(["$builddir/t/helpdesc" 0 0 0 20 </dev/null])
+AT_CHECK(["$builddir/t/helpdesc" 0 0 0 20 </dev/null], [0], [
+
+])
AT_CHECK(["$builddir/t/helpdesc" 1 20 </dev/null], [0], [
])
AT_SETUP([help_print_optstring])
AT_KEYWORDS([help])
-AT_SKIP_IF([test ! -x "$builddir/t/helpopt"])
+AT_DATA([expout],
+[[ --foo 6
+ -b, --bar 10
+ --baz=ARG 10
+ -B, --baz=ARG 14
+ --quux[=ARG] 13
+ -q, --quux[=ARG] 17
+ --hello-this-is-a-very-long-option
+ 0
+ --hello-this-is-a-very-long-option 35
+ --not-long 11
+ --flagged 10
+]])
+
+# 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/helpopt"],
[--hello-this-is-a-very-long-option 20],
[--hello-this-is-a-very-long-option 50],
[--not-long 12],
- [--flagged -f \&])], [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
- 0
- --hello-this-is-a-very-long-option 36
- --not-long 12
- --flagged 11
-]])
+ [--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_SKIP_IF([test ! -x "$builddir/t/helpopt2"])
+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 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"],
[--hello-this-is-a-very-long-option 20],
[--hello-this-is-a-very-long-option 50],
[--not-long 12],
- [--flagged -f \&])], [0],
-[[ -foo 6
- -bar 6
- -baz ARG 10
- -baz ARG 10
- -quux [ARG] 13
- -quux [ARG] 13
- -hello-this-is-a-very-long-option
- 0
- -hello-this-is-a-very-long-option 35
- -not-long 11
- -flagged 10
-]])
+ [--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 </dev/null
+
+AT_CHECK([LC_ALL=$locale_utf8 xargs "$builddir/t/helpopt3" <args],
+ [0], [expout])
AT_CLEANUP
+
+AT_BANNER([Miscellaneous functions])
+
+TEST_TAP_SIMPLE([copyright_symbol], [copysym], [], [])