1#!perl -w
2
3BEGIN {
4    no warnings 'once';
5    $XS::APItest::WARNINGS_ON_BOOTSTRAP = 1;
6}
7
8use strict;
9use warnings;
10use Test::More tests => 100;
11
12# Doing this longhand cut&paste makes it clear
13# BEGIN and INIT are FIFO, CHECK and END are LIFO
14BEGIN {
15    print "# First BEGIN\n";
16    is($XS::APItest::BEGIN_called, undef, "BEGIN not yet called");
17    is($XS::APItest::BEGIN_called_PP, undef, "BEGIN not yet called");
18    is($XS::APItest::UNITCHECK_called, undef, "UNITCHECK not yet called");
19    is($XS::APItest::UNITCHECK_called_PP, undef, "UNITCHECK not yet called");
20    is($XS::APItest::CHECK_called, undef, "CHECK not yet called");
21    is($XS::APItest::CHECK_called_PP, undef, "CHECK not yet called");
22    is($XS::APItest::INIT_called, undef, "INIT not yet called");
23    is($XS::APItest::INIT_called_PP, undef, "INIT not yet called");
24    is($XS::APItest::END_called, undef, "END not yet called");
25    is($XS::APItest::END_called_PP, undef, "END not yet called");
26}
27
28CHECK {
29    print "# First CHECK\n";
30    is($XS::APItest::BEGIN_called, 1, "BEGIN called");
31    is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
32    is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
33    is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
34    is($XS::APItest::CHECK_called, 1, "CHECK called");
35    is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
36    is($XS::APItest::INIT_called, undef, "INIT not yet called");
37    is($XS::APItest::INIT_called_PP, undef, "INIT not yet called");
38    is($XS::APItest::END_called, undef, "END not yet called");
39    is($XS::APItest::END_called_PP, undef, "END not yet called");
40}
41
42INIT {
43    print "# First INIT\n";
44    is($XS::APItest::BEGIN_called, 1, "BEGIN called");
45    is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
46    is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
47    is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
48    is($XS::APItest::CHECK_called, 1, "CHECK called");
49    is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
50    is($XS::APItest::INIT_called, undef, "INIT not yet called");
51    is($XS::APItest::INIT_called_PP, undef, "INIT not yet called");
52    is($XS::APItest::END_called, undef, "END not yet called");
53    is($XS::APItest::END_called_PP, undef, "END not yet called");
54}
55
56END {
57    print "# First END\n";
58    is($XS::APItest::BEGIN_called, 1, "BEGIN called");
59    is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
60    is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
61    is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
62    is($XS::APItest::CHECK_called, 1, "CHECK called");
63    is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
64    is($XS::APItest::INIT_called, 1, "INIT called");
65    is($XS::APItest::INIT_called_PP, 1, "INIT called");
66    is($XS::APItest::END_called, 1, "END called");
67    is($XS::APItest::END_called_PP, 1, "END called");
68}
69
70print "# First body\n";
71is($XS::APItest::BEGIN_called, 1, "BEGIN called");
72is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
73is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
74is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
75is($XS::APItest::CHECK_called, 1, "CHECK called");
76is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
77is($XS::APItest::INIT_called, 1, "INIT called");
78is($XS::APItest::INIT_called_PP, 1, "INIT called");
79is($XS::APItest::END_called, undef, "END not yet called");
80is($XS::APItest::END_called_PP, undef, "END not yet called");
81
82use XS::APItest;
83
84print "# Second body\n";
85is($XS::APItest::BEGIN_called, 1, "BEGIN called");
86is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
87is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
88is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
89is($XS::APItest::CHECK_called, 1, "CHECK called");
90is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
91is($XS::APItest::INIT_called, 1, "INIT called");
92is($XS::APItest::INIT_called_PP, 1, "INIT called");
93is($XS::APItest::END_called, undef, "END not yet called");
94is($XS::APItest::END_called_PP, undef, "END not yet called");
95
96BEGIN {
97    print "# Second BEGIN\n";
98    is($XS::APItest::BEGIN_called, 1, "BEGIN called");
99    is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
100    is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
101    is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
102    is($XS::APItest::CHECK_called, undef, "CHECK not yet called");
103    is($XS::APItest::CHECK_called_PP, undef, "CHECK not yet called");
104    is($XS::APItest::INIT_called, undef, "INIT not yet called");
105    is($XS::APItest::INIT_called_PP, undef, "INIT not yet called");
106    is($XS::APItest::END_called, undef, "END not yet called");
107    is($XS::APItest::END_called_PP, undef, "END not yet called");
108}
109
110CHECK {
111    print "# Second CHECK\n";
112    is($XS::APItest::BEGIN_called, 1, "BEGIN called");
113    is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
114    is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK yet called");
115    is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK yet called");
116    is($XS::APItest::CHECK_called, undef, "CHECK not yet called");
117    is($XS::APItest::CHECK_called_PP, undef, "CHECK not yet called");
118    is($XS::APItest::INIT_called, undef, "INIT not yet called");
119    is($XS::APItest::INIT_called_PP, undef, "INIT not yet called");
120    is($XS::APItest::END_called, undef, "END not yet called");
121    is($XS::APItest::END_called_PP, undef, "END not yet called");
122}
123
124INIT {
125    print "# Second INIT\n";
126    is($XS::APItest::BEGIN_called, 1, "BEGIN called");
127    is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
128    is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
129    is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
130    is($XS::APItest::CHECK_called, 1, "CHECK called");
131    is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
132    is($XS::APItest::INIT_called, 1, "INIT called");
133    is($XS::APItest::INIT_called_PP, 1, "INIT called");
134    is($XS::APItest::END_called, undef, "END not yet called");
135    is($XS::APItest::END_called_PP, undef, "END not yet called");
136}
137
138END {
139    print "# Second END\n";
140    is($XS::APItest::BEGIN_called, 1, "BEGIN called");
141    is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
142    is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
143    is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
144    is($XS::APItest::CHECK_called, 1, "CHECK called");
145    is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
146    is($XS::APItest::INIT_called, 1, "INIT called");
147    is($XS::APItest::INIT_called_PP, 1, "INIT called");
148    is($XS::APItest::END_called, undef, "END not yet called");
149    is($XS::APItest::END_called_PP, undef, "END not yet called");
150}
151