File: | local/lib/perl5/Test/Deep/Stack.pm |
Coverage: | 55.4% |
line | stmt | bran | cond | sub | time | code |
---|---|---|---|---|---|---|
1 | 6 6 6 | 13 5 96 | use strict; | |||
2 | 6 6 6 | 11 3 97 | use warnings; | |||
3 | ||||||
4 | package Test::Deep::Stack; | |||||
5 | ||||||
6 | 6 6 6 | 10 3 130 | use Carp qw( confess ); | |||
7 | 6 6 6 | 11 4 98 | use Scalar::Util; | |||
8 | ||||||
9 | 6 6 6 | 734 7 32 | use Test::Deep::MM qw( new init Stack Arrow ); | |||
10 | ||||||
11 | sub init | |||||
12 | { | |||||
13 | 54 | 32 | my $self = shift; | |||
14 | ||||||
15 | 54 | 100 | $self->SUPER::init(@_); | |||
16 | ||||||
17 | 54 | 74 | $self->setStack([]) unless $self->getStack; | |||
18 | } | |||||
19 | ||||||
20 | sub push | |||||
21 | { | |||||
22 | 176 | 93 | my $self = shift; | |||
23 | ||||||
24 | 176 176 | 78 187 | push(@{$self->getStack}, @_); | |||
25 | } | |||||
26 | ||||||
27 | sub pop | |||||
28 | { | |||||
29 | 176 | 76 | my $self = shift; | |||
30 | ||||||
31 | 176 176 | 77 134 | return pop @{$self->getStack}; | |||
32 | } | |||||
33 | ||||||
34 | sub render | |||||
35 | { | |||||
36 | 0 | 0 | my $self = shift; | |||
37 | 0 | 0 | my $var = shift; | |||
38 | ||||||
39 | 0 | 0 | my $stack = $self->getStack; | |||
40 | ||||||
41 | 0 | 0 | $self->setArrow(0); | |||
42 | ||||||
43 | 0 | 0 | foreach my $data (@$stack) | |||
44 | { | |||||
45 | 0 | 0 | my $exp = $data->{exp}; | |||
46 | 0 | 0 | if (Scalar::Util::blessed($exp) and $exp->isa("Test::Deep::Cmp")) | |||
47 | { | |||||
48 | 0 | 0 | $var = $exp->render_stack($var, $data); | |||
49 | ||||||
50 | 0 | 0 | $self->setArrow(0) if $exp->reset_arrow; | |||
51 | } | |||||
52 | else | |||||
53 | { | |||||
54 | 0 | 0 | confess "Don't know how to render '$exp'"; | |||
55 | } | |||||
56 | } | |||||
57 | ||||||
58 | 0 | 0 | return $var; | |||
59 | } | |||||
60 | ||||||
61 | sub getLast | |||||
62 | { | |||||
63 | 22 | 15 | my $self = shift; | |||
64 | ||||||
65 | 22 | 19 | return $self->getStack->[-1]; | |||
66 | } | |||||
67 | ||||||
68 | sub incArrow | |||||
69 | { | |||||
70 | 0 | my $self = shift; | ||||
71 | ||||||
72 | 0 | my $a = $self->getArrow; | ||||
73 | 0 | $self->setArrow($a + 1); | ||||
74 | ||||||
75 | 0 | return $a; | ||||
76 | } | |||||
77 | ||||||
78 | sub length | |||||
79 | { | |||||
80 | 0 | my $self = shift; | ||||
81 | ||||||
82 | 0 0 | return @{$self->getStack} + 0; | ||||
83 | } | |||||
84 | ||||||
85 | 1; |