Add tests for POSIX::Termios->setattr().
authorNicholas Clark <nick@ccl4.org>
Tue, 6 Sep 2011 20:11:49 +0000 (22:11 +0200)
committerNicholas Clark <nick@ccl4.org>
Tue, 13 Sep 2011 09:28:05 +0000 (11:28 +0200)
We don't want to mess with the user's terminal (as we might mess it up), so
attempt to call tcsetattr() on a disk file, and verify that it fails with
ENOTTY.

ext/POSIX/t/termios.t

index 0160988..bb0b5f1 100644 (file)
@@ -47,6 +47,8 @@ foreach (undef, qw(STDIN STDOUT STDERR)) {
     }
 }
 
+open my $not_a_tty, '<', $^X or die "Can't open $^X: $!";
+
 if (defined $termios) {
     # testing getcc()
     for my $i (0 .. NCCS-1) {
@@ -65,6 +67,16 @@ if (defined $termios) {
        is($@, '', "calling $method()");
        like($r, qr/\A-?[0-9]+\z/, 'returns an integer');
     }
+
+    $! = 0;
+    is($termios->setattr(fileno $not_a_tty), undef,
+       'setattr on a non tty should fail');
+    cmp_ok($!, '==', POSIX::ENOTTY, 'and set errno to ENOTTY');
+
+    $! = 0;
+    is($termios->setattr(fileno $not_a_tty, TCSANOW), undef,
+       'setattr on a non tty should fail');
+    cmp_ok($!, '==', POSIX::ENOTTY, 'and set errno to ENOTTY');
 }
 
 {