diff options
Diffstat (limited to '')
-rwxr-xr-x | gnulib-tests/test-yesno.sh | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/gnulib-tests/test-yesno.sh b/gnulib-tests/test-yesno.sh new file mode 100755 index 0000000..67caa77 --- /dev/null +++ b/gnulib-tests/test-yesno.sh @@ -0,0 +1,74 @@ +#!/bin/sh +: ${srcdir=.} +. "$srcdir/init.sh"; path_prepend_ . + +# For now, only test with C locale +LC_ALL=C +export LC_ALL + +# Find out how to remove carriage returns from output. Solaris /usr/ucb/tr +# does not understand '\r'. +if echo solaris | tr -d '\r' | grep solais > /dev/null; then + cr='\015' +else + cr='\r' +fi + +# Test with seekable stdin; the follow-on process must see remaining data. +tr @ '\177' <<EOF > in.tmp +nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn - entire line consumed +y@n - backspace does not change result +y +does not match either yesexpr or noexpr +n +EOF + +cat <<EOF > xout.tmp +N +Y +Y +N +n +EOF + +fail=0 +(${CHECKER} test-yesno; ${CHECKER} test-yesno 3; cat) < in.tmp > out1.tmp || fail=1 +LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 +cmp xout.tmp out.tmp || fail=1 + +(${CHECKER} test-yesno 3; ${CHECKER} test-yesno; cat) < in.tmp > out1.tmp || fail=1 +LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 +cmp xout.tmp out.tmp || fail=1 + +# Test for behavior on pipe +cat <<EOF > xout.tmp +Y +N +EOF +echo yes | ${CHECKER} test-yesno 2 > out1.tmp || fail=1 +LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 +cmp xout.tmp out.tmp || fail=1 + +# Test for behavior with no EOL at EOF +cat <<EOF > xout.tmp +Y +EOF +printf y | ${CHECKER} test-yesno 1 > out1.tmp || fail=1 +LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 +cmp xout.tmp out.tmp || fail=1 + +# Test for behavior on EOF +cat <<EOF > xout.tmp +N +EOF +${CHECKER} test-yesno </dev/null > out1.tmp || fail=1 +LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 +cmp xout.tmp out.tmp || fail=1 + +# Test for behavior when stdin is closed +${CHECKER} test-yesno 0 <&- > out1.tmp 2> err.tmp && fail=1 +LC_ALL=C tr -d "$cr" < out1.tmp > out.tmp || fail=1 +cmp xout.tmp out.tmp || fail=1 +test -s err.tmp || fail=1 + +Exit $fail |