X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FThread-Cleanup.git;a=blobdiff_plain;f=t%2F30-pseudoforks.t;fp=t%2F30-pseudoforks.t;h=2247c4091311ae1cefc73f68b1bb1665e869e26b;hp=0000000000000000000000000000000000000000;hb=edfeeb476d5446fc117243df3a5b4ce6baa82b43;hpb=5df33e24c91c6ebd942de8ed5eb45dd4c1b24269 diff --git a/t/30-pseudoforks.t b/t/30-pseudoforks.t new file mode 100644 index 0000000..2247c40 --- /dev/null +++ b/t/30-pseudoforks.t @@ -0,0 +1,46 @@ +#!perl -T + +use strict; +use warnings; + +use Config; + +use Test::More; + +use lib 't/lib'; +use VPIT::TestHelpers; + +use Thread::Cleanup; + +plan skip_all => + 'perl on Windows with pseudoforks enabled is required for this test' + unless $^O eq 'MSWin32' and $Config::Config{d_pseudofork}; + +my $global_end = 0; +END { ++$global_end } + +my $pid = fork; + +plan skip_all => 'could not fork' unless defined $pid; + +if ($pid) { + waitpid $pid, 0; +} else { + plan tests => 4; + + my $gd = 0; + my $immortal = VPIT::TestHelpers::Guard->new(sub { ++$gd }); + $immortal->{self} = $immortal; + + my $local_end = 0; + eval 'END { ++$local_end }'; + + Thread::Cleanup::register { + pass 'pseudo-fork destructor called'; + is $local_end, 1, 'pseudo-fork destructor called after local END block'; + is $global_end, 0, 'pseudo-fork destructor called before global END block'; + is $gd, 0, 'pseudo-fork destructor called before global destruction'; + }; + + exit; +}