use Test::More;
use Test::Exception;
+use Try::Tiny;
+use File::Spec;
use lib qw(t/lib);
use DBICTest;
use Path::Class qw/file/;
ok ( $schema->storage->debug(1), 'debug' );
$schema->storage->debugfh($lfn->openw);
-$schema->storage->debugfh->autoflush(1);
$schema->resultset('CD')->count;
my @loglines = $lfn->slurp;
}
open(STDERRCOPY, '>&STDERR');
-close(STDERR);
-dies_ok {
+
+my $exception_line_number;
+# STDERR will be closed, no T::B diag in blocks
+my $exception = try {
+ close(STDERR);
+ $exception_line_number = __LINE__ + 1; # important for test, do not reformat
$schema->resultset('CD')->search({})->count;
-} 'Died on closed FH';
+} catch {
+ $_
+} finally {
+ # restore STDERR
+ open(STDERR, '>&STDERRCOPY');
+};
+
+like $exception, qr/
+ \QDuplication of STDERR for debug output failed (perhaps your STDERR is closed?)\E
+ .+
+ \Qat @{[__FILE__]} line $exception_line_number\E$
+/xms;
+
+my @warnings;
+$exception = try {
+ local $SIG{__WARN__} = sub { push @warnings, @_ if $_[0] =~ /character/i };
+ close STDERR;
+ open(STDERR, '>', File::Spec->devnull) or die $!;
+ $schema->resultset('CD')->search({ title => "\x{1f4a9}" })->count;
+ '';
+} catch {
+ $_;
+} finally {
+ # restore STDERR
+ close STDERR;
+ open(STDERR, '>&STDERRCOPY');
+};
+
+die "How did that fail... $exception"
+ if $exception;
+
+is_deeply(\@warnings, [], 'No warnings with unicode on STDERR');
-open(STDERR, '>&STDERRCOPY');
# test debugcb and debugobj protocol
{