diff options
Diffstat (limited to 'Master/tlpkg/tlperl/lib/Test/Deep/Stack.pm')
-rwxr-xr-x | Master/tlpkg/tlperl/lib/Test/Deep/Stack.pm | 84 |
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; |