1use strict;
2use warnings;
3
4use Test2::Tools::Tiny;
5
6use Test2::API qw/intercept intercept_deep context run_subtest/;
7
8sub streamed {
9    my $name = shift;
10    my $code = shift;
11
12    my $ctx = context();
13    my $pass = run_subtest("Subtest: $name", $code, {buffered => 0}, @_);
14    $ctx->release;
15    return $pass;
16}
17
18sub buffered {
19    my $name = shift;
20    my $code = shift;
21
22    my $ctx = context();
23    my $pass = run_subtest($name, $code, {buffered => 1}, @_);
24    $ctx->release;
25    return $pass;
26}
27
28my $subtest = sub { ok(1, "pass") };
29
30my $buffered_shallow = intercept { buffered 'buffered shallow' => $subtest };
31my $streamed_shallow = intercept { streamed 'streamed shallow' => $subtest };
32my $buffered_deep = intercept_deep { buffered 'buffered shallow' => $subtest };
33my $streamed_deep = intercept_deep { streamed 'streamed shallow' => $subtest };
34
35is(@$buffered_shallow, 1, "Just got the subtest event");
36is(@$streamed_shallow, 2, "Got note, and subtest events");
37is(@$buffered_deep, 3, "Got ok, plan, and subtest events");
38is(@$streamed_deep, 4, "Got note, ok, plan, and subtest events");
39
40done_testing;
41