this patch:
- prints the reason for the skipped test
I didn't want to complicate things, so I've changed the definition of what
a condition function should return to be:
if (true)
return 1;
else
return the reason as a string different from 1;
issues:
- Doug has mentioned that "missing foo" doesn't help much for c modules
because it doesn't explain the real reason, which can be:
o apxs is not available
o the module requires 2.0
o else
solution:
- first let's integrate this patch.
- second I suggest splitting have_module into have_module_c and
have_module_perl, or leave have_module as is for 'mod_*.c' but do add
have_module_perl.
consider:
plan ..., have_module 'constant';
for constant.pm. this will falsely satisfy the requirement with what we
have now if there is mod_constant.c and it's compiled, but constant.pm is
not available. There is no requirement for Perl modules to start with
uppercase letter.
- third IMHO tests shouldn't care about why their requirement is not
satisfied, thefore we shouldn't try to make them set the reason.
have_module() should figure out why some mod_*.c is not there. But that's
a next step and has nothing to do with this patch.
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.27
diff -u -r1.27 Test.pm
--- Apache-Test/lib/Apache/Test.pm 2001/10/20 10:35:33 1.27
+++ Apache-Test/lib/Apache/Test.pm 2001/11/07 06:50:34
@@ -67,10 +67,26 @@
test_pm_refresh();
}
-#caller will need to have required Apache::TestRequest
-*have_http11 = \&Apache::TestRequest::install_http11;
-*have_lwp = \&Apache::TestRequest::has_lwp;
+sub have_http11 {
+ require Apache::TestRequest;
+ if (Apache::TestRequest::install_http11()) {
+ return 1;
+ }
+ else {
+ return "LWP cannot handle HTTP 1.1";
+ }
+}
+sub have_lwp {
+ require Apache::TestRequest;
+ if (Apache::TestRequest::has_lwp()) {
+ return 1;
+ }
+ else {
+ return "must have LWP installed";
+ }
+}
+
sub plan {
init_test_pm(shift) if ref $_[0];
@@ -80,24 +96,31 @@
if (@_ % 2) {
my $condition = pop @_;
my $ref = ref $condition;
- my $meets_condition = 0;
+ my $status;
if ($ref) {
if ($ref eq 'CODE') {
#plan tests $n, \&has_lwp
- $meets_condition = $condition->();
+ $status = $condition->();
}
elsif ($ref eq 'ARRAY') {
#plan tests $n, [qw(php4 rewrite)];
- $meets_condition = have_module($condition);
+ $status = have_module($condition);
+ }
+ else {
+ die "don't know how to handle a condition of type $ref";
}
}
else {
- # we have the verdict already: true/false
- $meets_condition = $condition ? 1 : 0;
+ # we have the verdict already: 1 or reason
+ $status = $condition;
}
+
+ # this shouldn't happen, must be a broken test
+ $status = 'fix me' unless defined $status;
- unless ($meets_condition) {
- print "1..0\n";
+ # tryint to emulate a dual variable (ala errno)
+ unless (length($status) == 1 and $status == 1) {
+ print "1..0 # skipped: $status \n";
exit; #XXX: Apache->exit
}
}
@@ -119,20 +142,25 @@
die "bogus module name $_" unless /^[\w:.]+$/;
eval "require $_";
#print $@ if $@;
- return 0 if $@;
+ return "cannot find $_" if $@;
}
return 1;
}
sub have_cgi {
- [have_module('cgi') || have_module('cgid')];
+ have_module('cgi') || have_module('cgid');
}
sub have_apache {
my $version = shift;
my $cfg = Apache::Test::config();
- $cfg->{server}->{rev} == $version;
+ if ($cfg->{server}->{rev} == $version) {
+ return 1;
+ }
+ else {
+ return "need apache $version, but this is $cfg->{server}->{rev}";
+ }
}
sub have_perl {
@@ -141,7 +169,7 @@
for my $key ($thing, "use$thing") {
return 1 if $Config{$key} and $Config{$key} eq 'define';
}
- return 0;
+ return "Perl was built with neither $thing nor use$thing";
}
package Apache::TestToString;
Index: t/apache/byterange.t
===================================================================
RCS file: /home/cvs/httpd-test/perl-framework/t/apache/byterange.t,v
retrieving revision 1.2
diff -u -r1.2 byterange.t
--- t/apache/byterange.t 2001/09/10 17:12:37 1.2
+++ t/apache/byterange.t 2001/11/07 06:50:34
@@ -25,7 +25,8 @@
my %other_files;
-plan tests => @pods + keys(%other_files), sub { $perlpod };
+plan tests => @pods + keys(%other_files),
+ sub { $perlpod ? 1 : "dir $vars->{perlpod} doesn't exist"};
for my $url (keys %other_files) {
verify($url, $other_files{$url});
Index: t/apache/getfile.t
===================================================================
RCS file: /home/cvs/httpd-test/perl-framework/t/apache/getfile.t,v
retrieving revision 1.5
diff -u -r1.5 getfile.t
--- t/apache/getfile.t 2001/09/10 17:12:37 1.5
+++ t/apache/getfile.t 2001/11/07 06:50:34
@@ -20,7 +20,8 @@
("/getfiles-binary-$_", $vars->{$_})
} qw(httpd perl);
-plan tests => @pods + keys(%other_files), sub { $perlpod };
+plan tests => @pods + keys(%other_files),
+ sub { $perlpod ? 1 : "dir $vars->{perlpod} doesn't exist"};
my $location = "/getfiles-perl-pod";
_____________________________________________________________________
Stas Bekman JAm_pH -- Just Another mod_perl Hacker
http://stason.org/ mod_perl Guide http://perl.apache.org/guide
mailto:[EMAIL PROTECTED] http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/