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