summaryrefslogtreecommitdiff
path: root/Master/tlpkg/tlperl/lib/Test/Deep/Stack.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Test/Deep/Stack.pm')
-rwxr-xr-xMaster/tlpkg/tlperl/lib/Test/Deep/Stack.pm84
1 files changed, 84 insertions, 0 deletions
diff --git a/Master/tlpkg/tlperl/lib/Test/Deep/Stack.pm b/Master/tlpkg/tlperl/lib/Test/Deep/Stack.pm
new file mode 100755
index 00000000000..4faec7a87b4
--- /dev/null
+++ b/Master/tlpkg/tlperl/lib/Test/Deep/Stack.pm
@@ -0,0 +1,84 @@
+use strict;
+use warnings;
+
+package Test::Deep::Stack;
+
+use Carp qw( confess );
+
+use Test::Deep::MM qw( new init Stack Arrow );
+
+sub init
+{
+ my $self = shift;
+
+ $self->SUPER::init(@_);
+
+ $self->setStack([]) unless $self->getStack;
+}
+
+sub push
+{
+ my $self = shift;
+
+ push(@{$self->getStack}, @_);
+}
+
+sub pop
+{
+ my $self = shift;
+
+ return pop @{$self->getStack};
+}
+
+sub render
+{
+ my $self = shift;
+ my $var = shift;
+
+ my $stack = $self->getStack;
+
+ $self->setArrow(0);
+
+ foreach my $data (@$stack)
+ {
+ my $exp = $data->{exp};
+ if (UNIVERSAL::isa($exp, "Test::Deep::Cmp"))
+ {
+ $var = $exp->render_stack($var, $data);
+
+ $self->setArrow(0) if $exp->reset_arrow;
+ }
+ else
+ {
+ confess "Don't know how to render '$exp'";
+ }
+ }
+
+ return $var;
+}
+
+sub getLast
+{
+ my $self = shift;
+
+ return $self->getStack->[-1];
+}
+
+sub incArrow
+{
+ my $self = shift;
+
+ my $a = $self->getArrow;
+ $self->setArrow($a + 1);
+
+ return $a;
+}
+
+sub length
+{
+ my $self = shift;
+
+ return @{$self->getStack} + 0;
+}
+
+1;