]> git.draconx.ca Git - dxcommon.git/blobdiff - tests/functions.at
help_print_optstring: Better output on some old systems.
[dxcommon.git] / tests / functions.at
index 6b092a0e17fe70a0fc11659365b29dba9b261a3f..4a9aeb5b16b9b9dde59b6ba61502dc4f07b54810 100644 (file)
@@ -56,20 +56,7 @@ AT_CLEANUP
 AT_SETUP([help_print_optstring])
 AT_KEYWORDS([help])
 
-AT_SKIP_IF([test ! -x "$builddir/t/helpopt"])
-
-AT_CHECK([m4_join([ ],
-  ["$builddir/t/helpopt"],
-  [--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],
+AT_DATA([expout],
 [[ --foo       6
  -b, --bar     10
  --baz=ARG     10
@@ -83,15 +70,20 @@ AT_CHECK([m4_join([ ],
  --flagged     10
 ]])
 
-AT_CLEANUP
-
-AT_SETUP([help_print_optstring (getopt_long_only)])
-AT_KEYWORDS([help])
-
-AT_SKIP_IF([test ! -x "$builddir/t/helpopt2"])
+# 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"],
+  ["$builddir/t/helpopt"],
   [--foo],
   [--bar -b],
   [--baz ARG],
@@ -101,7 +93,18 @@ 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],
+  [--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
@@ -115,6 +118,35 @@ AT_CHECK([m4_join([ ],
  -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)])