1use strict; 2use warnings; 3 4package Test::Deep::Code; 5 6use Test::Deep::Cmp; 7 8sub init 9{ 10 my $self = shift; 11 12 my $code = shift || die "No coderef supplied"; 13 14 $self->{code} = $code; 15} 16 17sub descend 18{ 19 my $self = shift; 20 my $got = shift; 21 22 my ($ok, $diag) = &{$self->{code}}($got); 23 24 $self->data->{diag} = $diag; 25 26 return $ok; 27} 28 29sub diagnostics 30{ 31 my $self = shift; 32 my ($where, $last) = @_; 33 34 my $error = $last->{diag}; 35 my $data = Test::Deep::render_val($last->{got}); 36 my $diag = <<EOM; 37Ran coderef at $where on 38 39$data 40EOM 41 if (defined($error)) 42 { 43 $diag .= <<EOM; 44and it said 45$error 46EOM 47 } 48 else 49 { 50 $diag .= <<EOM; 51it failed but it didn't say why. 52EOM 53 } 54 55 return $diag; 56} 57 581; 59