File: procs.ft

package info (click to toggle)
libfennec-perl 2.018-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 384 kB
  • sloc: perl: 2,083; makefile: 2
file content (135 lines) | stat: -rw-r--r-- 3,437 bytes parent folder | download | duplicates (8)
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
});