xref: /openbsd-src/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test2/Event/Subtest.pm (revision 5486feefcc8cb79b19e014ab332cc5dfd05b3b33)
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