diff options
Diffstat (limited to 'cpan/Test-Simple/lib/Test/Builder/Tester.pm')
-rw-r--r-- | cpan/Test-Simple/lib/Test/Builder/Tester.pm | 50 |
1 files changed, 47 insertions, 3 deletions
diff --git a/cpan/Test-Simple/lib/Test/Builder/Tester.pm b/cpan/Test-Simple/lib/Test/Builder/Tester.pm index b0554b89ac..3b1f53ee53 100644 --- a/cpan/Test-Simple/lib/Test/Builder/Tester.pm +++ b/cpan/Test-Simple/lib/Test/Builder/Tester.pm @@ -1,7 +1,7 @@ package Test::Builder::Tester; use strict; -our $VERSION = "1.28"; +our $VERSION = '1.302015'; use Test::Builder 0.99; use Symbol; @@ -104,16 +104,26 @@ my $original_is_passing; my $original_output_handle; my $original_failure_handle; my $original_todo_handle; +my $original_formatter; my $original_harness_env; # function that starts testing and redirects the filehandles for now sub _start_testing { + # Hack for things that conditioned on Test-Stream being loaded + $INC{'Test/Stream.pm'} ||= 'fake' if $INC{'Test/Moose/More.pm'}; # even if we're running under Test::Harness pretend we're not # for now. This needed so Test::Builder doesn't add extra spaces $original_harness_env = $ENV{HARNESS_ACTIVE} || 0; $ENV{HARNESS_ACTIVE} = 0; + my $hub = $t->{Hub} || Test2::API::test2_stack->top; + $original_formatter = $hub->format; + unless ($original_formatter && $original_formatter->isa('Test::Builder::Formatter')) { + my $fmt = Test::Builder::Formatter->new; + $hub->format($fmt); + } + # remember what the handles were set to $original_output_handle = $t->output(); $original_failure_handle = $t->failure_output(); @@ -304,6 +314,8 @@ will function normally and cause success/errors for L<Test::Harness>. =cut sub test_test { + # END the hack + delete $INC{'Test/Stream.pm'} if $INC{'Test/Stream.pm'} && $INC{'Test/Stream.pm'} eq 'fake'; # decode the arguments as described in the pod my $mess; my %args; @@ -321,6 +333,10 @@ sub test_test { croak "Not testing. You must declare output with a test function first." unless $testing; + + my $hub = $t->{Hub} || Test2::API::test2_stack->top; + $hub->format($original_formatter); + # okay, reconnect the test suite back to the saved handles $t->output($original_output_handle); $t->failure_output($original_failure_handle); @@ -487,8 +503,9 @@ sub expect { sub _account_for_subtest { my( $self, $check ) = @_; - # Since we ship with Test::Builder, calling a private method is safe...ish. - return ref($check) ? $check : $t->_indent . $check; + my $hub = $t->{Stack}->top; + my $nesting = $hub->isa('Test2::Hub::Subtest') ? $hub->nested : 0; + return ref($check) ? $check : (' ' x $nesting) . $check; } sub _translate_Failed_check { @@ -563,6 +580,33 @@ sub complaint { } } + my @got = split "\n", $got; + my @wanted = split "\n", $wanted; + + $got = ""; + $wanted = ""; + + while (@got || @wanted) { + my $g = shift @got || ""; + my $w = shift @wanted || ""; + if ($g ne $w) { + if($g =~ s/(\s+)$/ |> /g) { + $g .= ($_ eq ' ' ? '_' : '\t') for split '', $1; + } + if($w =~ s/(\s+)$/ |> /g) { + $w .= ($_ eq ' ' ? '_' : '\t') for split '', $1; + } + $g = "> $g"; + $w = "> $w"; + } + else { + $g = " $g"; + $w = " $w"; + } + $got = $got ? "$got\n$g" : $g; + $wanted = $wanted ? "$wanted\n$w" : $w; + } + return "$type is:\n" . "$got\nnot:\n$wanted\nas expected"; } |