1use strict;
2use warnings;
3
4use Test2::Tools::Tiny;
5
6# This module's exports interfere with the ones in t/tools.pl
7use Test::More ();
8use Test::Builder::Formatter();
9use Test2::API qw/run_subtest test2_stack/;
10
11{
12    test2_stack->top;
13    my $temp_hub = test2_stack->new_hub();
14    $temp_hub->format(Test::Builder::Formatter->new());
15
16    my $output = capture {
17        run_subtest(
18            'parent',
19            sub {
20                run_subtest(
21                    'buffered',
22                    sub {
23                        ok(1, 'b1');
24                        ok(1, 'b2');
25                    },
26                    {buffered => 1},
27                );
28                run_subtest(
29                    'streamed',
30                    sub {
31                        ok(1, 's1');
32                        ok(1, 's2');
33                    },
34                    {buffered => 0},
35                );
36            },
37            {buffered => 1},
38        );
39    };
40
41    test2_stack->pop($temp_hub);
42
43    Test::More::subtest(
44        'Test2::API::run_subtest',
45        sub {
46            is($output->{STDERR}, q{}, 'no output on stderr');
47            like($output->{STDOUT}, qr/ +ok 1 - b1/, 'got ok output for tests in buffered subtest');
48            like($output->{STDOUT}, qr/ +ok 2 - b2/, 'got ok output for tests in buffered subtest');
49            like($output->{STDOUT}, qr/ +ok 1 - s1/, 'got ok output for tests in streamed subtest');
50            like($output->{STDOUT}, qr/ +ok 2 - s2/, 'got ok output for tests in streamed subtest');
51        }
52    );
53}
54
55{
56    test2_stack->top;
57    my $temp_hub = test2_stack->new_hub();
58    $temp_hub->format(Test::Builder::Formatter->new());
59
60    my $output = capture {
61        run_subtest(
62            'parent',
63            sub {
64                run_subtest(
65                    'buffered',
66                    sub {
67                        ok(1, 'b1');
68                        ok(1, 'b2');
69                    },
70                    {buffered => 1},
71                );
72                Test::More::subtest(
73                    'streamed',
74                    sub {
75                        ok(1, 's1');
76                        ok(1, 's2');
77                    },
78                    {buffered => 0},
79                );
80            },
81            {buffered => 1},
82        );
83    };
84
85    test2_stack->pop($temp_hub);
86
87    Test::More::subtest(
88        'Test::More::subtest and Test2::API::run_subtest',
89        sub {
90            is($output->{STDERR}, q{}, 'no output on stderr');
91            like($output->{STDOUT}, qr/ +ok 1 - b1/, 'got ok output for tests in buffered subtest');
92            like($output->{STDOUT}, qr/ +ok 2 - b2/, 'got ok output for tests in buffered subtest');
93            like($output->{STDOUT}, qr/ +ok 1 - s1/, 'got ok output for tests in streamed subtest');
94            like($output->{STDOUT}, qr/ +ok 2 - s2/, 'got ok output for tests in streamed subtest');
95        }
96    );
97}
98
99done_testing;
100