1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
#!/usr/bin/env perl
package Test::Procs;
use strict;
use warnings;
use Fennec parallel => 1, test_sort => 'ordered';
use File::Temp qw/tempfile/;
my ( $fh, $name ) = tempfile();
describe procs_1 => sub {
my @pids = ($$);
before_all setup => sub {
ok( $pids[-1] == $$, "before_all happens in parent" );
push @pids => $$;
};
tests a => sub {
ok( $$ != $pids[-1], "New proc, even for just 1 test" );
push @pids => $$;
};
after_all teardown => sub {
ok( $$ == $pids[-1], "Same process as before_all" );
};
};
describe procs_2 => sub {
my @pids = ($$);
my $test_pid;
before_all setup => sub {
ok( $pids[-1] == $$, "before_all happens in parent" );
push @pids => $$;
};
tests a => sub {
ok( $$ != $pids[-1], "Multiple Tests, each should have a different proc" );
ok( !$test_pid, "Did not see other test" );
$test_pid = $$;
};
tests b => sub {
ok( $$ != $pids[-1], "Multiple Tests, each should have a different proc" );
ok( !$test_pid, "Did not see other test" );
$test_pid = $$;
};
after_all teardown => sub {
ok( $$ == $pids[-1], "Same process as before_all" );
};
};
describe procs_nested => sub {
my @caller = caller;
my @pids = ($$);
my $test_pid;
before_all setup => sub {
print $fh "OUTER SETUP\n";
ok( $pids[-1] == $$, "before_all happens in parent" );
push @pids => $$;
};
tests outer_a => sub {
print $fh "OUTER TEST\n";
ok( $$ != $pids[-1], "Multiple Tests, each should have a different proc" );
ok( !$test_pid, "Did not see other test" );
$test_pid = $$;
};
describe inner => sub {
before_all inner_setup => sub {
print $fh "INNER SETUP\n";
ok( $pids[-1] == $$, "before_all happens in parent" );
push @pids => $$;
};
around_each spin_me_right_round => sub {
my $self = shift;
my ($run) = @_;
print $fh "AROUND START\n";
$run->();
print $fh "AROUND END\n";
};
tests a => sub {
print $fh "INNER TEST\n";
ok( $$ != $pids[-1], "Multiple Tests, each should have a different proc" );
ok( !$test_pid, "Did not see other test" );
$test_pid = $$;
};
tests b => sub {
print $fh "INNER TEST\n";
ok( $$ != $pids[-1], "Multiple Tests, each should have a different proc" );
ok( !$test_pid, "Did not see other test" );
$test_pid = $$;
};
after_all inner_teardown => sub {
ok( $$ == $pids[-1], "Same process as before_all" );
};
};
tests outer_b => sub {
print $fh "OUTER TEST\n";
ok( $$ != $pids[-1], "Multiple Tests, each should have a different proc" );
ok( !$test_pid, "Did not see other test" );
$test_pid = $$;
};
after_all teardown => sub {
ok( $$ == $pids[-1], "Same process as before_all" );
};
};
done_testing( sub {
close($fh);
open( $fh, '<', $name ) || die $!;
is_deeply( join( '' => <$fh> ), <<" EOT", "Order is correct" );
OUTER SETUP
OUTER TEST
OUTER TEST
INNER SETUP
AROUND START
INNER TEST
AROUND END
AROUND START
INNER TEST
AROUND END
EOT
});
|