File Coverage

blib/lib/Test2/Compare/Condition.pm
Criterion Covered Total %
statement 45 45 100.0
branch 15 20 75.0
condition 1 2 50.0
subroutine 12 12 100.0
pod 4 5 80.0
total 77 84 91.6


line stmt bran cond sub pod time code
1             package Test2::Compare::Condition;
2 2     2   13 use strict;
  2         3  
  2         55  
3 2     2   9 use warnings;
  2         4  
  2         51  
4              
5 2     2   8 use base 'Test2::Compare::Base';
  2         12  
  2         627  
6              
7 2     2   16923 use Carp qw/croak/;
  2         4  
  2         99  
8              
9 2     2   16 use Test2::Util::HashBase qw/code/;
  2         4  
  2         12  
10              
11             # Overloads '!' for us.
12 2     2   704 use Test2::Compare::Negatable;
  2         335  
  2         14  
13              
14             sub init {
15 11     11 0 149 my $self = shift;
16              
17 11 50       77 croak "'code' must be a code reference" unless ref $self->{+CODE} eq 'CODE';
18              
19 11         38 $self->SUPER::init();
20             }
21              
22             sub operator {
23 2     2 1 398 my $self = shift;
24 2 100       8 return '!=' if $self->{+NEGATE};
25 1         12 return '==';
26             }
27              
28 2     2 1 51 sub name { '' }
29              
30             sub verify {
31 13     13 1 437 my $self = shift;
32 13         34 my %params = @_;
33 13         31 my ($got, $exists) = @params{qw/got exists/};
34              
35 13 50       34 return 0 unless $params{exists};
36              
37 13         22 local $_ = $got;
38 13         36 my $cond = $self->{+CODE}->();
39 13 100       72 $cond = $cond ? 0 : 1 if $self->{+NEGATE};
    100          
40              
41 13         39 return $cond;
42             }
43              
44             sub run {
45 13     13 1 8672 my $self = shift;
46 13 100       47 my $delta = $self->SUPER::run(@_) or return;
47              
48 4   50     149 my $dne = $delta->dne || "";
49 4 50       30 unless ($dne eq 'got') {
50 4         10 my $got = $delta->got;
51 4         18 $delta->set_got(_render_bool($got));
52             }
53              
54 4         20 return $delta;
55             }
56              
57             sub _render_bool {
58 4     4   7 my $bool = shift;
59 4 100       11 my $name = $bool ? 'TRUE' : 'FALSE';
60 4 50       9 my $val = defined $bool ? $bool : 'undef';
61 4 50       11 $val = "''" unless length($val);
62              
63 4         15 return "<$name ($val)>";
64             }
65              
66             1;