File Coverage

blib/lib/Test/Stream/Plugin/Capture.pm
Criterion Covered Total %
statement 33 33 100.0
branch 4 6 66.6
condition n/a
subroutine 9 9 100.0
pod 1 1 100.0
total 47 49 95.9


line stmt bran cond sub pod time code
1             package Test::Stream::Plugin::Capture;
2 3     3   15 use strict;
  3         6  
  3         74  
3 3     3   14 use warnings;
  3         6  
  3         79  
4              
5 3     3   15 use Test::Stream::Util qw/try/;
  3         5  
  3         22  
6 3     3   17 use Carp qw/croak/;
  3         6  
  3         178  
7              
8 3     3   30 use Test::Stream::Exporter;
  3         7  
  3         21  
9             default_exports qw/capture/;
10 3     3   29 no Test::Stream::Exporter;
  3         7  
  3         19  
11              
12             sub capture(&) {
13 15     15 1 1171 my $code = shift;
14              
15 15         33 my ($err, $out) = ("", "");
16              
17 15         23 my ($ok, $e);
18             {
19 15         28 local *STDOUT;
  15         44  
20 15         31 local *STDERR;
21              
22             ($ok, $e) = try {
23 3 50   3   3195 open(STDOUT, '>', \$out) or die "Failed to open a temporary STDOUT: $!";
  3     15   34  
  3         19  
  15         273  
24 15 50       3959 open(STDERR, '>', \$err) or die "Failed to open a temporary STDERR: $!";
25              
26 15         47 $code->();
27 15         88 };
28             }
29              
30 15 100       109 die $e unless $ok;
31              
32             return {
33 14         87 STDOUT => $out,
34             STDERR => $err,
35             };
36             }
37              
38             1;
39              
40             __END__