# NAME

Test::Flatten - subtest output to a flatten

# SYNOPSIS

in t/foo.t

   use Test::More;
   use Test::Flatten;

   subtest 'foo' => sub {
       pass 'OK';
   };

   subtest 'bar' => sub {
       pass 'ok';
       subtest 'baz' => sub {
           pass 'ok';
       };
   };

   done_testing;

run it

   $ prove -lvc t/foo.t
   t/foo.t ..
   # ------------------------------------------------------------------------------
   # foo
   # ------------------------------------------------------------------------------
   ok 1 - ok
   # ------------------------------------------------------------------------------
   # bar
   # ------------------------------------------------------------------------------
   ok 2 - ok
   # ------------------------------------------------------------------------------
   # baz
   # ------------------------------------------------------------------------------
   ok 3 - ok
   1..3
   ok

oh, flatten!

# DESCRIPTION

Test::Flatten is override Test::More::subtest.

The subtest I think there are some problems.

- 1. Caption is appears at end of subtest block.

       use Test::More;

       subtest 'foo' => sub {
           pass 'ok';
       };

       done_testing;

       # ok 1 - foo is end of subtest block.
       t/foo.t ..
           ok 1 - ok
           1..1
       ok 1 - foo
       1..1
       ok

   I want __FIRST__.

- 2. Summarizes the test would count.

       use Test::More;

       subtest 'foo' => sub {
           pass 'bar';
           pass 'baz';
       };

       done_testing;

       # total tests is 1
       t/foo.t ..
           ok 1 - bar
           ok 2 - baz
           1..2
       ok 1 - foo
       1..1

   I want __2__.

- 3. Forked test output will be broken. (Even with Test::SharedFork!)

       use Test::More;

       subtest 'foo' => sub {
           pass 'parent one';
           pass 'parent two';
           my $pid = fork;
           unless ($pid) {
               pass 'child one';
               pass 'child two';
               fail 'child three';
               exit;
           }
           wait;
           pass 'parent three';
       };

       done_testing;

       # success...?
       t/foo.t ..
           ok 1 - parent one
           ok 2 - parent two
           ok 3 - child one
           ok 4 - child two
           not ok 5 - child three

           #   Failed test 'child three'
           #   at t/foo.t line 13.
           ok 3 - parent three
           1..3
       ok 1 - foo
       1..1
       ok

   oh, really? I want __FAIL__ and sync count.

Yes, We can!!

# FUNCTIONS

- `subtest($name, \&code)`

   This like Test::More::subtest.

# SUBTEST\_FILTER

If you need, you can using `SUBTEST_FILTER` environment.
This is just a __\*hack\*__ to skip only blocks matched the block name by environment variable.
`SUBTEST_FILTER` variable can use regexp

   $ env SUBTEST_FILTER=foo prove -lvc t/bar.t
   # SKIP: bar by SUBTEST_FILTER
   # ------------------------------------------------------------------------------
   # foo
   # ------------------------------------------------------------------------------
   ok 1 - passed
   # SKIP: baz by SUBTEST_FILTER
   1..1

# AUTHOR

xaicron <xaicron {at} cpan.org>

# COPYRIGHT

Copyright 2011 - xaicron

# LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

# SEE ALSO

[Test::SharedFork](https://metacpan.org/pod/Test::SharedFork)