X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fio%2Futf8.t;h=337bd52144897ee7050fbe4e81a05dad1c651461;hb=2c45f8e1be053d3d2fa453b2278c7225f1689f9c;hp=fcbe847efa38a4c21ad33252f10bca2c43d28c7c;hpb=c88828dcbffbb4012ad6dc9e62721d09fc8ce3ed;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/io/utf8.t b/t/io/utf8.t index fcbe847..337bd52 100755 --- a/t/io/utf8.t +++ b/t/io/utf8.t @@ -12,7 +12,7 @@ BEGIN { no utf8; # needed for use utf8 not griping about the raw octets $| = 1; -print "1..29\n"; +print "1..31\n"; open(F,"+>:utf8",'a'); print F chr(0x100).'£'; @@ -186,7 +186,7 @@ if (ord('A') == 193) { close F; unlink('a'); -open F, ">a"; +open F, ">:utf8", "a"; @a = map { chr(1 << ($_ << 2)) } 0..5; # 0x1, 0x10, .., 0x100000 unshift @a, chr(0); # ... and a null byte in front just for fun print F @a; @@ -202,12 +202,13 @@ for (@a) { length($b) == 1 && ord($b) == ord($_) && tell(F) == ($a += bytes::length($b))) { - print '# ord($_) == ', ord($_), "\n"; - print '# ord($b) == ', ord($b), "\n"; - print '# length($b) == ', length($b), "\n"; - print '# tell(F) == ', tell(F), "\n"; - print '# $a == ', $a, "\n"; - print '# $c == ', $c, "\n"; + print '# ord($_) == ', ord($_), "\n"; + print '# ord($b) == ', ord($b), "\n"; + print '# length($b) == ', length($b), "\n"; + print '# bytes::length($b) == ', bytes::length($b), "\n"; + print '# tell(F) == ', tell(F), "\n"; + print '# $a == ', $a, "\n"; + print '# $c == ', $c, "\n"; print "not "; last; } @@ -215,66 +216,56 @@ for (@a) { close F; print "ok 26\n"; -# sysread() should work on characters, not bytes -open F, "<:utf8", "a"; -$a = 0; -for (@a) { - unless (($c = sysread(F, $b, 1)) == 1 && - length($b) == 1 && - ord($b) == ord($_) && - tell(F) == ($a += bytes::length($b))) { - print '# ord($_) == ', ord($_), "\n"; - print '# ord($b) == ', ord($b), "\n"; - print '# length($b) == ', length($b), "\n"; - print '# tell(F) == ', tell(F), "\n"; - print '# $a == ', $a, "\n"; - print '# $c == ', $c, "\n"; - print "not "; - last; - } -} -close F; -print "ok 27\n"; +{ + # Check that warnings are on on I/O, and that they can be muffled. -# syswrite() on should work on characters, not bytes -open G, ">:utf8", "b"; -$a = 0; -for (@a) { - unless (($c = syswrite(G, $_, 1)) == 1 && - tell(G) == ($a += bytes::length($_))) { - print '# ord($_) == ', ord($_), "\n"; - print '# tell(G) == ', tell(G), "\n"; - print '# $a == ', $a, "\n"; - print '# $c == ', $c, "\n"; - print "not "; - last; - } -} -close G; -print "ok 28\n"; + local $SIG{__WARN__} = sub { $@ = shift }; -# did syswrite() get it right? -open G, "<:utf8", "b"; -$a = 0; -for (@a) { - unless (($c = sysread(G, $b, 1)) == 1 && - length($b) == 1 && - ord($b) == ord($_) && - tell(G) == ($a += bytes::length($_))) { - print '# ord($_) == ', ord($_), "\n"; - print '# ord($b) == ', ord($b), "\n"; - print '# length($b) == ', length($b), "\n"; - print '# tell(G) == ', tell(G), "\n"; - print '# $a == ', $a, "\n"; - print '# $c == ', $c, "\n"; - print "not "; - last; - } + undef $@; + open F, ">a"; + print F chr(0x100); + close(F); + + print $@ =~ /Wide character in print/ ? "ok 27\n" : "not ok 27\n"; + + undef $@; + open F, ">:utf8", "a"; + print F chr(0x100); + close(F); + + print defined $@ ? "not ok 28\n" : "ok 28\n"; + + undef $@; + open F, ">a"; + binmode(F, ":utf8"); + print F chr(0x100); + close(F); + + print defined $@ ? "not ok 29\n" : "ok 29\n"; + + no warnings 'utf8'; + + undef $@; + open F, ">a"; + print F chr(0x100); + close(F); + + print defined $@ ? "not ok 30\n" : "ok 30\n"; + + use warnings 'utf8'; + + undef $@; + open F, ">a"; + print F chr(0x100); + close(F); + + print $@ =~ /Wide character in print/ ? "ok 31\n" : "not ok 31\n"; } -close G; -print "ok 29\n"; + +# sysread() and syswrite() tested in lib/open.t since Fnctl is used END { 1 while unlink "a"; 1 while unlink "b"; } +