This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Also check BEGIN/UNITCHECK/CHECK/INIT/END for require.
[perl5.git] / ext / XS / APItest / t / xs_special_subs.t
1 #!perl -w
2
3 BEGIN {
4     chdir 't' if -d 't';
5     @INC = '../lib';
6     push @INC, "::lib:$MacPerl::Architecture:" if $^O eq 'MacOS';
7     require Config; import Config;
8     if ($Config{'extensions'} !~ /\bXS\/APItest\b/) {
9         print "1..0 # Skip: XS::APItest was not built\n";
10         exit 0;
11     }
12     # Hush the used only once warning.
13     $XS::APItest::WARNINGS_ON_BOOTSTRAP = $MacPerl::Architecture;
14     $XS::APItest::WARNINGS_ON_BOOTSTRAP = 1;
15 }
16
17 use strict;
18 use warnings;
19 use Test::More tests => 100;
20
21 # Doing this longhand cut&paste makes it clear
22 # BEGIN and INIT are FIFO, CHECK and END are LIFO
23 BEGIN {
24     print "# First BEGIN\n";
25     is($XS::APItest::BEGIN_called, undef, "BEGIN not yet called");
26     is($XS::APItest::BEGIN_called_PP, undef, "BEGIN not yet called");
27     is($XS::APItest::UNITCHECK_called, undef, "UNITCHECK not yet called");
28     is($XS::APItest::UNITCHECK_called_PP, undef, "UNITCHECK not yet called");
29     is($XS::APItest::CHECK_called, undef, "CHECK not yet called");
30     is($XS::APItest::CHECK_called_PP, undef, "CHECK not yet called");
31     is($XS::APItest::INIT_called, undef, "INIT not yet called");
32     is($XS::APItest::INIT_called_PP, undef, "INIT not yet called");
33     is($XS::APItest::END_called, undef, "END not yet called");
34     is($XS::APItest::END_called_PP, undef, "END not yet called");
35 }
36
37 CHECK {
38     print "# First CHECK\n";
39     is($XS::APItest::BEGIN_called, 1, "BEGIN called");
40     is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
41     is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
42     is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
43     is($XS::APItest::CHECK_called, 1, "CHECK called");
44     is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
45     is($XS::APItest::INIT_called, undef, "INIT not yet called");
46     is($XS::APItest::INIT_called_PP, undef, "INIT not yet called");
47     is($XS::APItest::END_called, undef, "END not yet called");
48     is($XS::APItest::END_called_PP, undef, "END not yet called");
49 }
50
51 INIT {
52     print "# First INIT\n";
53     is($XS::APItest::BEGIN_called, 1, "BEGIN called");
54     is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
55     is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
56     is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
57     is($XS::APItest::CHECK_called, 1, "CHECK called");
58     is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
59     is($XS::APItest::INIT_called, undef, "INIT not yet called");
60     is($XS::APItest::INIT_called_PP, undef, "INIT not yet called");
61     is($XS::APItest::END_called, undef, "END not yet called");
62     is($XS::APItest::END_called_PP, undef, "END not yet called");
63 }
64
65 END {
66     print "# First END\n";
67     is($XS::APItest::BEGIN_called, 1, "BEGIN called");
68     is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
69     is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
70     is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
71     is($XS::APItest::CHECK_called, 1, "CHECK called");
72     is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
73     is($XS::APItest::INIT_called, 1, "INIT called");
74     is($XS::APItest::INIT_called_PP, 1, "INIT called");
75     is($XS::APItest::END_called, 1, "END called");
76     is($XS::APItest::END_called_PP, 1, "END called");
77 }
78
79 print "# First body\n";
80 is($XS::APItest::BEGIN_called, 1, "BEGIN called");
81 is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
82 is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
83 is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
84 is($XS::APItest::CHECK_called, 1, "CHECK called");
85 is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
86 is($XS::APItest::INIT_called, 1, "INIT called");
87 is($XS::APItest::INIT_called_PP, 1, "INIT called");
88 is($XS::APItest::END_called, undef, "END not yet called");
89 is($XS::APItest::END_called_PP, undef, "END not yet called");
90
91 use XS::APItest;
92
93 print "# Second body\n";
94 is($XS::APItest::BEGIN_called, 1, "BEGIN called");
95 is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
96 is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
97 is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
98 is($XS::APItest::CHECK_called, 1, "CHECK called");
99 is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
100 is($XS::APItest::INIT_called, 1, "INIT called");
101 is($XS::APItest::INIT_called_PP, 1, "INIT called");
102 is($XS::APItest::END_called, undef, "END not yet called");
103 is($XS::APItest::END_called_PP, undef, "END not yet called");
104
105 BEGIN {
106     print "# Second BEGIN\n";
107     is($XS::APItest::BEGIN_called, 1, "BEGIN called");
108     is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
109     is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
110     is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
111     is($XS::APItest::CHECK_called, undef, "CHECK not yet called");
112     is($XS::APItest::CHECK_called_PP, undef, "CHECK not yet called");
113     is($XS::APItest::INIT_called, undef, "INIT not yet called");
114     is($XS::APItest::INIT_called_PP, undef, "INIT not yet called");
115     is($XS::APItest::END_called, undef, "END not yet called");
116     is($XS::APItest::END_called_PP, undef, "END not yet called");
117 }
118
119 CHECK {
120     print "# Second CHECK\n";
121     is($XS::APItest::BEGIN_called, 1, "BEGIN called");
122     is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
123     is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK yet called");
124     is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK yet called");
125     is($XS::APItest::CHECK_called, undef, "CHECK not yet called");
126     is($XS::APItest::CHECK_called_PP, undef, "CHECK not yet called");
127     is($XS::APItest::INIT_called, undef, "INIT not yet called");
128     is($XS::APItest::INIT_called_PP, undef, "INIT not yet called");
129     is($XS::APItest::END_called, undef, "END not yet called");
130     is($XS::APItest::END_called_PP, undef, "END not yet called");
131 }
132
133 INIT {
134     print "# Second INIT\n";
135     is($XS::APItest::BEGIN_called, 1, "BEGIN called");
136     is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
137     is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
138     is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
139     is($XS::APItest::CHECK_called, 1, "CHECK called");
140     is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
141     is($XS::APItest::INIT_called, 1, "INIT called");
142     is($XS::APItest::INIT_called_PP, 1, "INIT called");
143     is($XS::APItest::END_called, undef, "END not yet called");
144     is($XS::APItest::END_called_PP, undef, "END not yet called");
145 }
146
147 END {
148     print "# Second END\n";
149     is($XS::APItest::BEGIN_called, 1, "BEGIN called");
150     is($XS::APItest::BEGIN_called_PP, 1, "BEGIN called");
151     is($XS::APItest::UNITCHECK_called, 1, "UNITCHECK called");
152     is($XS::APItest::UNITCHECK_called_PP, 1, "UNITCHECK called");
153     is($XS::APItest::CHECK_called, 1, "CHECK called");
154     is($XS::APItest::CHECK_called_PP, 1, "CHECK called");
155     is($XS::APItest::INIT_called, 1, "INIT called");
156     is($XS::APItest::INIT_called_PP, 1, "INIT called");
157     is($XS::APItest::END_called, undef, "END not yet called");
158     is($XS::APItest::END_called_PP, undef, "END not yet called");
159 }