1package Test2::Event::Ok; 2use strict; 3use warnings; 4 5our $VERSION = '1.302190'; 6 7 8BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } 9use Test2::Util::HashBase qw{ 10 pass effective_pass name todo 11}; 12 13sub init { 14 my $self = shift; 15 16 # Do not store objects here, only true or false 17 $self->{+PASS} = $self->{+PASS} ? 1 : 0; 18 $self->{+EFFECTIVE_PASS} = $self->{+PASS} || (defined($self->{+TODO}) ? 1 : 0); 19} 20 21{ 22 no warnings 'redefine'; 23 sub set_todo { 24 my $self = shift; 25 my ($todo) = @_; 26 $self->{+TODO} = $todo; 27 $self->{+EFFECTIVE_PASS} = defined($todo) ? 1 : $self->{+PASS}; 28 } 29} 30 31sub increments_count { 1 }; 32 33sub causes_fail { !$_[0]->{+EFFECTIVE_PASS} } 34 35sub summary { 36 my $self = shift; 37 38 my $name = $self->{+NAME} || "Nameless Assertion"; 39 40 my $todo = $self->{+TODO}; 41 if ($todo) { 42 $name .= " (TODO: $todo)"; 43 } 44 elsif (defined $todo) { 45 $name .= " (TODO)" 46 } 47 48 return $name; 49} 50 51sub extra_amnesty { 52 my $self = shift; 53 return unless defined($self->{+TODO}) || ($self->{+EFFECTIVE_PASS} && !$self->{+PASS}); 54 return { 55 tag => 'TODO', 56 details => $self->{+TODO}, 57 }; 58} 59 60sub facet_data { 61 my $self = shift; 62 63 my $out = $self->common_facet_data; 64 65 $out->{assert} = { 66 no_debug => 1, # Legacy behavior 67 pass => $self->{+PASS}, 68 details => $self->{+NAME}, 69 }; 70 71 if (my @exra_amnesty = $self->extra_amnesty) { 72 my %seen; 73 74 # It is possible the extra amnesty can be a duplicate, so filter it. 75 $out->{amnesty} = [ 76 grep { !$seen{defined($_->{tag}) ? $_->{tag} : ''}->{defined($_->{details}) ? $_->{details} : ''}++ } 77 @exra_amnesty, 78 @{$out->{amnesty}}, 79 ]; 80 } 81 82 return $out; 83} 84 851; 86 87__END__ 88 89=pod 90 91=encoding UTF-8 92 93=head1 NAME 94 95Test2::Event::Ok - Ok event type 96 97=head1 DESCRIPTION 98 99Ok events are generated whenever you run a test that produces a result. 100Examples 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 110or: 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 125The original true/false value of whatever was passed into the event (but 126reduced down to 1 or 0). 127 128=item $name = $e->name 129 130Name of the test. 131 132=item $b = $e->effective_pass 133 134This is the true/false value of the test after TODO and similar modifiers are 135taken into account. 136 137=back 138 139=head1 SOURCE 140 141The source code repository for Test2 can be found at 142F<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 162Copyright 2020 Chad Granum E<lt>exodist@cpan.orgE<gt>. 163 164This program is free software; you can redistribute it and/or 165modify it under the same terms as Perl itself. 166 167See F<http://dev.perl.org/licenses/> 168 169=cut 170