11 plan skip_all => "POSIX is unavailable" if $Config{'extensions'} !~ m!\bPOSIX\b!;
17 use Scalar::Util qw(looks_like_number);
20 grep { eval "&$_;1" or $@!~/vendor has not defined POSIX macro/ } @_
23 my @path_consts = check qw(
24 _PC_CHOWN_RESTRICTED _PC_LINK_MAX _PC_NAME_MAX
25 _PC_NO_TRUNC _PC_PATH_MAX
28 my @path_consts_terminal = check qw(
29 _PC_MAX_CANON _PC_MAX_INPUT _PC_VDISABLE
32 my @path_consts_fifo = check qw(
36 my @sys_consts = check qw(
37 _SC_ARG_MAX _SC_CHILD_MAX _SC_CLK_TCK _SC_JOB_CONTROL
38 _SC_NGROUPS_MAX _SC_OPEN_MAX _SC_PAGESIZE _SC_SAVED_IDS
39 _SC_STREAM_MAX _SC_TZNAME_MAX _SC_VERSION
42 my $tests = 2 * 3 * @path_consts +
43 2 * 3 * @path_consts_terminal +
44 2 * 3 * @path_consts_fifo +
48 : (skip_all => "No tests to run on this OS")
51 my $curdir = File::Spec->curdir;
55 # testing fpathconf() on a non-terminal file
57 my $fd = POSIX::open($curdir, O_RDONLY)
58 or skip "could not open current directory ($!)", 3 * @path_consts;
60 for my $constant (@path_consts) {
61 $r = eval { fpathconf( $fd, eval "$constant()" ) };
62 is( $@, '', "calling fpathconf($fd, $constant) " );
63 ok( defined $r, "\tchecking that the returned value is defined: $r" );
64 ok( looks_like_number($r), "\tchecking that the returned value looks like a number" );
70 # testing pathconf() on a non-terminal file
71 for my $constant (@path_consts) {
72 $r = eval { pathconf( $curdir, eval "$constant()" ) };
73 is( $@, '', qq[calling pathconf("$curdir", $constant)] );
74 ok( defined $r, "\tchecking that the returned value is defined: $r" );
75 ok( looks_like_number($r), "\tchecking that the returned value looks like a number" );
81 my $n = 2 * 3 * @path_consts_terminal;
84 or skip("$TTY not a character file", $n);
86 or skip("failed to open $TTY: $!", $n);
88 or skip("TTY ($TTY) not a terminal file", $n);
92 # testing fpathconf() on a terminal file
93 for my $constant (@path_consts_terminal) {
94 $r = eval { fpathconf( $fd, eval "$constant()" ) };
95 is( $@, '', qq[calling fpathconf($fd, $constant) ($TTY)] );
96 ok( defined $r, "\tchecking that the returned value is defined: $r" );
97 ok( looks_like_number($r), "\tchecking that the returned value looks like a number" );
101 # testing pathconf() on a terminal file
102 for my $constant (@path_consts_terminal) {
103 $r = eval { pathconf( $TTY, eval "$constant()" ) };
104 is( $@, '', qq[calling pathconf($TTY, $constant)] );
105 ok( defined $r, "\tchecking that the returned value is defined: $r" );
106 ok( looks_like_number($r), "\tchecking that the returned value looks like a number" );
113 eval { mkfifo($fifo, 0666) }
114 or skip("could not create fifo $fifo ($!)", 2 * 3 * @path_consts_fifo);
117 my $fd = POSIX::open($fifo, O_RDWR)
118 or skip("could not open $fifo ($!)", 3 * @path_consts_fifo);
120 for my $constant (@path_consts_fifo) {
121 $r = eval { fpathconf( $fd, eval "$constant()" ) };
122 is( $@, '', "calling fpathconf($fd, $constant) ($fifo)" );
123 ok( defined $r, "\tchecking that the returned value is defined: $r" );
124 ok( looks_like_number($r), "\tchecking that the returned value looks like a number" );
131 # testing pathconf() on a fifo file
132 for my $constant (@path_consts_fifo) {
133 $r = eval { pathconf( $fifo, eval "$constant()" ) };
134 is( $@, '', qq[calling pathconf($fifo, $constant)] );
135 ok( defined $r, "\tchecking that the returned value is defined: $r" );
136 ok( looks_like_number($r), "\tchecking that the returned value looks like a number" );
142 1 while unlink($fifo);
146 for my $constant (@sys_consts) {
148 skip "Saved IDs broken on Mac OS X (Perl #24122)", 3
149 if $^O eq 'darwin' && $constant eq '_SC_SAVED_IDS';
150 $r = eval { sysconf( eval "$constant()" ) };
151 is( $@, '', "calling sysconf($constant)" );
152 ok( defined $r, "\tchecking that the returned value is defined: $r" );
153 ok( looks_like_number($r), "\tchecking that the returned value looks like a number" );