Ok, forget the last patch.  This one incorporates that plus more.

This one also adds an eval_ok function.  The idea here is that sometimes
you simply want to try something to see if it works or not.  If it fails
it will append the error ($@) after the name of the test.

The reason for these patches is that I'm trying to use Test::More for
Alzabo and these are some changes that would make it more useful for me.

-dave


--- More.t.old  Mon Sep 24 18:35:39 2001
+++ More.t      Mon Sep 24 18:39:35 2001
@@ -1,4 +1,4 @@
-use Test::More tests => 22;
+use Test::More tests => 25;

 use_ok('Text::Soundex');
 require_ok('Test::More');
@@ -20,7 +20,10 @@
                                    can_ok pass fail eq_array eq_hash
eq_set));

 isa_ok(bless([], "Foo"), "Foo");
+isa_ok(bless([], "Foo"), "Foo", "Optional description to isa_ok");

+eval_ok( sub { 1 }, "eval_ok 1" );
+eval_ok { 1 } "eval_ok 2";

 pass('pass() passed');

--- More.pm.old Mon Sep 24 18:35:27 2001
+++ More.pm     Mon Sep 24 18:39:14 2001
@@ -25,6 +25,7 @@
              $TODO
              plan
              can_ok  isa_ok
+             eval_ok
             );


@@ -447,7 +448,7 @@

 =item B<isa_ok>

-  isa_ok($object, $class);
+  isa_ok($object, $class, $optional_name);

 Checks to see if the given $object->isa($class).  Also checks to make
 sure the object was defined in the first place.  Handy for this sort
@@ -465,11 +466,11 @@

 =cut

-sub isa_ok ($$) {
-    my($object, $class) = @_;
+sub isa_ok ($$;$) {
+    my($object, $class, $name) = @_;

     my $diag;
-    my $name = "object->isa('$class')";
+    $name ||= "object->isa('$class')";
     if( !defined $object ) {
         $diag = "The object isn't defined";
     }
@@ -491,6 +492,35 @@
     }
 }

+=item B<eval_ok>
+
+  eval_ok( sub { code ... }, $name );
+
+    or
+
+  eval_ok { code ... } $name;
+
+Checks to see that a code block can be called in an C<eval> without
+throwing an exception.
+
+If it fails it will print the exception after the name as part of the
+test status.
+
+This is useful if you are calling a block of code simply to make sure
+it doesn't die.
+
+=cut
+
+sub eval_ok (&$) {
+    my ($code, $name) = @_;
+
+    eval { $code->() };
+    if ($@) {
+       ok( 0, "$name - $@" );
+    } else {
+       ok( 1, $name );
+    }
+}

Reply via email to