1use strict; 2use warnings; 3 4package Test::Deep::All; 5 6use Test::Deep::Cmp; 7 8use overload 9 '&' => \&add, 10 fallback => 1, 11; 12 13sub init 14{ 15 my $self = shift; 16 17 my @list = map {Test::Deep::wrap($_)} @_; 18 19 $self->{val} = \@list; 20} 21 22sub descend 23{ 24 my $self = shift; 25 my $got = shift; 26 27 my $data = $self->data; 28 29 my $index = 1; 30 31 foreach my $cmp (@{$self->{val}}) 32 { 33 $data->{index} = $index; 34 $index++; 35 36 next if Test::Deep::descend($got, $cmp); 37 return 0 38 } 39 40 return 1; 41} 42 43sub render_stack 44{ 45 my $self = shift; 46 my $var = shift; 47 my $data = shift; 48 49 my $max = @{$self->{val}}; 50 51 return "(Part $data->{index} of $max in $var)"; 52} 53 54sub add 55{ 56 my $self = shift; 57 my $expect = shift; 58 59 push(@{$self->{val}}, Test::Deep::wrap($expect)); 60 61 return $self; 62} 63 641; 65