App-TestOnTap
view release on metacpan or search on metacpan
extras/Perl/KnownToFail/src/main/perl/Org/Cpan/Knth/TestMoreKTF.pm_x view on Meta::CPAN
sub explain
{
return __dispatch(\&Test::More::explain, @_);
}
sub done_testing
{
my $ret = Test::More::done_testing(@_);
return $ret;
}
# knownfails mechanism
#
sub testKnownToFail
{
my $failMsg = shift;
my $testNum = shift;
if (!$dontHandleKnownFailures)
{
my $existingFailMsg = $knownFails{$testNum};
$knownFails{$testNum} = defined($existingFailMsg) ? [$existingFailMsg, $failMsg] : $failMsg;
}
}
sub testsKnownToFail
{
my $failMsg = shift;
my @testNums = @_;
testKnownToFail($failMsg, $_) foreach (@testNums);
}
sub nextTestKnownToFail
{
my $failMsg = shift;
testKnownToFail($failMsg, Test::More->builder()->current_test() + 1);
}
sub nextNTestsKnownToFail
{
my $failMsg = shift;
my $count = shift;
my $start = Test::More->builder()->current_test() + 1;
testKnownToFail($failMsg, $_) for ($start .. ($start + $count - 1));
}
# INTERNAL
#
sub __dispatch
{
my $method = shift;
my $addLvl = 1;
while ((caller($addLvl))[0] eq __PACKAGE__)
{
$addLvl++;
}
$addLvl++;
my $currentLvl = Test::More->builder()->level();
Test::More->builder()->level($currentLvl + $addLvl);
my $result = $method->(@_);
Test::More->builder()->level($currentLvl);
return $result;
}
sub __dispatchTest
{
my $method = shift;
my $msg = shift || '<no test msg given>';
my $addLvl = 1;
while ((caller($addLvl))[0] eq __PACKAGE__)
{
$addLvl++;
}
$addLvl++;
my $currentLvl = Test::More->builder()->level();
Test::More->builder()->level($currentLvl + $addLvl);
my $nextTestNum = Test::More->builder()->current_test() + 1;
my $failMsg = $knownFails{$nextTestNum};
$failMsg = '(' . scalar(@$failMsg) . ' CAUSES) ' . join(' (NEXT CAUSE) ', @$failMsg) if (ref($failMsg) eq 'ARRAY');
my $whichTestAmI = whichTestAmI();
my $testResult;
if (!defined($failMsg))
{
$testResult = $method->(@_);
makeNote(1, "NOTE: This test designated as KNOWN_FAIL! ($failMsg)") if ($failMsg && !$testResult);
}
elsif (!$dontHandleKnownFailures)
{
$testResult = $method->(@_);
&Test::More::BAIL_OUT("Test $whichTestAmI:$nextTestNum ($msg) designated as KNOWN_FAIL unexpectedly succeeded! ($failMsg)") if ($testResult && $failMsg);
}
else
{
&Test::More::BAIL_OUT("Test $whichTestAmI:$nextTestNum not designated as KNOWN_FAIL!") unless defined($failMsg);
if (!$dontHandleKnownFailures)
{
my ($outbuf, $errbuf) = ('', '');
my $tb = Test::More->builder();
$tb->output(\$outbuf);
$tb->failure_output(\$errbuf);
$testResult = $method->(@_);
$tb->current_test($nextTestNum - 1);
$tb->reset_outputs();
&Test::More::pass("$msg (KNOWN_FAIL PASS: $failMsg)");
&Test::More::BAIL_OUT("Test $whichTestAmI:$nextTestNum ($msg) designated as KNOWN_FAIL unexpectedly succeeded! ($failMsg)") if ($testResult && $failMsg);
}
}
Test::More->builder()->level($currentLvl);
return $testResult;
}
1;
( run in 0.477 second using v1.01-cache-2.11-cpan-5a3173703d6 )