1use strict;
2use Symbol qw/gensym/;
3my ($save_out, $save_err);
4BEGIN {
5    $save_out = gensym();
6    $save_err = gensym();
7    open $save_out, ">&main::STDOUT";
8    open $save_err, ">&main::STDERR";
9}
10
11use Test::More tests => 7;
12
13#--------------------------------------------------------------------------#
14# close and restore console
15#--------------------------------------------------------------------------#
16
17sub _close_console {
18    close STDOUT or die "Can't close STDOUT";
19    close STDERR or die "Can't close STDERR";
20    return;
21}
22
23sub _restore_console {
24    open STDOUT, ">&" . fileno($save_out) or die "Can't restore STDOUT";
25    open STDERR, ">&" . fileno($save_err) or die "Can't restore STDERR";
26    return;
27}
28
29#--------------------------------------------------------------------------#
30# _test_print
31#--------------------------------------------------------------------------#
32
33sub _test_print {
34    print STDOUT "Test to STDOUT\n";
35    print STDERR "Test to STDERR\n";
36    return;
37}
38
39#--------------------------------------------------------------------------#
40
41my ($stdout, $stderr, $err);
42
43BEGIN{ use_ok("IO::CaptureOutput", "capture") }
44
45eval { capture \&_test_print, \$stdout, \$stderr; };
46$err = $@;
47
48is( $err, q{}, "no errors capturing with console open" );
49is( $stdout, "Test to STDOUT\n", "STDOUT test with console open" );
50is( $stderr, "Test to STDERR\n", "STDERR test with console open" );
51$stdout = $stderr = q{};
52
53_close_console;
54
55eval { capture \&_test_print, \$stdout, \$stderr; };
56$err = $@;
57
58_restore_console;
59
60is( $err, q{}, "no errors capturing with console closed" );
61is( $stdout, "Test to STDOUT\n", "STDOUT test with console closed" );
62is( $stderr, "Test to STDERR\n", "STDERR test with console closed" );
63
64
65