File Coverage

blib/lib/Test2/Hub/Subtest.pm
Criterion Covered Total %
statement 44 47 93.6
branch 11 18 61.1
condition 4 12 33.3
subroutine 12 12 100.0
pod 1 4 25.0
total 72 93 77.4


line stmt bran cond sub pod time code
1             package Test2::Hub::Subtest;
2 246     246   2062 use strict;
  246         516  
  246         7359  
3 246     246   1261 use warnings;
  246         469  
  246         14239  
4              
5             our $VERSION = '1.302182';
6              
7 246     246   1641 BEGIN { require Test2::Hub; our @ISA = qw(Test2::Hub) }
  246         11541  
8 246     246   1711 use Test2::Util::HashBase qw/nested exit_code manual_skip_all/;
  246         607  
  246         1812  
9 246     246   1791 use Test2::Util qw/get_tid/;
  246         625  
  246         31909  
10              
11 105     105 0 495 sub is_subtest { 1 }
12              
13             sub inherit {
14 273     273 0 520 my $self = shift;
15 273         585 my ($from) = @_;
16              
17 273         1286 $self->SUPER::inherit($from);
18              
19 273         915 $self->{+NESTED} = $from->nested + 1;
20             }
21              
22             {
23             # Legacy
24 246     246   1860 no warnings 'once';
  246         537  
  246         45666  
25             *ID = \&Test2::Hub::HID;
26             *id = \&Test2::Hub::hid;
27             *set_id = \&Test2::Hub::set_hid;
28             }
29              
30             sub send {
31 1434     1434 1 2427 my $self = shift;
32 1434         2574 my ($e) = @_;
33              
34 1434         4959 my $out = $self->SUPER::send($e);
35              
36 1426 100       3411 return $out if $self->{+MANUAL_SKIP_ALL};
37              
38 1425         4004 my $f = $e->facet_data;
39              
40 1425 100       7305 my $plan = $f->{plan} or return $out;
41 252 50       1772 return $out unless $plan->{skip};
42              
43 0 0       0 my $trace = $f->{trace} or die "Missing Trace!";
44             return $out unless $trace->{pid} != $self->pid
45 0 0 0     0 || $trace->{tid} != $self->tid;
46              
47 246     246   2258 no warnings 'exiting';
  246         569  
  246         40595  
48 0         0 last T2_SUBTEST_WRAPPER;
49             }
50              
51             sub terminate {
52 11     11 0 38 my $self = shift;
53 11         30 my ($code, $e, $f) = @_;
54 11         38 $self->set_exit_code($code);
55              
56 11 100       34 return if $self->{+MANUAL_SKIP_ALL};
57              
58 9   66     32 $f ||= $e->facet_data;
59              
60 9 100       25 if(my $plan = $f->{plan}) {
61 5 50       27 my $trace = $f->{trace} or die "Missing Trace!";
62             return if $plan->{skip}
63 5 50 33     66 && ($trace->{pid} != $$ || $trace->{tid} != get_tid);
      33        
64             }
65              
66 246     246   1896 no warnings 'exiting';
  246         610  
  246         18250  
67 9         114 last T2_SUBTEST_WRAPPER;
68             }
69              
70             1;
71              
72             __END__
73              
74             =pod
75              
76             =encoding UTF-8
77              
78             =head1 NAME
79              
80             Test2::Hub::Subtest - Hub used by subtests
81              
82             =head1 DESCRIPTION
83              
84             Subtests make use of this hub to route events.
85              
86             =head1 TOGGLES
87              
88             =over 4
89              
90             =item $bool = $hub->manual_skip_all
91              
92             =item $hub->set_manual_skip_all($bool)
93              
94             The default is false.
95              
96             Normally a skip-all plan event will cause a subtest to stop executing. This is
97             accomplished via C<last LABEL> to a label inside the subtest code. Most of the
98             time this is perfectly fine. There are times however where this flow control
99             causes bad things to happen.
100              
101             This toggle lets you turn off the abort logic for the hub. When this is toggled
102             to true B<you> are responsible for ensuring no additional events are generated.
103              
104             =back
105              
106             =head1 SOURCE
107              
108             The source code repository for Test2 can be found at
109             F<http://github.com/Test-More/test-more/>.
110              
111             =head1 MAINTAINERS
112              
113             =over 4
114              
115             =item Chad Granum E<lt>exodist@cpan.orgE<gt>
116              
117             =back
118              
119             =head1 AUTHORS
120              
121             =over 4
122              
123             =item Chad Granum E<lt>exodist@cpan.orgE<gt>
124              
125             =back
126              
127             =head1 COPYRIGHT
128              
129             Copyright 2020 Chad Granum E<lt>exodist@cpan.orgE<gt>.
130              
131             This program is free software; you can redistribute it and/or
132             modify it under the same terms as Perl itself.
133              
134             See F<http://dev.perl.org/licenses/>
135              
136             =cut