root/branches/release-40/t/lib/Test/Deep/Stack.pm @ 2583

Revision 2583, 1.0 kB (checked in by mpaschal, 18 months ago)

Add Test::Deep to t/lib, since we already use it in driver-tests.pl
BugzID: 79953

Line 
1use strict;
2use warnings;
3
4package Test::Deep::Stack;
5
6use Carp qw( confess );
7
8use Test::Deep::MM qw( new init Stack Arrow );
9
10sub init
11{
12        my $self = shift;
13
14        $self->SUPER::init(@_);
15
16        $self->setStack([]) unless $self->getStack;
17}
18
19sub push
20{
21        my $self = shift;
22
23        push(@{$self->getStack}, @_);
24}
25
26sub pop
27{
28        my $self = shift;
29
30        return pop @{$self->getStack};
31}
32
33sub render
34{
35        my $self = shift;
36        my $var = shift;
37
38        my $stack = $self->getStack;
39
40        $self->setArrow(0);
41
42        foreach my $data (@$stack)
43        {
44                my $exp = $data->{exp};
45                if (UNIVERSAL::isa($exp, "Test::Deep::Cmp"))
46                {
47                        $var = $exp->render_stack($var, $data);
48
49                        $self->setArrow(0) if $exp->reset_arrow;
50                }
51                else
52                {
53                        confess "Don't know how to render '$exp'";
54                }
55        }
56
57        return $var;
58}
59
60sub getLast
61{
62        my $self = shift;
63
64        return $self->getStack->[-1];
65}
66
67sub incArrow
68{
69        my $self = shift;
70
71        my $a = $self->getArrow;
72        $self->setArrow($a + 1);
73
74        return $a;
75}
76
77sub length
78{
79        my $self = shift;
80
81        return @{$self->getStack} + 0;
82}
83
841;
Note: See TracBrowser for help on using the browser.