1#!./perl -w 2 3use strict; 4use Test::More; 5use Config; 6 7plan(skip_all => "POSIX is unavailable") 8 unless $Config{extensions} =~ /\bPOSIX\b/; 9 10require POSIX; 11 12my %valid; 13my @all; 14 15my $argc = 0; 16for my $list ([qw(errno fork getchar getegid geteuid getgid getgroups getlogin 17 getpgrp getpid getppid gets getuid time wait)], 18 [qw(abs alarm assert chdir closedir cos exit exp fabs fstat getc 19 getenv getgrgid getgrnam getpwnam getpwuid gmtime isatty 20 localtime log opendir raise readdir remove rewind rewinddir 21 rmdir sin sleep sqrt stat strerror system 22 umask unlink)], 23 [qw(atan2 chmod creat kill link mkdir pow rename strstr waitpid)], 24 [qw(chown fcntl utime)]) { 25 $valid{$_} = $argc foreach @$list; 26 push @all, @$list; 27 ++$argc; 28} 29 30my @try = 0 .. $argc - 1; 31foreach my $func (sort @all) { 32 my $arg_pat = join ', ', ('[a-z]+') x $valid{$func}; 33 my $expect = qr/\AUsage: POSIX::$func\($arg_pat\) at \(eval/; 34 foreach my $try (@try) { 35 next if $valid{$func} == $try; 36 my $call = "POSIX::$func(" . join(', ', 1 .. $try) . ')'; 37 is(eval "$call; 1", undef, "$call fails"); 38 like($@, $expect, "POSIX::$func for $try arguments gives expected error") 39 } 40} 41 42foreach my $func (qw(printf sprintf)) { 43 is(eval "POSIX::$func(); 1", undef, "POSIX::$func() fails"); 44 like($@, qr/\AUsage: POSIX::$func\(pattern, args\.\.\.\) at \(eval/, 45 "POSIX::$func for 0 arguments gives expected error"); 46} 47 48foreach my $func (qw(cos exp fabs log sin sqrt)) { 49 local $_ = 3; 50 is( 51 eval "POSIX::$func(); 1", 52 undef, 53 "POSIX::$func() fails; needs explicit argument" 54 ); 55} 56 57{ 58 my ($current_umask, $umask_is_now); 59 $current_umask = umask(); 60 $umask_is_now = POSIX::umask($current_umask); 61 is($umask_is_now, $current_umask, 62 "POSIX::umask, when provided with current umask, returns same as builtin umask()"); 63 is( 64 eval "$umask_is_now = POSIX::umask($current_umask); 1", 65 undef, 66 "POSIX::umask() fails; needs explicit argument" 67 ); 68} 69 70done_testing(); 71