UNITCHECK for XS code. Turned out to be harder that expected.
[p5sagit/p5-mst-13.2.git] / ext / XS / APItest / APItest.pm
index 7d0b40f..e230eb2 100644 (file)
@@ -38,12 +38,36 @@ sub G_METHOD()      {  64 }
 our $VERSION = '0.12';
 
 use vars '$WARNINGS_ON_BOOTSTRAP';
+use vars map "\$${_}_called_PP", qw(BEGIN UNITCHECK CHECK INIT END);
+
+# Do these here to verify that XS code and Perl code get called at the same
+# times
+BEGIN {
+    $BEGIN_called_PP++;
+}
+UNITCHECK {
+    $UNITCHECK_called_PP++;
+}
+{
+    # Need $W false by default, as some tests run under -w, and under -w we
+    # can get warnings about "Too late to run CHECK" block (and INIT block)
+    no warnings 'void';
+    CHECK {
+       $CHECK_called_PP++;
+    }
+    INIT {
+       $INIT_called_PP++;
+    }
+}
+END {
+    $END_called_PP++;
+}
+
 if ($WARNINGS_ON_BOOTSTRAP) {
     bootstrap XS::APItest $VERSION;
 } else {
+    # More CHECK and INIT blocks that could warn:
     local $^W;
-    # Need $W false by default, as some tests run under -w, and under -w we
-    # can get warnings about "Too late to run CHECK" block (and INIT block)
     bootstrap XS::APItest $VERSION;
 }