Hi there,

I've just added a really simple convenience function that skips the rest of the
tests in a suite.  It's different from the normal skip() in that it doesn't
require nested named blocks.

This came about trying to find a better way to fix t/op/lfs.t in bleadperl.  (I
have a patch for that as well that illustrates my dilemma.  If anyone's
interested, I can post it as well.)

There may be a much more elegant way to solve this.  I'm all ears.  (The POD
patch may rather belong in Test::More instead of Test::Simple, as well.)

-- c

--- lib/Test/~More.pm   Thu Sep  6 06:57:08 2001
+++ lib/Test/More.pm    Fri Sep 14 23:36:28 2001
@@ -21,7 +21,7 @@
              skip todo
              pass fail
              eq_array eq_hash eq_set
-             skip
+             skip skip_rest
              $TODO
              plan
              can_ok  isa_ok

--- lib/Test/~Simple.pm Sat Sep 15 00:29:54 2001
+++ lib/Test/Simple.pm  Sat Sep 15 00:29:30 2001
@@ -57,6 +57,7 @@
     no strict 'refs';
     my($caller) = caller;
     *{$caller.'::ok'} = \&ok;
+    *{$caller.'::skip_rest'} = \&skip_rest;
     
 }
 
@@ -199,6 +200,35 @@
     return $test ? 1 : 0;
 }
 
+=cut
+
+=over 4
+
+=item B<skip_rest>
+
+       skip_rest();
+       skip_rest( $why );
+
+skip_rest() is given an explanation as to why to skip the rest of the tests.
+It'll happily report "ok $testnum # skip $why" for each skipped test.  If no
+reason is provided, it will just say that it skipped things.  This is a
+last-resort test, to ditch things without having to wrap everything in a SKIP
+block.
+
+=cut
+
+
+sub skip_rest {
+       my($why) = shift;
+
+    my $msg;
+       for ($Num_Tests + 1 .. $Planned_Tests) {
+               _skipped($why);
+               ($why) = (split(/\n/, $why))[0];
+       }
+
+    exit(0);
+}
 
 sub _skipped {
     my($why) = shift;

Reply via email to