blob: 4faec7a87b40106c0ab72d33ed0e38fd179d891a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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;
|