This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
636efe1670457f1c02299d8186eb498f9774a3bd
[perl5.git] / ext / POSIX / t / termios.t
1 #!perl -Tw
2
3 use strict;
4 use Config;
5 use Test::More;
6
7 BEGIN {
8     plan skip_all => "POSIX is unavailable"
9         if $Config{extensions} !~ m!\bPOSIX\b!;
10 }
11
12 use POSIX ':termios_h';
13
14 plan skip_all => $@
15     if !eval "POSIX::Termios->new; 1" && $@ =~ /termios not implemented/;
16
17
18 # A termios struct that we've successfully read from a terminal device:
19 my $termios;
20
21 foreach (undef, qw(STDIN STDOUT STDERR)) {
22  SKIP:
23     {
24         my ($name, $handle);
25         if (defined $_) {
26             $name = $_;
27             $handle = $::{$name};
28         } else {
29             $name = POSIX::ctermid();
30             skip("Can't get name of controlling terminal", 4)
31                 unless defined $name;
32             open $handle, '<', $name or skip("can't open $name: $!", 4);
33         }
34
35         skip("$name not a tty", 4) unless -t $handle;
36
37         my $t = eval { POSIX::Termios->new };
38         is($@, '', "calling POSIX::Termios->new");
39         isa_ok($t, "POSIX::Termios", "checking the type of the object");
40
41         my $fileno = fileno $handle;
42         my $r = eval { $t->getattr($fileno) };
43         is($@, '', "calling getattr($fileno) for $name");
44         if(isnt($r, undef, "returned value ($r) is defined")) {
45             $termios = $t;
46         }
47     }
48 }
49
50 if (defined $termios) {
51     # testing getcc()
52     for my $i (0 .. NCCS-1) {
53         my $r = eval { $termios->getcc($i) };
54         is($@, '', "calling getcc($i)");
55         like($r, qr/\A-?[0-9]+\z/, 'returns an integer');
56     }
57     for my $i (NCCS, ~0) {
58         my $r = eval { $termios->getcc($i) };
59         like($@, qr/\ABad getcc subscript/, "calling getcc($i)");
60         is($r, undef, 'returns undef')
61     }
62
63     for my $method (qw(getcflag getiflag getispeed getlflag getoflag getospeed)) {
64         my $r = eval { $termios->$method() };
65         is($@, '', "calling $method()");
66         like($r, qr/\A-?[0-9]+\z/, 'returns an integer');
67     }
68 }
69
70 done_testing();