]> git.draconx.ca Git - dxcommon.git/blobdiff - tests/functions.at
tests: Ignore output from the C compiler.
[dxcommon.git] / tests / functions.at
index 71a282d7d4c67c0c9a62cd2662fb3d7a5841ef5c..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.
@@ -56,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"],
@@ -69,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"],
@@ -101,19 +141,11 @@ 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
 
@@ -125,17 +157,15 @@ TEST_UTF8_LOCALE([locale_utf8])
 
 # Avoid some deficient shell parsers barfing on UTF-8 sequences by
 # generating them this way using octal escapes.
-$AWK -f - >expout <<'EOF'
-BEGIN {
+$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" "8"
-  print "  " hankaku "\t" "8"
-}
-EOF
+  print " " zenkaku "\t" "7"
+  print " " hankaku "\t" "7"
+}' >expout </dev/null
 
 AT_CHECK([LC_ALL=$locale_utf8 xargs "$builddir/t/helpopt3" <args],
   [0], [expout])