]> git.vpit.fr Git - perl/modules/Thread-Cleanup.git/blob - t/30-pseudoforks.t
Support pseudo-forks more reliably
[perl/modules/Thread-Cleanup.git] / t / 30-pseudoforks.t
1 #!perl -T
2
3 use strict;
4 use warnings;
5
6 use Config;
7
8 use Test::More;
9
10 use lib 't/lib';
11 use VPIT::TestHelpers;
12
13 use Thread::Cleanup;
14
15 plan skip_all =>
16             'perl on Windows with pseudoforks enabled is required for this test'
17             unless $^O eq 'MSWin32' and $Config::Config{d_pseudofork};
18
19 my $global_end = 0;
20 END { ++$global_end }
21
22 my $pid = fork;
23
24 plan skip_all => 'could not fork' unless defined $pid;
25
26 if ($pid) {
27  waitpid $pid, 0;
28 } else {
29  plan tests => 4;
30
31  my $gd = 0;
32  my $immortal = VPIT::TestHelpers::Guard->new(sub { ++$gd });
33  $immortal->{self} = $immortal;
34
35  my $local_end = 0;
36  eval 'END { ++$local_end }';
37
38  Thread::Cleanup::register {
39   pass               'pseudo-fork destructor called';
40   is $local_end,  1, 'pseudo-fork destructor called after local END block';
41   is $global_end, 0, 'pseudo-fork destructor called before global END block';
42   is $gd,         0, 'pseudo-fork destructor called before global destruction';
43  };
44
45  exit;
46 }