mirror of
https://https.git.savannah.gnu.org/git/coreutils.git
synced 2026-01-30 11:24:49 +00:00
formats that Bash supports, and to support wide integers like Bash does. Add tests for the above.
98 lines
2.2 KiB
Bash
Executable File
98 lines
2.2 KiB
Bash
Executable File
#!/bin/sh
|
|
# basic tests for printf
|
|
|
|
prog=`pwd`/../../src/printf
|
|
|
|
if test "$VERBOSE" = yes; then
|
|
set -x
|
|
$prog --version
|
|
fi
|
|
|
|
pwd=`pwd`
|
|
t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$
|
|
trap 'status=$?; cd $pwd; chmod -R u+rwx $t0; rm -rf $t0 && exit $status' 0
|
|
trap '(exit $?); exit $?' 1 2 13 15
|
|
|
|
framework_failure=0
|
|
mkdir -p $tmp || framework_failure=1
|
|
cd $tmp || framework_failure=1
|
|
|
|
if test $framework_failure = 1; then
|
|
echo "$0: failure in testing framework" 1>&2
|
|
(exit 1); exit 1
|
|
fi
|
|
|
|
fail=0
|
|
|
|
# This would fail (by printing the `--') for printf in sh-utils
|
|
# and in coreutils 4.5.1.
|
|
$prog -- 'foo\n' > out || fail=1
|
|
cat <<\EOF > exp
|
|
foo
|
|
EOF
|
|
|
|
cmp out exp || fail=1
|
|
test $fail = 1 && diff out exp 2> /dev/null
|
|
|
|
rm -f out exp
|
|
# Until coreutils-4.5.10, this would elicit a segfault.
|
|
$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
|
|
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
|
|
POSIXLY_CORRECT=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
|
|
|
|
# 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 '8 %b %b %b %b\n' '\1y' '\01y' '\001y' '\0001y'|tr '\1' = >> out
|
|
|
|
$prog '9 %*dx\n' -2 0 >>out || fail=1
|
|
|
|
$prog '10 %.*dx\n' -2147483648 0 >>out || fail=1
|
|
|
|
$prog '11 %*c\n' 2 x >>out || fail=1
|
|
|
|
$prog '%#d\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 '%'\''s\n' 0 >>out 2> /dev/null && fail=1
|
|
|
|
cat <<\EOF > exp
|
|
1 x y
|
|
2 failed, as expected
|
|
3 @
|
|
4 @
|
|
5 +234
|
|
6 !
|
|
7 =y =y =y *2y
|
|
8 =y =y =y =y
|
|
9 0 x
|
|
10 0x
|
|
11 x
|
|
EOF
|
|
|
|
cmp out exp || fail=1
|
|
test $fail = 1 && diff -au out exp 2> /dev/null
|
|
|
|
(exit $fail); exit $fail
|