| #!/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 |