coreutils/tests/misc/tty-eof
Jim Meyering 5ac1c72305 Send two tokens, not just one, so we don't
make the now-more-picky tsort fail.
2003-04-28 20:29:22 +00:00

61 lines
1.6 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/sh
: ${PERL=perl}
$PERL -e 1 > /dev/null 2>&1 || {
echo 1>&2 "$0: configure didn't find a usable version of Perl," \
"so can't run this test"
exit 77
}
ARGV_0=$0
export ARGV_0
exec $PERL -w -- - <<\EOF
# Ensure that cat exits upon a single EOF (^D) from a tty.
# Do the same for all programs that can read stdin,
# require no arguments and that write to standard output.
use strict;
(my $ME = $ENV{ARGV_0}) =~ s|.*/||;
# Some older versions of Expect.pm (e.g. 1.07) lack the log_user method,
# so check for that, too.
eval { require Expect; Expect->require_version('1.11') };
$@ and (warn "$ME: this script requires Perl's Expect package >=1.11\n"),
exit 77;
{
my $fail = 0;
foreach my $cmd (qw( cat cksum dd expand fmt fold head md5sum nl od
paste pr ptx sha1sum sort sum tac tee tail tsort
unexpand uniq wc ))
{
my $exp = new Expect;
$exp->log_user(0);
$exp->spawn($cmd)
or (warn "$ME: cannot run `$cmd': $!\n"), $fail=1, next;
$exp->send("a b\n");
$exp->send(''); # FIXME: it'd be better not to hard-code ^D here
$exp->expect (0, '-re', "^a b\\r?\$");
my $found = $exp->expect (1, '-re', "^.+\$");
# $found and warn "F: $found: " . $exp->exp_match () . "\n";
$exp->expect(1, 'eof');
defined $found
or (warn "$ME: $cmd didn't produce expected output\n"),
$fail=1, next;
defined defined $exp->exitstatus
or (warn "$ME: $cmd didn't exit after ^D from standard input\n"),
$fail=1, next;
my $s = $exp->exitstatus;
$s == 0
or (warn "$ME: $cmd exited with status $s (expected 0)\n"),
$fail=1;
$exp->hard_close();
}
exit $fail
}
EOF