Bruno Haible wrote: >> On MacOS X 10.5: >> 1 of 361 tests failed > > FAIL: misc/printf (exit: 1) > > The test expects an error message "Invalid argument". The actual error message > is "expected a numeric value". > > Find attached tests/test-suite.log.
Wow. Thanks for all the prompt testing! The first patch cleans up that test a little, and the second should address the failure you spotted. >From 307cde59d149e8ff6488af091054715b48d5b528 Mon Sep 17 00:00:00 2001 From: Jim Meyering <[email protected]> Date: Thu, 1 Sep 2011 12:09:32 +0200 Subject: [PATCH 1/2] tests: invoke via "env printf", rather than using an absolute name * tests/misc/printf: This results in more concise diagnostics. --- tests/misc/printf | 52 ++++++++++++++++++++++++++-------------------------- 1 files changed, 26 insertions(+), 26 deletions(-) diff --git a/tests/misc/printf b/tests/misc/printf index fd1275d..752da6e 100755 --- a/tests/misc/printf +++ b/tests/misc/printf @@ -16,7 +16,7 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -prog="$abs_top_builddir/src/printf" +prog='env printf' . "${srcdir=.}/init.sh"; path_prepend_ ../src print_ver_ printf @@ -25,11 +25,11 @@ getlimits_ # Verify the 3 methods of specifying "Escape": -test $("$prog" "\x1b\n\33\n\e\n" | uniq -u) && fail=1 +test $($prog "\x1b\n\33\n\e\n" | uniq -u) && fail=1 # This would fail (by printing the `--') for printf in sh-utils # and in coreutils 4.5.1. -"$prog" -- 'foo\n' > out || fail=1 +$prog -- 'foo\n' > out || fail=1 cat <<\EOF > exp foo EOF @@ -38,47 +38,47 @@ compare out exp || fail=1 rm -f out exp # Until coreutils-4.5.10, this would elicit a segfault. -"$prog" '1 %*sy\n' -3 x > out || fail=1 +$prog '1 %*sy\n' -3 x > out || fail=1 # Until coreutils 5.2.2, this would succeed. -if POSIXLY_CORRECT=1 "$prog" '2 \x' >/dev/null 2>&1; then +if POSIXLY_CORRECT=1 $prog '2 \x' >/dev/null 2>&1; then fail=1 else echo '2 failed, as expected' >> out fi # Until coreutils-4.5.12, these would fail. -"$prog" '3 \x40\n' >> out || fail=1 +$prog '3 \x40\n' >> out || fail=1 POSIXLY_CORRECT=1 \ -"$prog" '4 \x40\n' >> out || fail=1 -"$prog" '5 % +d\n' 234 >> out || fail=1 +$prog '4 \x40\n' >> out || fail=1 +$prog '5 % +d\n' 234 >> out || fail=1 # This should print "6 !\n", but don't rely on `!' being the # one-byte representation of octal 041. With printf prior to # coreutils-5.0.1, it would print six bytes: "6 \41\n". -"$prog" '6 \41\n' | tr '\41' '!' >> out +$prog '6 \41\n' | tr '\41' '!' >> out # Note that as of coreutils-5.0.1, printf with a format of '\0002x' # prints a NUL byte followed by the digit `2' and an `x'. # By contrast bash's printf outputs the same thing as $(printf '\2x') does. -"$prog" '7 \2y \02y \002y \0002y\n' |tr '\0\2' '*=' >> out +$prog '7 \2y \02y \002y \0002y\n' |tr '\0\2' '*=' >> out -"$prog" '8 %b %b %b %b\n' '\1y' '\01y' '\001y' '\0001y'|tr '\1' = >> out +$prog '8 %b %b %b %b\n' '\1y' '\01y' '\001y' '\0001y'|tr '\1' = >> out -"$prog" '9 %*dx\n' -2 0 >>out || fail=1 +$prog '9 %*dx\n' -2 0 >>out || fail=1 -"$prog" '10 %.*dx\n' $INT_UFLOW 0 >>out || fail=1 -"$prog" '%.*dx\n' $INT_OFLOW 0 >>out 2> /dev/null && fail=1 +$prog '10 %.*dx\n' $INT_UFLOW 0 >>out || fail=1 +$prog '%.*dx\n' $INT_OFLOW 0 >>out 2> /dev/null && fail=1 -"$prog" '11 %*c\n' 2 x >>out || fail=1 +$prog '11 %*c\n' 2 x >>out || fail=1 -"$prog" '%#d\n' 0 >>out 2> /dev/null && fail=1 +$prog '%#d\n' 0 >>out 2> /dev/null && fail=1 -"$prog" '%0s\n' 0 >>out 2> /dev/null && fail=1 +$prog '%0s\n' 0 >>out 2> /dev/null && fail=1 -"$prog" '%.9c\n' 0 >>out 2> /dev/null && fail=1 +$prog '%.9c\n' 0 >>out 2> /dev/null && fail=1 -"$prog" '%'\''s\n' 0 >>out 2> /dev/null && fail=1 +$prog '%'\''s\n' 0 >>out 2> /dev/null && fail=1 cat <<\EOF > exp 1 x y @@ -98,10 +98,10 @@ compare out exp || fail=1 # Verify handling of single quote chars (\' or \") -"$prog" '%d\n' '"a' >out 2>err # valid -"$prog" '%d\n' '"a"' >>out 2>>err # invalid -"$prog" '%d\n' '"' >>out 2>>err # invalid -"$prog" '%d\n' 'a' >>out 2>>err # invalid +$prog '%d\n' '"a' >out 2>err # valid +$prog '%d\n' '"a"' >>out 2>>err # invalid +$prog '%d\n' '"' >>out 2>>err # invalid +$prog '%d\n' 'a' >>out 2>>err # invalid cat <<EOF > exp 97 @@ -111,9 +111,9 @@ cat <<EOF > exp EOF cat <<EOF > exp_err -$prog: warning: ": character(s) following character constant have been ignored -$prog: ": expected a numeric value -$prog: a: expected a numeric value +printf: warning: ": character(s) following character constant have been ignored +printf: ": expected a numeric value +printf: a: expected a numeric value EOF compare out exp || fail=1 -- 1.7.7.rc0.362.g5a14 >From 08729cd02e0062dd615feedf89f398aec16eac0b Mon Sep 17 00:00:00 2001 From: Jim Meyering <[email protected]> Date: Thu, 1 Sep 2011 12:14:11 +0200 Subject: [PATCH 2/2] tests: misc/printf: accommodate alternate behavior * tests/misc/printf: Avoid false positive failure on MacOS X 10.5 due to a slightly differing diagnostic. Reported by Bruno Haible. --- tests/misc/printf | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/tests/misc/printf b/tests/misc/printf index 752da6e..b9092e1 100755 --- a/tests/misc/printf +++ b/tests/misc/printf @@ -110,6 +110,11 @@ cat <<EOF > exp 0 EOF +# POSIX says strtoimax *may* set errno to EINVAL in the latter +# two cases. So far, that happens at least on MacOS X 10.5. +# Map that output to the more common expected output. +sed 's/: Invalid.*/: expected a numeric value/' err > k && mv k err + cat <<EOF > exp_err printf: warning: ": character(s) following character constant have been ignored printf: ": expected a numeric value -- 1.7.7.rc0.362.g5a14
