move XS code to separate dist
[p5sagit/Devel-GlobalDestruction.git] / t / 01_basic.t
index 3c3ffbd..85d5624 100644 (file)
@@ -3,12 +3,8 @@ use warnings;
 
 BEGIN {
   if ($ENV{DEVEL_GLOBALDESTRUCTION_PP_TEST}) {
-    require DynaLoader;
-    no warnings 'redefine';
-    my $orig = \&DynaLoader::bootstrap;
-    *DynaLoader::bootstrap = sub {
-      die 'no XS' if $_[0] eq 'Devel::GlobalDestruction';
-      goto $orig;
+    unshift @INC, sub {
+      die 'no XS' if $_[1] eq 'Devel/GlobalDestruction/XS.pm';
     };
   }
 }
@@ -19,7 +15,7 @@ BEGIN {
   sub DESTROY { my $self = shift; $self->[0]->() }
 }
 
-print "1..6\n";
+print "1..9\n";
 
 our $had_error;
 
@@ -52,6 +48,10 @@ sub ok ($$) {
   print "\n";
 }
 
+END {
+  ok( ! in_global_destruction(), 'Not yet in GD while in END block 2' )
+}
+
 ok( eval "use Devel::GlobalDestruction; 1", "use Devel::GlobalDestruction" );
 
 ok( defined &in_global_destruction, "exported" );
@@ -60,6 +60,13 @@ ok( defined prototype \&in_global_destruction, "defined prototype" );
 
 ok( prototype \&in_global_destruction eq "", "empty prototype" );
 
-ok( !in_global_destruction(), "not in GD" );
+ok( ! in_global_destruction(), "Runtime is not GD" );
+
+our $sg1 = Test::Scope::Guard->new(sub { ok( in_global_destruction(), "Final cleanup object destruction properly in GD" ) });
+
+END {
+  ok( ! in_global_destruction(), 'Not yet in GD while in END block 1' )
+}
 
-our $sg = Test::Scope::Guard->new(sub { ok( in_global_destruction(), "in GD" ) });
+our $sg2 = Test::Scope::Guard->new(sub { ok( ! in_global_destruction(), "Object destruction in END not considered GD" ) });
+END { undef $sg2 }