How do I make "Wide character in print" warnings fatal in tests?

This test passes;

    use Test::More;                                                             
                                                                             
    use strict;
    use warnings;
    use warnings FATAL => 'utf8';
    use utf8::all;
    my $string = '日本国';
    my $length = length($string);
    is $length, 3, "$string should have $length characters";
    diag $string;
    done_testing;

That's passing because the warnings pragma is lexically scoped and the actual 
warnings are emitted in Test::Builder guts (utf8::all will let the test pass 
because that package's code is now marked as utf8, but it doesn't fix 
Test::Builder's filehandles). I can make the warnings go away with this:

    my $output = Test::Builder->new->todo_output;
    binmode $output, ':encoding(UTF-8)';
    $output = Test::Builder->new->failure_output;
    binmode $output, ':encoding(UTF-8)'; 

But I'd really like a clean way of just saying "kill my code if I ever see 
'Wide character in print'" regardless of which package the error is emitted 
from.

Cheers,
Ovid
--
Live and work overseas - http://overseas-exile.blogspot.com/
Buy the book           - http://www.oreilly.com/catalog/perlhks/
Tech blog              - http://blogs.perl.org/users/ovid/
Twitter                - http://twitter.com/OvidPerl/ 

Reply via email to