diff options
author | Norbert Preining <preining@logic.at> | 2010-05-12 16:54:37 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2010-05-12 16:54:37 +0000 |
commit | 661c41a09e39a182865e0b51e34cc995a0dc96e8 (patch) | |
tree | 2f79bb1406e22fdcb2587be8ffda6c0c609d7932 /Master/tlpkg/tlperl/lib/Test/Deep/Stack.pm | |
parent | b645030efc22e13c2498a1522083634ab91b2de1 (diff) |
move tlperl.straw to tlperl
git-svn-id: svn://tug.org/texlive/trunk@18210 c570f23f-e606-0410-a88d-b1316a301751
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; |