File Coverage

blib/lib/Test2/Event/Ok.pm
Criterion Covered Total %
statement 42 42 100.0
branch 15 16 93.7
condition 11 11 100.0
subroutine 12 12 100.0
pod 4 6 66.6
total 84 87 96.5


line stmt bran cond sub pod time code
1             package Test2::Event::Ok;
2 246     246   2131 use strict;
  246         488  
  246         7055  
3 246     246   1309 use warnings;
  246         450  
  246         14551  
4              
5             our $VERSION = '1.302181';
6              
7              
8 246     246   114654 BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) }
  246         11729  
9 246         1163 use Test2::Util::HashBase qw{
10             pass effective_pass name todo
11 246     246   1786 };
  246         508  
12              
13             sub init {
14 200     200 0 411 my $self = shift;
15              
16             # Do not store objects here, only true or false
17 200 100       850 $self->{+PASS} = $self->{+PASS} ? 1 : 0;
18 200   100     1106 $self->{+EFFECTIVE_PASS} = $self->{+PASS} || (defined($self->{+TODO}) ? 1 : 0);
19             }
20              
21             {
22 246     246   1878 no warnings 'redefine';
  246         602  
  246         110445  
23             sub set_todo {
24 317     317   565 my $self = shift;
25 317         568 my ($todo) = @_;
26 317         742 $self->{+TODO} = $todo;
27 317 100       873 $self->{+EFFECTIVE_PASS} = defined($todo) ? 1 : $self->{+PASS};
28             }
29             }
30              
31 3     3 1 28 sub increments_count { 1 };
32              
33 2     2 1 9 sub causes_fail { !$_[0]->{+EFFECTIVE_PASS} }
34              
35             sub summary {
36 7     7 1 15 my $self = shift;
37              
38 7   100     22 my $name = $self->{+NAME} || "Nameless Assertion";
39              
40 7         12 my $todo = $self->{+TODO};
41 7 100       22 if ($todo) {
    100          
42 1         3 $name .= " (TODO: $todo)";
43             }
44             elsif (defined $todo) {
45 1         2 $name .= " (TODO)"
46             }
47              
48 7         25 return $name;
49             }
50              
51             sub extra_amnesty {
52 1158     1158 0 1686 my $self = shift;
53 1158 100 100     5607 return unless defined($self->{+TODO}) || ($self->{+EFFECTIVE_PASS} && !$self->{+PASS});
      100        
54             return {
55             tag => 'TODO',
56 462         1714 details => $self->{+TODO},
57             };
58             }
59              
60             sub facet_data {
61 1184     1184 1 1891 my $self = shift;
62              
63 1184         3440 my $out = $self->common_facet_data;
64              
65             $out->{assert} = {
66             no_debug => 1, # Legacy behavior
67             pass => $self->{+PASS},
68 1184         4233 details => $self->{+NAME},
69             };
70              
71 1184 100       3057 if (my @exra_amnesty = $self->extra_amnesty) {
72 488         681 my %seen;
73              
74             # It is possible the extra amnesty can be a duplicate, so filter it.
75             $out->{amnesty} = [
76 767 100       4322 grep { !$seen{defined($_->{tag}) ? $_->{tag} : ''}->{defined($_->{details}) ? $_->{details} : ''}++ }
    50          
77             @exra_amnesty,
78 488         795 @{$out->{amnesty}},
  488         1119  
79             ];
80             }
81              
82 1184         3651 return $out;
83             }
84              
85             1;
86              
87             __END__
88              
89             =pod
90              
91             =encoding UTF-8
92              
93             =head1 NAME
94              
95             Test2::Event::Ok - Ok event type
96              
97             =head1 DESCRIPTION
98              
99             Ok events are generated whenever you run a test that produces a result.
100             Examples are C<ok()>, and C<is()>.
101              
102             =head1 SYNOPSIS
103              
104             use Test2::API qw/context/;
105             use Test2::Event::Ok;
106              
107             my $ctx = context();
108             my $event = $ctx->ok($bool, $name, \@diag);
109              
110             or:
111              
112             my $ctx = context();
113             my $event = $ctx->send_event(
114             'Ok',
115             pass => $bool,
116             name => $name,
117             );
118              
119             =head1 ACCESSORS
120              
121             =over 4
122              
123             =item $rb = $e->pass
124              
125             The original true/false value of whatever was passed into the event (but
126             reduced down to 1 or 0).
127              
128             =item $name = $e->name
129              
130             Name of the test.
131              
132             =item $b = $e->effective_pass
133              
134             This is the true/false value of the test after TODO and similar modifiers are
135             taken into account.
136              
137             =back
138              
139             =head1 SOURCE
140              
141             The source code repository for Test2 can be found at
142             F<http://github.com/Test-More/test-more/>.
143              
144             =head1 MAINTAINERS
145              
146             =over 4
147              
148             =item Chad Granum E<lt>exodist@cpan.orgE<gt>
149              
150             =back
151              
152             =head1 AUTHORS
153              
154             =over 4
155              
156             =item Chad Granum E<lt>exodist@cpan.orgE<gt>
157              
158             =back
159              
160             =head1 COPYRIGHT
161              
162             Copyright 2020 Chad Granum E<lt>exodist@cpan.orgE<gt>.
163              
164             This program is free software; you can redistribute it and/or
165             modify it under the same terms as Perl itself.
166              
167             See F<http://dev.perl.org/licenses/>
168              
169             =cut