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

Revision 2583, 1.2 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::HashElements;
5
6use Test::Deep::Ref;
7
8sub init
9{
10        my $self = shift;
11
12        my $val = shift;
13
14        $self->{val} = $val;
15}
16
17sub descend
18{
19        my $self = shift;
20
21        my $got = shift;
22
23        my $exp = $self->{val};
24
25        my $data = $self->data;
26
27        my $master = $self->getMaster($got, $exp);
28
29        foreach my $key (keys %$master)
30        {
31                $data->{index} = $key;
32
33                my $got_elem = exists $got->{$key} ? $got->{$key} : $Test::Deep::DNE;
34                my $exp_elem = exists $exp->{$key} ? $exp->{$key} : $Test::Deep::DNE;
35
36                next if Test::Deep::descend($got_elem, $exp_elem);
37
38                return 0;
39        }
40
41        return 1;
42}
43
44sub getMaster
45{
46        my $self = shift;
47
48        my ($got, $exp) = @_;
49
50        return keys %$got > keys %$exp ? $got : $exp;
51}
52
53sub render_stack
54{
55        my $self = shift;
56        my ($var, $data) = @_;
57        $var .= "->" unless $Test::Deep::Stack->incArrow;
58        $var .= '{"'.quotemeta($data->{index}).'"}';
59
60        return $var;
61}
62
63sub reset_arrow
64{
65        return 0;
66}
67
68package Test::Deep::SuperHashElements;
69
70use base 'Test::Deep::HashElements';
71
72sub getMaster
73{
74        my $self = shift;
75
76        my ($got, $exp) = @_;
77
78        return $exp;
79}
80
81package Test::Deep::SubHashElements;
82
83use base 'Test::Deep::HashElements';
84
85sub getMaster
86{
87        my $self = shift;
88
89        my ($got, $exp) = @_;
90
91        return $got;
92}
93
941;
Note: See TracBrowser for help on using the browser.