1use strict; 2use warnings; 3 4package Test::Deep::Any; 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 foreach my $cmp (@{$self->{val}}) 28 { 29 return 1 if Test::Deep::eq_deeply_cache($got, $cmp); 30 } 31 32 return 0; 33} 34 35sub diagnostics 36{ 37 my $self = shift; 38 my ($where, $last) = @_; 39 40 my $expect = $self->{val}; 41 42 my $got = $self->renderGot($last->{got}); 43 my $things = join(", ", map {$_->renderExp} @$expect); 44 45 my $diag = <<EOM; 46Comparing $where with Any 47got : $got 48expected : Any of ( $things ) 49EOM 50 51 $diag =~ s/\n+$/\n/; 52 return $diag; 53} 54 55sub add 56{ 57 my $self = shift; 58 my $expect = shift; 59 60 push(@{$self->{val}}, Test::Deep::wrap($expect)); 61 62 return $self; 63} 64 651; 66