diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test-yesno.c | 51 | ||||
-rwxr-xr-x | tests/test-yesno.sh | 58 |
2 files changed, 109 insertions, 0 deletions
diff --git a/tests/test-yesno.c b/tests/test-yesno.c new file mode 100644 index 0000000000..1e15acddad --- /dev/null +++ b/tests/test-yesno.c @@ -0,0 +1,51 @@ +/* Test of yesno module. + Copyright (C) 2007 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#include "closein.h" +#include "yesno.h" + +char *program_name; + +/* Test yesno. Without arguments, read one line. If first argument + is zero, close stdin before attempting to read one line. + Otherwise, read the number of lines specified by first + argument. */ +int +main (int argc, char **argv) +{ + int i = 1; + program_name = argv[0]; + /* yesno recommends that all clients use close_stdin in main. */ + atexit (close_stdin); + + if (1 < argc) + i = atoi (argv[1]); + if (!i) + { + i = 1; + close (0); + } + while (i--) + puts (yesno () ? "Y" : "N"); + return 0; +} diff --git a/tests/test-yesno.sh b/tests/test-yesno.sh new file mode 100755 index 0000000000..fdf9948006 --- /dev/null +++ b/tests/test-yesno.sh @@ -0,0 +1,58 @@ +#!/bin/sh + +tmpfiles= +trap 'rm -fr $tmpfiles' 1 2 3 15 + +p=t-yesno- +tmpfiles="${p}in.tmp ${p}xout.tmp ${p}out.tmp" + +# For now, only test with C locale +LC_ALL=C +export LC_ALL + +# Test with seekable stdin; followon process must see remaining data +cat <<EOF > ${p}in.tmp +nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn - entire line consumed +yn - backspace does not change result +y +does not match either yesexpr or noexpr +n +EOF +cat <<EOF > ${p}xout.tmp +N +Y +Y +N +n +EOF +(./test-yesno${EXEEXT}; ./test-yesno${EXEEXT} 3; cat) \ + < ${p}in.tmp > ${p}out.tmp || exit 1 +cmp ${p}xout.tmp ${p}out.tmp || exit 1 + +(./test-yesno${EXEEXT} 3; ./test-yesno${EXEEXT}; cat) \ + < ${p}in.tmp > ${p}out.tmp || exit 1 +cmp ${p}xout.tmp ${p}out.tmp || exit 1 + +# Test for behavior on pipe +cat <<EOF > ${p}xout.tmp +Y +N +EOF +echo yes | ./test-yesno${EXEEXT} 2 > ${p}out.tmp || exit 1 +cmp ${p}xout.tmp ${p}out.tmp || exit 1 + +# Test for behavior on EOF +cat <<EOF > ${p}xout.tmp +N +EOF +./test-yesno${EXEEXT} </dev/null > ${p}out.tmp || exit 1 +cmp ${p}xout.tmp ${p}out.tmp || exit 1 + +# Test for behavior when stdin is closed +./test-yesno${EXEEXT} 0 <&- > ${p}out.tmp && exit 1 +cmp ${p}xout.tmp ${p}out.tmp || exit 1 + +# Cleanup +rm -fr $tmpfiles + +exit 0 |