1898184e3Ssthen#!./perl -w 2898184e3Ssthen 3898184e3Ssthenuse strict; 4898184e3Ssthenuse Test::More; 5898184e3Ssthenuse Config; 6898184e3Ssthen 7898184e3Ssthenplan(skip_all => "POSIX is unavailable") 8898184e3Ssthen unless $Config{extensions} =~ /\bPOSIX\b/; 9898184e3Ssthen 10898184e3Ssthenrequire POSIX; 11898184e3Ssthen 12898184e3Ssthenmy %valid; 13898184e3Ssthenmy @all; 14898184e3Ssthen 15898184e3Ssthenmy $argc = 0; 16898184e3Ssthenfor my $list ([qw(errno fork getchar getegid geteuid getgid getgroups getlogin 17898184e3Ssthen getpgrp getpid getppid gets getuid time wait)], 18898184e3Ssthen [qw(abs alarm assert chdir closedir cos exit exp fabs fstat getc 19898184e3Ssthen getenv getgrgid getgrnam getpwnam getpwuid gmtime isatty 20898184e3Ssthen localtime log opendir raise readdir remove rewind rewinddir 215759b3d2Safresh1 rmdir sin sleep sqrt stat strerror system 22898184e3Ssthen umask unlink)], 23898184e3Ssthen [qw(atan2 chmod creat kill link mkdir pow rename strstr waitpid)], 24898184e3Ssthen [qw(chown fcntl utime)]) { 25898184e3Ssthen $valid{$_} = $argc foreach @$list; 26898184e3Ssthen push @all, @$list; 27898184e3Ssthen ++$argc; 28898184e3Ssthen} 29898184e3Ssthen 30898184e3Ssthenmy @try = 0 .. $argc - 1; 31898184e3Ssthenforeach my $func (sort @all) { 32898184e3Ssthen my $arg_pat = join ', ', ('[a-z]+') x $valid{$func}; 33898184e3Ssthen my $expect = qr/\AUsage: POSIX::$func\($arg_pat\) at \(eval/; 34898184e3Ssthen foreach my $try (@try) { 35898184e3Ssthen next if $valid{$func} == $try; 36898184e3Ssthen my $call = "POSIX::$func(" . join(', ', 1 .. $try) . ')'; 37898184e3Ssthen is(eval "$call; 1", undef, "$call fails"); 38898184e3Ssthen like($@, $expect, "POSIX::$func for $try arguments gives expected error") 39898184e3Ssthen } 40898184e3Ssthen} 41898184e3Ssthen 42898184e3Ssthenforeach my $func (qw(printf sprintf)) { 43898184e3Ssthen is(eval "POSIX::$func(); 1", undef, "POSIX::$func() fails"); 44898184e3Ssthen like($@, qr/\AUsage: POSIX::$func\(pattern, args\.\.\.\) at \(eval/, 45898184e3Ssthen "POSIX::$func for 0 arguments gives expected error"); 46898184e3Ssthen} 47898184e3Ssthen 48*5486feefSafresh1foreach my $func (qw(cos exp fabs log sin sqrt)) { 49*5486feefSafresh1 local $_ = 3; 50*5486feefSafresh1 is( 51*5486feefSafresh1 eval "POSIX::$func(); 1", 52*5486feefSafresh1 undef, 53*5486feefSafresh1 "POSIX::$func() fails; needs explicit argument" 54*5486feefSafresh1 ); 55*5486feefSafresh1} 56*5486feefSafresh1 57*5486feefSafresh1{ 58*5486feefSafresh1 my ($current_umask, $umask_is_now); 59*5486feefSafresh1 $current_umask = umask(); 60*5486feefSafresh1 $umask_is_now = POSIX::umask($current_umask); 61*5486feefSafresh1 is($umask_is_now, $current_umask, 62*5486feefSafresh1 "POSIX::umask, when provided with current umask, returns same as builtin umask()"); 63*5486feefSafresh1 is( 64*5486feefSafresh1 eval "$umask_is_now = POSIX::umask($current_umask); 1", 65*5486feefSafresh1 undef, 66*5486feefSafresh1 "POSIX::umask() fails; needs explicit argument" 67*5486feefSafresh1 ); 68*5486feefSafresh1} 69*5486feefSafresh1 70898184e3Ssthendone_testing(); 71