Update to Scalar-List-Utils-1.15
[p5sagit/p5-mst-13.2.git] / ext / List / Util / t / weak.t
index 1096e9e..58745c7 100755 (executable)
@@ -13,41 +13,20 @@ BEGIN {
     }
 }
 
-use vars qw($skip);
-
-BEGIN {
-  $|=1;
-  require Scalar::Util;
-  if (grep { /weaken/ } @Scalar::Util::EXPORT_FAIL) {
-    print("1..0\n");
-    $skip=1;
-  }
-
-  $DEBUG = 0;
-
-  if ($DEBUG && eval { require Devel::Peek } ) {
-    Devel::Peek->import('Dump');
-  }
-  else {
-    *Dump = sub {};
-  }
+use Scalar::Util ();
+use Test::More  (grep { /weaken/ } @Scalar::Util::EXPORT_FAIL)
+                       ? (skip_all => 'weaken requires XS version')
+                       : (tests => 22);
+
+if (0) {
+  require Devel::Peek;
+  Devel::Peek->import('Dump');
 }
-
-eval <<'EOT' unless $skip;
-use Scalar::Util qw(weaken isweak);
-print "1..22\n";
-
-######################### End of black magic.
-
-$cnt = 0;
-
-sub ok {
-       ++$cnt;
-       if($_[0]) { print "ok $cnt\n"; } else {print "not ok $cnt\n"; }
-       return $_[0];
+else {
+  *Dump = sub {};
 }
 
-$| = 1;
+Scalar::Util->import(qw(weaken isweak));
 
 if(1) {
 
@@ -62,25 +41,25 @@ my ($y,$z);
        $y = \$x;
        $z = \$x;
 }
-print "# START:\n";
+print "# START\n";
 Dump($y); Dump($z);
 
-ok( $y ne "" and $z ne "" );
-weaken($y);
+ok( ref($y) and ref($z));
 
 print "# WEAK:\n";
+weaken($y);
 Dump($y); Dump($z);
 
-ok( $y ne "" and $z ne "" );
-undef($z);
+ok( ref($y) and ref($z));
 
 print "# UNDZ:\n";
+undef($z);
 Dump($y); Dump($z);
 
 ok( not (defined($y) and defined($z)) );
-undef($y);
 
 print "# UNDY:\n";
+undef($y);
 Dump($y); Dump($z);
 
 ok( not (defined($y) and defined($z)) );
@@ -88,17 +67,11 @@ ok( not (defined($y) and defined($z)) );
 print "# FIN:\n";
 Dump($y); Dump($z);
 
-# exit(0);
-
-# }
-# {
 
 # 
 # Case 2: one reference, which is weakened
 #
 
-# kill 5,$$;
-
 print "# CASE 2:\n";
 
 {
@@ -106,7 +79,7 @@ print "# CASE 2:\n";
        $y = \$x;
 }
 
-ok( $y ne "" );
+ok( ref($y) );
 print "# BW: \n";
 Dump($y);
 weaken($y);
@@ -117,14 +90,10 @@ ok( not defined $y  );
 print "# EXITBLOCK\n";
 }
 
-# exit(0);
-
 # 
 # Case 3: a circular structure
 #
 
-# kill 5, $$;
-
 $flag = 0;
 {
        my $y = bless {}, Dest;
@@ -137,7 +106,7 @@ $flag = 0;
        print "# 3: $y\n";
        weaken($y->{Self});
        print "# WKED\n";
-       ok( $y ne "" );
+       ok( ref($y) );
        print "# VALS: HASH ",$y,"   SELF ",\$y->{Self},"  Y ",\$y, 
                "    FLAG: ",\$y->{Flag},"\n";
        print "# VPRINT\n";
@@ -185,7 +154,7 @@ Dump($y);
 undef($y);
 
 ok( not defined $y);
-ok($z ne "");
+ok( ref($z) );
 
 
 #
@@ -210,14 +179,10 @@ ok(!isweak($x->{Z}));
 # Case 7: test weaken on a read only ref
 #
 
-if ($] < 5.008003) {
+SKIP: {
     # Doesn't work for older perls, see bug [perl #24506]
-    print "# Skip next 5 tests on perl $]\n";
-    for (1..5) {
-       ok(1);
-    }
-}
-else {
+    skip("Test does not work with perl < 5.8.3", 5) if $] < 5.008003;
+
     $a = eval '\"hello"';
     ok(ref($a)) or print "# didn't get a ref from eval\n";
     $b = $a;
@@ -236,4 +201,3 @@ sub DESTROY {
        print "# INCFLAG\n";
        ${$_[0]{Flag}} ++;
 }
-EOT