]> git.draconx.ca Git - dxcommon.git/blobdiff - tests/functions.at
help_print_optstring: Fix NLS test on AIX.
[dxcommon.git] / tests / functions.at
index 165376c97f59cf23d1c6c865e7003f1a78776850..01a96a7e2b4b6df9b23f77045a9ea65c73f489c7 100644 (file)
@@ -1,4 +1,4 @@
-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.
@@ -33,6 +33,11 @@ sed -e '5,$s/^/     /' -e '6,$s/^/     /' \
 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)])
@@ -40,7 +45,9 @@ AT_KEYWORDS([help])
 
 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], [
 ])
 
@@ -49,7 +56,31 @@ AT_CLEANUP
 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"],
@@ -62,26 +93,42 @@ AT_CHECK([m4_join([ ],
   [--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"],
@@ -94,19 +141,34 @@ AT_CHECK([m4_join([ ],
   [--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