summaryrefslogtreecommitdiffstats
path: root/gnulib-tests/test-yesno.sh
diff options
context:
space:
mode:
Diffstat (limited to 'gnulib-tests/test-yesno.sh')
-rwxr-xr-xgnulib-tests/test-yesno.sh74
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