summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Test/Deep/Code.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Test/Deep/Code.pm')
-rwxr-xr-xMaster/tlpkg/tlperl/lib/Test/Deep/Code.pm58
1 files changed, 58 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Test/Deep/Code.pm b/Master/tlpkg/tlperl/lib/Test/Deep/Code.pm
new file mode 100755
index 00000000000..8768a590f6d
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Test/Deep/Code.pm
@@ -0,0 +1,58 @@
+use strict;
+use warnings;
+
+package Test::Deep::Code;
+
+use Test::Deep::Cmp;
+
+sub init
+{
+ my $self = shift;
+
+ my $code = shift || die "No coderef supplied";
+
+ $self->{code} = $code;
+}
+
+sub descend
+{
+ my $self = shift;
+ my $got = shift;
+
+ my ($ok, $diag) = &{$self->{code}}($got);
+
+ $self->data->{diag} = $diag;
+
+ return $ok;
+}
+
+sub diagnostics
+{
+ my $self = shift;
+ my ($where, $last) = @_;
+
+ my $error = $last->{diag};
+ my $data = Test::Deep::render_val($last->{got});
+ my $diag = <<EOM;
+Ran coderef at $where on
+
+$data
+EOM
+ if (defined($error))
+ {
+ $diag .= <<EOM;
+and it said
+$error
+EOM
+ }
+ else
+ {
+ $diag .= <<EOM;
+it failed but it didn't say why.
+EOM
+ }
+
+ return $diag;
+}
+
+1;