X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FPOSIX%2Ft%2Fposix.t;h=9b0a751064c7273bf191bb7985695f0ec66520f6;hb=c473feecc28308679db0cf6f8fc1f902de2584d6;hp=762c3f1b90f6007ee143c32061d8743f0f3aff70;hpb=404d038e4f672051c639b5ec1231377a2ef84548;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/POSIX/t/posix.t b/ext/POSIX/t/posix.t index 762c3f1..9b0a751 100644 --- a/ext/POSIX/t/posix.t +++ b/ext/POSIX/t/posix.t @@ -11,7 +11,7 @@ BEGIN { } require "./test.pl"; -plan(tests => 38); +plan(tests => 66); use POSIX qw(fcntl_h signal_h limits_h _exit getcwd open read strftime write @@ -30,10 +30,18 @@ $Is_UWin = $^O eq 'uwin'; $Is_OS390 = $^O eq 'os390'; ok( $testfd = open("TEST", O_RDONLY, 0), 'O_RDONLY with open' ); -read($testfd, $buffer, 9) if $testfd > 2; -is( $buffer, "#!./perl\n", ' with read' ); +read($testfd, $buffer, 4) if $testfd > 2; +is( $buffer, "#!./", ' with read' ); -write(1,"ok 3\nnot ok 3\n", 5); +TODO: +{ + local $TODO = "read to array element not working"; + + read($testfd, $buffer[1], 5) if $testfd > 2; + is( $buffer[1], "perl\n", ' read to array element' ); +} + +write(1,"ok 4\nnot ok 4\n", 5); next_test(); SKIP: { @@ -44,7 +52,7 @@ SKIP: { CORE::open($reader = \*READER, "<&=".$fds[0]); CORE::open($writer = \*WRITER, ">&=".$fds[1]); - print $writer "ok 5\n"; + print $writer "ok 6\n"; close $writer; print <$reader>; close $reader; @@ -58,28 +66,35 @@ SKIP: { $sigset->delset(1); ok(! $sigset->ismember(1), 'POSIX::SigSet->delset' ); ok( $sigset->ismember(3), 'POSIX::SigSet->ismember' ); - + SKIP: { skip("no kill() support on Mac OS", 4) if $Is_MacOS; - print "# warning, darwin seems to loose blocked signals (failing test 10)\n" if($^O eq 'darwin'); + my $sigint_called = 0; + my $mask = new POSIX::SigSet &SIGINT; my $action = new POSIX::SigAction 'main::SigHUP', $mask, 0; sigaction(&SIGHUP, $action); $SIG{'INT'} = 'SigINT'; kill 'HUP', $$; sleep 1; - print "ok 11 - signal masks successful\n"; + + printf "%s 11 - masked SIGINT received %s\n", + $sigint_called ? "ok" : "not ok", + $^O eq 'darwin' ? "# TODO Darwin seems to loose blocked signals" + : ''; + + print "ok 12 - signal masks successful\n"; sub SigHUP { - print "ok 8 - sigaction SIGHUP\n"; + print "ok 9 - sigaction SIGHUP\n"; kill 'INT', $$; sleep 2; - print "ok 9 - sig mask delayed SIGINT\n"; + print "ok 10 - sig mask delayed SIGINT\n"; } sub SigINT { - print "ok 10 - masked SIGINT received\n"; + $sigint_called++; } # The order of the above tests is very important, so @@ -145,7 +160,7 @@ ok( &POSIX::acos(1.0) == 0.0, 'dynamic loading' ); # didn't detect it. If this fails, try adding # -DSTRUCT_TM_HASZONE to your cflags when compiling ext/POSIX/POSIX.c. # See ext/POSIX/hints/sunos_4.pl and ext/POSIX/hints/linux.pl -print POSIX::strftime("ok 20 # %H:%M, on %D\n", localtime()); +print POSIX::strftime("ok 21 # %H:%M, on %D\n", localtime()); next_test(); # If that worked, validate the mini_mktime() routine's normalisation of @@ -168,6 +183,26 @@ try_strftime("Wed Mar 01 00:00:00 2000 061", 0,0,0, 1,2,100); try_strftime("Fri Mar 31 00:00:00 2000 091", 0,0,0, 31,2,100); &POSIX::setlocale(&POSIX::LC_TIME, $lc) if $Config{d_setlocale}; +SKIP: { + # XXX wait for smokers to see which OSs else to skip + skip("No mktime and/or tm_gmtoff", 5) + if !$Config{d_mktime} || !$Config{d_tm_tm_gmtoff} || !$Config{d_tm_tm_zone}; + local $ENV{TZ} = "Europe/Berlin"; + + # May fail for ancient FreeBSD versions. + # %z is not included in POSIX, but valid on Linux and FreeBSD. + foreach $def ([1000,'Sun Sep 9 03:46:40 2001 +0200 CEST'], + [900, 'Thu Jul 9 18:00:00 1998 +0200 CEST'], + [800, 'Tue May 9 08:13:20 1995 +0200 CEST'], + [700, 'Sat Mar 7 21:26:40 1992 +0100 CET'], + [600, 'Thu Jan 5 11:40:00 1989 +0100 CET'], + ) { + my($t, $expected) = @$def; + my @tm = localtime($t*1000000); + is(strftime("%c %z %Z",@tm), $expected, "validating zone setting: $expected"); + } +} + { for my $test (0, 1) { $! = 0; @@ -208,6 +243,30 @@ is ($result, undef, "fgets should fail"); like ($@, qr/^Use method IO::Handle::gets\(\) instead/, "check its redef message"); +# Simplistic tests for the isXXX() functions (bug #16799) +ok( POSIX::isalnum('1'), 'isalnum' ); +ok(!POSIX::isalnum('*'), 'isalnum' ); +ok( POSIX::isalpha('f'), 'isalpha' ); +ok(!POSIX::isalpha('7'), 'isalpha' ); +ok( POSIX::iscntrl("\cA"),'iscntrl' ); +ok(!POSIX::iscntrl("A"), 'iscntrl' ); +ok( POSIX::isdigit('1'), 'isdigit' ); +ok(!POSIX::isdigit('z'), 'isdigit' ); +ok( POSIX::isgraph('@'), 'isgraph' ); +ok(!POSIX::isgraph(' '), 'isgraph' ); +ok( POSIX::islower('l'), 'islower' ); +ok(!POSIX::islower('L'), 'islower' ); +ok( POSIX::isupper('U'), 'isupper' ); +ok(!POSIX::isupper('u'), 'isupper' ); +ok( POSIX::isprint('$'), 'isprint' ); +ok(!POSIX::isprint("\n"), 'isprint' ); +ok( POSIX::ispunct('%'), 'ispunct' ); +ok(!POSIX::ispunct('u'), 'ispunct' ); +ok( POSIX::isspace("\t"), 'isspace' ); +ok(!POSIX::isspace('_'), 'isspace' ); +ok( POSIX::isxdigit('f'), 'isxdigit' ); +ok(!POSIX::isxdigit('g'), 'isxdigit' ); + # Check that output is not flushed by _exit. This test should be last # in the file, and is not counted in the total number of tests. if ($^O eq 'vos') {