|
Packit |
e6c8bb |
# $Id: NonFatal.pm 1608 2017-12-07 10:10:38Z willem $ -*-perl-*-
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
# Test::More calls functions from Test::Builder. Those functions all eventually
|
|
Packit |
e6c8bb |
# call Test::Builder::ok (on a builder instance) for reporting the status.
|
|
Packit |
e6c8bb |
# Here we define a new builder inherited from Test::Builder, with a redefined
|
|
Packit |
e6c8bb |
# ok method that always reports the test to have completed successfully.
|
|
Packit |
e6c8bb |
#
|
|
Packit |
e6c8bb |
# The functions NonFatalBegin and NonFatalEnd re-bless the builder in use by
|
|
Packit |
e6c8bb |
# Test::More (Test::More->builder) to be of type Test::NonFatal and
|
|
Packit |
e6c8bb |
# Test::Builder respectively. Tests that are between those functions will thus
|
|
Packit |
e6c8bb |
# always appear to succeed. The failure report itself is not suppressed.
|
|
Packit |
e6c8bb |
#
|
|
Packit |
e6c8bb |
# Note that the builder is only re-blessed when the file 't/online.nonfatal'
|
|
Packit |
e6c8bb |
# exists.
|
|
Packit |
e6c8bb |
#
|
|
Packit |
e6c8bb |
# This is just a quick hack to allow for non-fatal unit tests. It has many
|
|
Packit |
e6c8bb |
# problems such as for example that blocks marked by the NonFatalBegin and
|
|
Packit |
e6c8bb |
# NonFatalEnd subroutines may not be nested.
|
|
Packit |
e6c8bb |
#
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
use strict;
|
|
Packit |
e6c8bb |
use Test::More;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
use constant NONFATAL => eval { -e 't/online.nonfatal' };
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my @failed;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
END {
|
|
Packit |
e6c8bb |
my $n = scalar(@failed);
|
|
Packit |
e6c8bb |
my $s = $n > 1 ? 's' : '';
|
|
Packit |
e6c8bb |
diag( join "\n\t", "\tDisregarding $n failed sub-test$s", @failed ) if $n;
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
package Test::NonFatal;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
use base qw(Test::Builder);
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
sub ok {
|
|
Packit |
e6c8bb |
my ( $self, $test, $name ) = ( @_, '' );
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
return $self->SUPER::ok( 1, $name ) if $test;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
$self->SUPER::ok( 1, "NOT OK, but tolerating failure, $name" );
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
push @failed, $name;
|
|
Packit |
e6c8bb |
return $test;
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
sub NonFatalBegin {
|
|
Packit |
e6c8bb |
bless Test::More->builder, qw(Test::NonFatal) if NONFATAL;
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
sub NonFatalEnd {
|
|
Packit |
e6c8bb |
bless Test::More->builder, qw(Test::Builder) if NONFATAL;
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
1;
|
|
Packit |
e6c8bb |
|