1use Test2::Tools::Tiny; 2use strict; 3use warnings; 4 5use Test2::API qw/context run_subtest intercept/; 6 7sub subtest { 8 my ($name, $code) = @_; 9 my $ctx = context(); 10 my $pass = run_subtest($name, $code, {buffered => 1}, @_); 11 $ctx->release; 12 return $pass; 13} 14 15sub bail { 16 my $ctx = context(); 17 $ctx->bail(@_); 18 $ctx->release; 19} 20 21my $events = intercept { 22 subtest outer => sub { 23 subtest inner => sub { 24 bail("bye!"); 25 }; 26 }; 27}; 28 29ok($events->[0]->isa('Test2::Event::Subtest'), "Got a subtest event when bail-out issued in a buffered subtest"); 30ok($events->[-1]->isa('Test2::Event::Bail'), "Bail-Out propagated"); 31ok(!$events->[-1]->facet_data->{trace}->{buffered}, "Final Bail-Out is not buffered"); 32 33ok($events->[0]->subevents->[-2]->isa('Test2::Event::Bail'), "Got bail out inside outer subtest"); 34ok($events->[0]->subevents->[-2]->facet_data->{trace}->{buffered}, "Bail-Out is buffered"); 35 36ok($events->[0]->subevents->[0]->subevents->[-2]->isa('Test2::Event::Bail'), "Got bail out inside inner subtest"); 37ok($events->[0]->subevents->[0]->subevents->[-2]->facet_data->{trace}->{buffered}, "Bail-Out is buffered"); 38 39done_testing; 40