15759b3d2Safresh1package Test2::Event::Subtest; 25759b3d2Safresh1use strict; 35759b3d2Safresh1use warnings; 45759b3d2Safresh1 5*5486feefSafresh1our $VERSION = '1.302199'; 65759b3d2Safresh1 75759b3d2Safresh1BEGIN { require Test2::Event::Ok; our @ISA = qw(Test2::Event::Ok) } 8256a93a4Safresh1use Test2::Util::HashBase qw{subevents buffered subtest_id subtest_uuid start_stamp stop_stamp}; 95759b3d2Safresh1 105759b3d2Safresh1sub init { 115759b3d2Safresh1 my $self = shift; 125759b3d2Safresh1 $self->SUPER::init(); 135759b3d2Safresh1 $self->{+SUBEVENTS} ||= []; 145759b3d2Safresh1 if ($self->{+EFFECTIVE_PASS}) { 155759b3d2Safresh1 $_->set_effective_pass(1) for grep { $_->can('effective_pass') } @{$self->{+SUBEVENTS}}; 165759b3d2Safresh1 } 175759b3d2Safresh1} 185759b3d2Safresh1 195759b3d2Safresh1{ 205759b3d2Safresh1 no warnings 'redefine'; 215759b3d2Safresh1 225759b3d2Safresh1 sub set_subevents { 235759b3d2Safresh1 my $self = shift; 245759b3d2Safresh1 my @subevents = @_; 255759b3d2Safresh1 265759b3d2Safresh1 if ($self->{+EFFECTIVE_PASS}) { 275759b3d2Safresh1 $_->set_effective_pass(1) for grep { $_->can('effective_pass') } @subevents; 285759b3d2Safresh1 } 295759b3d2Safresh1 305759b3d2Safresh1 $self->{+SUBEVENTS} = \@subevents; 315759b3d2Safresh1 } 325759b3d2Safresh1 335759b3d2Safresh1 sub set_effective_pass { 345759b3d2Safresh1 my $self = shift; 355759b3d2Safresh1 my ($pass) = @_; 365759b3d2Safresh1 375759b3d2Safresh1 if ($pass) { 385759b3d2Safresh1 $_->set_effective_pass(1) for grep { $_->can('effective_pass') } @{$self->{+SUBEVENTS}}; 395759b3d2Safresh1 } 405759b3d2Safresh1 elsif ($self->{+EFFECTIVE_PASS} && !$pass) { 415759b3d2Safresh1 for my $s (grep { $_->can('effective_pass') } @{$self->{+SUBEVENTS}}) { 425759b3d2Safresh1 $_->set_effective_pass(0) unless $s->can('todo') && defined $s->todo; 435759b3d2Safresh1 } 445759b3d2Safresh1 } 455759b3d2Safresh1 465759b3d2Safresh1 $self->{+EFFECTIVE_PASS} = $pass; 475759b3d2Safresh1 } 485759b3d2Safresh1} 495759b3d2Safresh1 505759b3d2Safresh1sub summary { 515759b3d2Safresh1 my $self = shift; 525759b3d2Safresh1 535759b3d2Safresh1 my $name = $self->{+NAME} || "Nameless Subtest"; 545759b3d2Safresh1 555759b3d2Safresh1 my $todo = $self->{+TODO}; 565759b3d2Safresh1 if ($todo) { 575759b3d2Safresh1 $name .= " (TODO: $todo)"; 585759b3d2Safresh1 } 595759b3d2Safresh1 elsif (defined $todo) { 605759b3d2Safresh1 $name .= " (TODO)"; 615759b3d2Safresh1 } 625759b3d2Safresh1 635759b3d2Safresh1 return $name; 645759b3d2Safresh1} 655759b3d2Safresh1 665759b3d2Safresh1sub facet_data { 675759b3d2Safresh1 my $self = shift; 685759b3d2Safresh1 695759b3d2Safresh1 my $out = $self->SUPER::facet_data(); 705759b3d2Safresh1 71256a93a4Safresh1 my $start = $self->start_stamp; 72256a93a4Safresh1 my $stop = $self->stop_stamp; 73256a93a4Safresh1 745759b3d2Safresh1 $out->{parent} = { 755759b3d2Safresh1 hid => $self->subtest_id, 765759b3d2Safresh1 children => [map {$_->facet_data} @{$self->{+SUBEVENTS}}], 775759b3d2Safresh1 buffered => $self->{+BUFFERED}, 78256a93a4Safresh1 $start ? (start_stamp => $start) : (), 79256a93a4Safresh1 $stop ? (stop_stamp => $stop) : (), 805759b3d2Safresh1 }; 815759b3d2Safresh1 825759b3d2Safresh1 return $out; 835759b3d2Safresh1} 845759b3d2Safresh1 855759b3d2Safresh1sub add_amnesty { 865759b3d2Safresh1 my $self = shift; 875759b3d2Safresh1 885759b3d2Safresh1 for my $am (@_) { 895759b3d2Safresh1 $am = {%$am} if ref($am) ne 'ARRAY'; 905759b3d2Safresh1 $am = Test2::EventFacet::Amnesty->new($am); 915759b3d2Safresh1 925759b3d2Safresh1 push @{$self->{+AMNESTY}} => $am; 935759b3d2Safresh1 945759b3d2Safresh1 for my $e (@{$self->{+SUBEVENTS}}) { 955759b3d2Safresh1 $e->add_amnesty($am->clone(inherited => 1)); 965759b3d2Safresh1 } 975759b3d2Safresh1 } 985759b3d2Safresh1} 995759b3d2Safresh1 1005759b3d2Safresh1 1015759b3d2Safresh11; 1025759b3d2Safresh1 1035759b3d2Safresh1__END__ 1045759b3d2Safresh1 1055759b3d2Safresh1=pod 1065759b3d2Safresh1 1075759b3d2Safresh1=encoding UTF-8 1085759b3d2Safresh1 1095759b3d2Safresh1=head1 NAME 1105759b3d2Safresh1 1115759b3d2Safresh1Test2::Event::Subtest - Event for subtest types 1125759b3d2Safresh1 1135759b3d2Safresh1=head1 DESCRIPTION 1145759b3d2Safresh1 1155759b3d2Safresh1This class represents a subtest. This class is a subclass of 1165759b3d2Safresh1L<Test2::Event::Ok>. 1175759b3d2Safresh1 1185759b3d2Safresh1=head1 ACCESSORS 1195759b3d2Safresh1 1205759b3d2Safresh1This class inherits from L<Test2::Event::Ok>. 1215759b3d2Safresh1 1225759b3d2Safresh1=over 4 1235759b3d2Safresh1 1245759b3d2Safresh1=item $arrayref = $e->subevents 1255759b3d2Safresh1 1265759b3d2Safresh1Returns the arrayref containing all the events from the subtest 1275759b3d2Safresh1 1285759b3d2Safresh1=item $bool = $e->buffered 1295759b3d2Safresh1 1305759b3d2Safresh1True if the subtest is buffered, that is all subevents render at once. If this 1315759b3d2Safresh1is false it means all subevents render as they are produced. 1325759b3d2Safresh1 1335759b3d2Safresh1=back 1345759b3d2Safresh1 1355759b3d2Safresh1=head1 SOURCE 1365759b3d2Safresh1 1375759b3d2Safresh1The source code repository for Test2 can be found at 138*5486feefSafresh1L<https://github.com/Test-More/test-more/>. 1395759b3d2Safresh1 1405759b3d2Safresh1=head1 MAINTAINERS 1415759b3d2Safresh1 1425759b3d2Safresh1=over 4 1435759b3d2Safresh1 1445759b3d2Safresh1=item Chad Granum E<lt>exodist@cpan.orgE<gt> 1455759b3d2Safresh1 1465759b3d2Safresh1=back 1475759b3d2Safresh1 1485759b3d2Safresh1=head1 AUTHORS 1495759b3d2Safresh1 1505759b3d2Safresh1=over 4 1515759b3d2Safresh1 1525759b3d2Safresh1=item Chad Granum E<lt>exodist@cpan.orgE<gt> 1535759b3d2Safresh1 1545759b3d2Safresh1=back 1555759b3d2Safresh1 1565759b3d2Safresh1=head1 COPYRIGHT 1575759b3d2Safresh1 158256a93a4Safresh1Copyright 2020 Chad Granum E<lt>exodist@cpan.orgE<gt>. 1595759b3d2Safresh1 1605759b3d2Safresh1This program is free software; you can redistribute it and/or 1615759b3d2Safresh1modify it under the same terms as Perl itself. 1625759b3d2Safresh1 163*5486feefSafresh1See L<https://dev.perl.org/licenses/> 1645759b3d2Safresh1 1655759b3d2Safresh1=cut 166