15759b3d2Safresh1package Test2::Event::Generic; 25759b3d2Safresh1use strict; 35759b3d2Safresh1use warnings; 45759b3d2Safresh1 55759b3d2Safresh1use Carp qw/croak/; 65759b3d2Safresh1use Scalar::Util qw/reftype/; 75759b3d2Safresh1 8*5486feefSafresh1our $VERSION = '1.302199'; 95759b3d2Safresh1 105759b3d2Safresh1BEGIN { require Test2::Event; our @ISA = qw(Test2::Event) } 115759b3d2Safresh1use Test2::Util::HashBase; 125759b3d2Safresh1 135759b3d2Safresh1my @FIELDS = qw{ 145759b3d2Safresh1 causes_fail increments_count diagnostics no_display callback terminate 155759b3d2Safresh1 global sets_plan summary facet_data 165759b3d2Safresh1}; 175759b3d2Safresh1my %DEFAULTS = ( 185759b3d2Safresh1 causes_fail => 0, 195759b3d2Safresh1 increments_count => 0, 205759b3d2Safresh1 diagnostics => 0, 215759b3d2Safresh1 no_display => 0, 225759b3d2Safresh1); 235759b3d2Safresh1 245759b3d2Safresh1sub init { 255759b3d2Safresh1 my $self = shift; 265759b3d2Safresh1 275759b3d2Safresh1 for my $field (@FIELDS) { 285759b3d2Safresh1 my $val = defined $self->{$field} ? delete $self->{$field} : $DEFAULTS{$field}; 295759b3d2Safresh1 next unless defined $val; 305759b3d2Safresh1 315759b3d2Safresh1 my $set = "set_$field"; 325759b3d2Safresh1 $self->$set($val); 335759b3d2Safresh1 } 345759b3d2Safresh1} 355759b3d2Safresh1 365759b3d2Safresh1for my $field (@FIELDS) { 375759b3d2Safresh1 no strict 'refs'; 385759b3d2Safresh1 395759b3d2Safresh1 *$field = sub { exists $_[0]->{$field} ? $_[0]->{$field} : () } 405759b3d2Safresh1 unless exists &{$field}; 415759b3d2Safresh1 425759b3d2Safresh1 *{"set_$field"} = sub { $_[0]->{$field} = $_[1] } 435759b3d2Safresh1 unless exists &{"set_$field"}; 445759b3d2Safresh1} 455759b3d2Safresh1 465759b3d2Safresh1sub can { 475759b3d2Safresh1 my $self = shift; 485759b3d2Safresh1 my ($name) = @_; 495759b3d2Safresh1 return $self->SUPER::can($name) unless $name eq 'callback'; 505759b3d2Safresh1 return $self->{callback} || \&Test2::Event::callback; 515759b3d2Safresh1} 525759b3d2Safresh1 535759b3d2Safresh1sub facet_data { 545759b3d2Safresh1 my $self = shift; 555759b3d2Safresh1 return $self->{facet_data} || $self->SUPER::facet_data(); 565759b3d2Safresh1} 575759b3d2Safresh1 585759b3d2Safresh1sub summary { 595759b3d2Safresh1 my $self = shift; 605759b3d2Safresh1 return $self->{summary} if defined $self->{summary}; 615759b3d2Safresh1 $self->SUPER::summary(); 625759b3d2Safresh1} 635759b3d2Safresh1 645759b3d2Safresh1sub sets_plan { 655759b3d2Safresh1 my $self = shift; 665759b3d2Safresh1 return unless $self->{sets_plan}; 675759b3d2Safresh1 return @{$self->{sets_plan}}; 685759b3d2Safresh1} 695759b3d2Safresh1 705759b3d2Safresh1sub callback { 715759b3d2Safresh1 my $self = shift; 725759b3d2Safresh1 my $cb = $self->{callback} || return; 735759b3d2Safresh1 $self->$cb(@_); 745759b3d2Safresh1} 755759b3d2Safresh1 765759b3d2Safresh1sub set_global { 775759b3d2Safresh1 my $self = shift; 785759b3d2Safresh1 my ($bool) = @_; 795759b3d2Safresh1 805759b3d2Safresh1 if(!defined $bool) { 815759b3d2Safresh1 delete $self->{global}; 825759b3d2Safresh1 return undef; 835759b3d2Safresh1 } 845759b3d2Safresh1 855759b3d2Safresh1 $self->{global} = $bool; 865759b3d2Safresh1} 875759b3d2Safresh1 885759b3d2Safresh1sub set_callback { 895759b3d2Safresh1 my $self = shift; 905759b3d2Safresh1 my ($cb) = @_; 915759b3d2Safresh1 925759b3d2Safresh1 if(!defined $cb) { 935759b3d2Safresh1 delete $self->{callback}; 945759b3d2Safresh1 return undef; 955759b3d2Safresh1 } 965759b3d2Safresh1 975759b3d2Safresh1 croak "callback must be a code reference" 985759b3d2Safresh1 unless ref($cb) && reftype($cb) eq 'CODE'; 995759b3d2Safresh1 1005759b3d2Safresh1 $self->{callback} = $cb; 1015759b3d2Safresh1} 1025759b3d2Safresh1 1035759b3d2Safresh1sub set_terminate { 1045759b3d2Safresh1 my $self = shift; 1055759b3d2Safresh1 my ($exit) = @_; 1065759b3d2Safresh1 1075759b3d2Safresh1 if(!defined $exit) { 1085759b3d2Safresh1 delete $self->{terminate}; 1095759b3d2Safresh1 return undef; 1105759b3d2Safresh1 } 1115759b3d2Safresh1 1125759b3d2Safresh1 croak "terminate must be a positive integer" 1135759b3d2Safresh1 unless $exit =~ m/^\d+$/; 1145759b3d2Safresh1 1155759b3d2Safresh1 $self->{terminate} = $exit; 1165759b3d2Safresh1} 1175759b3d2Safresh1 1185759b3d2Safresh1sub set_sets_plan { 1195759b3d2Safresh1 my $self = shift; 1205759b3d2Safresh1 my ($plan) = @_; 1215759b3d2Safresh1 1225759b3d2Safresh1 if(!defined $plan) { 1235759b3d2Safresh1 delete $self->{sets_plan}; 1245759b3d2Safresh1 return undef; 1255759b3d2Safresh1 } 1265759b3d2Safresh1 1275759b3d2Safresh1 croak "'sets_plan' must be an array reference" 1285759b3d2Safresh1 unless ref($plan) && reftype($plan) eq 'ARRAY'; 1295759b3d2Safresh1 1305759b3d2Safresh1 $self->{sets_plan} = $plan; 1315759b3d2Safresh1} 1325759b3d2Safresh1 1335759b3d2Safresh11; 1345759b3d2Safresh1 1355759b3d2Safresh1__END__ 1365759b3d2Safresh1 1375759b3d2Safresh1=pod 1385759b3d2Safresh1 1395759b3d2Safresh1=encoding UTF-8 1405759b3d2Safresh1 1415759b3d2Safresh1=head1 NAME 1425759b3d2Safresh1 1435759b3d2Safresh1Test2::Event::Generic - Generic event type. 1445759b3d2Safresh1 1455759b3d2Safresh1=head1 DESCRIPTION 1465759b3d2Safresh1 1475759b3d2Safresh1This is a generic event that lets you customize all fields in the event API. 1485759b3d2Safresh1This is useful if you have need for a custom event that does not make sense as 1495759b3d2Safresh1a published reusable event subclass. 1505759b3d2Safresh1 1515759b3d2Safresh1=head1 SYNOPSIS 1525759b3d2Safresh1 1535759b3d2Safresh1 use Test2::API qw/context/; 1545759b3d2Safresh1 1555759b3d2Safresh1 sub send_custom_fail { 1565759b3d2Safresh1 my $ctx = shift; 1575759b3d2Safresh1 1585759b3d2Safresh1 $ctx->send_event('Generic', causes_fail => 1, summary => 'The sky is falling'); 1595759b3d2Safresh1 1605759b3d2Safresh1 $ctx->release; 1615759b3d2Safresh1 } 1625759b3d2Safresh1 1635759b3d2Safresh1 send_custom_fail(); 1645759b3d2Safresh1 1655759b3d2Safresh1=head1 METHODS 1665759b3d2Safresh1 1675759b3d2Safresh1=over 4 1685759b3d2Safresh1 1695759b3d2Safresh1=item $e->facet_data($data) 1705759b3d2Safresh1 1715759b3d2Safresh1=item $data = $e->facet_data 1725759b3d2Safresh1 1735759b3d2Safresh1Get or set the facet data (see L<Test2::Event>). If no facet_data is set then 1745759b3d2Safresh1C<< Test2::Event->facet_data >> will be called to produce facets from the other 1755759b3d2Safresh1data. 1765759b3d2Safresh1 1775759b3d2Safresh1=item $e->callback($hub) 1785759b3d2Safresh1 1795759b3d2Safresh1Call the custom callback if one is set, otherwise this does nothing. 1805759b3d2Safresh1 1815759b3d2Safresh1=item $e->set_callback(sub { ... }) 1825759b3d2Safresh1 1835759b3d2Safresh1Set the custom callback. The custom callback must be a coderef. The first 1845759b3d2Safresh1argument to your callback will be the event itself, the second will be the 1855759b3d2Safresh1L<Test2::Event::Hub> that is using the callback. 1865759b3d2Safresh1 1875759b3d2Safresh1=item $bool = $e->causes_fail 1885759b3d2Safresh1 1895759b3d2Safresh1=item $e->set_causes_fail($bool) 1905759b3d2Safresh1 1915759b3d2Safresh1Get/Set the C<causes_fail> attribute. This defaults to C<0>. 1925759b3d2Safresh1 1935759b3d2Safresh1=item $bool = $e->diagnostics 1945759b3d2Safresh1 1955759b3d2Safresh1=item $e->set_diagnostics($bool) 1965759b3d2Safresh1 1975759b3d2Safresh1Get/Set the C<diagnostics> attribute. This defaults to C<0>. 1985759b3d2Safresh1 1995759b3d2Safresh1=item $bool_or_undef = $e->global 2005759b3d2Safresh1 2015759b3d2Safresh1=item @bool_or_empty = $e->global 2025759b3d2Safresh1 2035759b3d2Safresh1=item $e->set_global($bool_or_undef) 2045759b3d2Safresh1 2055759b3d2Safresh1Get/Set the C<diagnostics> attribute. This defaults to an empty list which is 2065759b3d2Safresh1undef in scalar context. 2075759b3d2Safresh1 2085759b3d2Safresh1=item $bool = $e->increments_count 2095759b3d2Safresh1 2105759b3d2Safresh1=item $e->set_increments_count($bool) 2115759b3d2Safresh1 2125759b3d2Safresh1Get/Set the C<increments_count> attribute. This defaults to C<0>. 2135759b3d2Safresh1 2145759b3d2Safresh1=item $bool = $e->no_display 2155759b3d2Safresh1 2165759b3d2Safresh1=item $e->set_no_display($bool) 2175759b3d2Safresh1 2185759b3d2Safresh1Get/Set the C<no_display> attribute. This defaults to C<0>. 2195759b3d2Safresh1 2205759b3d2Safresh1=item @plan = $e->sets_plan 2215759b3d2Safresh1 2225759b3d2Safresh1Get the plan if this event sets one. The plan is a list of up to 3 items: 2235759b3d2Safresh1C<($count, $directive, $reason)>. C<$count> must be defined, the others may be 2245759b3d2Safresh1undef, or may not exist at all. 2255759b3d2Safresh1 2265759b3d2Safresh1=item $e->set_sets_plan(\@plan) 2275759b3d2Safresh1 2285759b3d2Safresh1Set the plan. You must pass in an arrayref with up to 3 elements. 2295759b3d2Safresh1 2305759b3d2Safresh1=item $summary = $e->summary 2315759b3d2Safresh1 2325759b3d2Safresh1=item $e->set_summary($summary_or_undef) 2335759b3d2Safresh1 2345759b3d2Safresh1Get/Set the summary. This will default to the event package 2355759b3d2Safresh1C<'Test2::Event::Generic'>. You can set it to any value. Setting this to 2365759b3d2Safresh1C<undef> will reset it to the default. 2375759b3d2Safresh1 2385759b3d2Safresh1=item $int_or_undef = $e->terminate 2395759b3d2Safresh1 2405759b3d2Safresh1=item @int_or_empty = $e->terminate 2415759b3d2Safresh1 2425759b3d2Safresh1=item $e->set_terminate($int_or_undef) 2435759b3d2Safresh1 2445759b3d2Safresh1This will get/set the C<terminate> attribute. This defaults to undef in scalar 2455759b3d2Safresh1context, or an empty list in list context. Setting this to undef will clear it 2465759b3d2Safresh1completely. This must be set to a positive integer (0 or larger). 2475759b3d2Safresh1 2485759b3d2Safresh1=back 2495759b3d2Safresh1 2505759b3d2Safresh1=head1 SOURCE 2515759b3d2Safresh1 2525759b3d2Safresh1The source code repository for Test2 can be found at 253*5486feefSafresh1L<https://github.com/Test-More/test-more/>. 2545759b3d2Safresh1 2555759b3d2Safresh1=head1 MAINTAINERS 2565759b3d2Safresh1 2575759b3d2Safresh1=over 4 2585759b3d2Safresh1 2595759b3d2Safresh1=item Chad Granum E<lt>exodist@cpan.orgE<gt> 2605759b3d2Safresh1 2615759b3d2Safresh1=back 2625759b3d2Safresh1 2635759b3d2Safresh1=head1 AUTHORS 2645759b3d2Safresh1 2655759b3d2Safresh1=over 4 2665759b3d2Safresh1 2675759b3d2Safresh1=item Chad Granum E<lt>exodist@cpan.orgE<gt> 2685759b3d2Safresh1 2695759b3d2Safresh1=back 2705759b3d2Safresh1 2715759b3d2Safresh1=head1 COPYRIGHT 2725759b3d2Safresh1 273256a93a4Safresh1Copyright 2020 Chad Granum E<lt>exodist@cpan.orgE<gt>. 2745759b3d2Safresh1 2755759b3d2Safresh1This program is free software; you can redistribute it and/or 2765759b3d2Safresh1modify it under the same terms as Perl itself. 2775759b3d2Safresh1 278*5486feefSafresh1See L<https://dev.perl.org/licenses/> 2795759b3d2Safresh1 2805759b3d2Safresh1=cut 281