[prev in list] [next in list] [prev in thread] [next in thread] 

List:       apache-test-dev
Subject:    Re: cvs commit: httpd-test/perl-framework/t/apache getfile.t
From:       Stas Bekman <stas () stason ! org>
Date:       2001-11-22 2:41:25
[Download RAW message or body]

On 21 Nov 2001 dougm@apache.org wrote:

> dougm       01/11/21 13:21:33
>
>   Modified:    perl-framework/t/apache getfile.t
>   Log:
>   switch to using a response callback to cut down on memory usage

>   +    #XXX: howto plan ..., skip_unless(...) + have_module(...) ?
>   +    push @Apache::Test::SkipReasons,
>   +      "dir $vars->{perlpod} doesn't exist"

I suggest the following patch. See the doc at the end. Basically it
eliminates the need to expose have_module(), while keeping it simple. And
will let us extend it in the future to add even more functionality.

I can extend it to engulf the plan() extension that we have added and then
the only function you will ever call with plan() is skip_unless. I
think this:

  plan ..., skip_unless('cgi', 'lwp');

is easier to grasp than:

  plan ..., ['cgi', 'lwp'];

How about that? If we do that you can have:

  skip_unless(
           { sub {test()}  => "something is missing",
             sub {test2()} => "something2 is missing",
           },
           \&have_lwp,
           'cgi',
           'Storable'
           { sub {test3()}  => "something3 is missing"}
            );

Index: Apache-Test/lib/Apache/Test.pm
===================================================================
RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/Test.pm,v
retrieving revision 1.33
diff -u -r1.33 Test.pm
--- Apache-Test/lib/Apache/Test.pm	2001/11/16 19:58:09	1.33
+++ Apache-Test/lib/Apache/Test.pm	2001/11/22 02:17:32
@@ -138,16 +138,28 @@
 }

 sub skip_unless {
-    my $condition = shift;
-    my $reason = shift || "no reason given";
+    my @conditions = @_;

-    if (ref $condition eq 'CODE' and $condition->()) {
-        return 1;
-    }
-    else {
-        push @SkipReasons, $reason;
-        return 0;
+    my $should_skip = 0;
+    for my $cond (@conditions) {
+        if (ref $cond eq 'HASH') {
+            while (my($code, $reason) = each %$cond) {
+                $reason = "no reason given" unless defined $reason;
+                if (ref $code eq 'CODE' and $code->()) {
+                    next;
+                }
+                else {
+                    push @SkipReasons, $reason;
+                    $should_skip++;
+                }
+            }
+        }
+        else {
+            $should_skip++ unless have_module($cond);
+        }
     }
+
+    return $should_skip ? 0 : 1;
 }

 sub have_module {
@@ -307,7 +319,7 @@
 But this won't hint the reason for skipping therefore it's better to
 use skip_unless():

-  plan tests => 5, skip_unless(sub { $a == $b }, "$a != $b");
+  plan tests => 5, skip_unless({sub { $a == $b } => "$a != $b"}, 'LWP');

 see skip_unless() for more info.

@@ -350,14 +362,22 @@
 Same as I<Test::skip>, see I<Test.pm> documentation.

 =item skip_unless
-
-  skip_unless($cond_sub, $reason);

-skip_unless() is used with plan(), it executes C<$cond_sub> code
-reference and if it returns a false value C<$reason> gets printed as a
-reason for test skipping.
+  skip_unless({sub {$a==$b} => "$a != $b!"
+               sub {$a==1}  => "$a != 1!"},
+              'LWP',
+              'cgi_d',
+               {sub {0} => "forced to be skipped"},
+             );
+
+skip_unless() is used with plan(), to decide whether to skip the test
+or not. Its argument is a list of things to test. The list can include
+scalars, which are passed to have_module() and hash references. The
+hash references have condition code ref as a key and the reason for
+failure as a value. The condition code is run and if it fails the
+reason is used to explain the failure.

-see plan().
+Also see plan().

 =item test_pm_refresh


_____________________________________________________________________
Stas Bekman             JAm_pH      --   Just Another mod_perl Hacker
http://stason.org/      mod_perl Guide   http://perl.apache.org/guide
mailto:stas@stason.org  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic