1b39c5158Smillert 2b39c5158Smillertuse strict; 3b39c5158Smillertuse warnings; 45759b3d2Safresh1use bytes; 5b39c5158Smillert 6b39c5158Smillertuse Test::More ; 7b39c5158Smillertuse CompTestUtils; 8b39c5158Smillert 9b39c5158SmillertBEGIN 10b39c5158Smillert{ 11b39c5158Smillert plan skip_all => "Encode is not available" 12b39c5158Smillert if $] < 5.006 ; 13b39c5158Smillert 14b39c5158Smillert eval { require Encode; Encode->import(); }; 15b39c5158Smillert 16b39c5158Smillert plan skip_all => "Encode is not available" 17b39c5158Smillert if $@ ; 18b39c5158Smillert 19b39c5158Smillert # use Test::NoWarnings, if available 20b39c5158Smillert my $extra = 0 ; 21b39c5158Smillert 22b39c5158Smillert my $st = eval { require Test::NoWarnings ; import Test::NoWarnings; 1; }; 23b39c5158Smillert $extra = 1 24b39c5158Smillert if $st ; 25b39c5158Smillert 2691f110e0Safresh1 plan(tests => 29 + $extra) ; 27b39c5158Smillert} 28b39c5158Smillert 29b39c5158Smillertsub run 30b39c5158Smillert{ 31b39c5158Smillert my $CompressClass = identify(); 32b39c5158Smillert my $UncompressClass = getInverse($CompressClass); 33b39c5158Smillert my $Error = getErrorRef($CompressClass); 34b39c5158Smillert my $UnError = getErrorRef($UncompressClass); 35b39c5158Smillert 36b39c5158Smillert 3791f110e0Safresh1 my $string = "\x{df}\x{100}\x80"; 38b39c5158Smillert my $encString = Encode::encode_utf8($string); 39b39c5158Smillert my $buffer = $encString; 40b39c5158Smillert 41b39c5158Smillert #for my $from ( qw(filename filehandle buffer) ) 42b39c5158Smillert { 43b39c5158Smillert# my $input ; 44*256a93a4Safresh1# my $lex = LexFile->new( my $name ); 45b39c5158Smillert# 46b39c5158Smillert# 47b39c5158Smillert# if ($from eq 'buffer') 48b39c5158Smillert# { $input = \$buffer } 49b39c5158Smillert# elsif ($from eq 'filename') 50b39c5158Smillert# { 51b39c5158Smillert# $input = $name ; 52b39c5158Smillert# writeFile($name, $buffer); 53b39c5158Smillert# } 54b39c5158Smillert# elsif ($from eq 'filehandle') 55b39c5158Smillert# { 56*256a93a4Safresh1# $input = IO::File->new( "<$name" ); 57b39c5158Smillert# } 58b39c5158Smillert 59b39c5158Smillert for my $to ( qw(filehandle buffer)) 60b39c5158Smillert { 61b39c5158Smillert title "OO Mode: To $to, Encode by hand"; 62b39c5158Smillert 63*256a93a4Safresh1 my $lex2 = LexFile->new( my $name2 ); 64b39c5158Smillert my $output; 65b39c5158Smillert my $buffer; 66b39c5158Smillert 67b39c5158Smillert if ($to eq 'buffer') 68b39c5158Smillert { $output = \$buffer } 69b39c5158Smillert elsif ($to eq 'filename') 70b39c5158Smillert { 71b39c5158Smillert $output = $name2 ; 72b39c5158Smillert } 73b39c5158Smillert elsif ($to eq 'filehandle') 74b39c5158Smillert { 75*256a93a4Safresh1 $output = IO::File->new( ">$name2" ); 76b39c5158Smillert } 77b39c5158Smillert 78b39c5158Smillert 79b39c5158Smillert my $out ; 80*256a93a4Safresh1 my $cs = $CompressClass->can('new')->( $CompressClass, $output, AutoClose =>1); 81b39c5158Smillert $cs->print($encString); 82b39c5158Smillert $cs->close(); 83b39c5158Smillert 84b39c5158Smillert my $input; 85b39c5158Smillert if ($to eq 'buffer') 86b39c5158Smillert { $input = \$buffer } 87b39c5158Smillert else 88b39c5158Smillert { 89b39c5158Smillert $input = $name2 ; 90b39c5158Smillert } 91b39c5158Smillert 92*256a93a4Safresh1 my $ucs = $UncompressClass->can('new')->( $UncompressClass, $input, Append => 1); 93b39c5158Smillert my $got; 94b39c5158Smillert 1 while $ucs->read($got) > 0 ; 9591f110e0Safresh1 9691f110e0Safresh1 is $got, $encString, " Expected output"; 9791f110e0Safresh1 98b39c5158Smillert my $decode = Encode::decode_utf8($got); 99b39c5158Smillert 100b39c5158Smillert 10191f110e0Safresh1 is $decode, $string, " Expected output"; 102b39c5158Smillert 103b39c5158Smillert 104b39c5158Smillert } 105b39c5158Smillert } 106b39c5158Smillert 107b39c5158Smillert { 108b39c5158Smillert title "Catch wide characters"; 109b39c5158Smillert 110b39c5158Smillert my $out; 111*256a93a4Safresh1 my $cs = $CompressClass->can('new')->( $CompressClass, \$out); 112b39c5158Smillert my $a = "a\xFF\x{100}"; 113b39c5158Smillert eval { $cs->syswrite($a) }; 114b39c5158Smillert like($@, qr/Wide character in ${CompressClass}::write/, 115b39c5158Smillert " wide characters in ${CompressClass}::write"); 11691f110e0Safresh1 11791f110e0Safresh1 } 11891f110e0Safresh1 11991f110e0Safresh1 { 12091f110e0Safresh1 title "Unknown encoding"; 12191f110e0Safresh1 my $output; 122*256a93a4Safresh1 eval { my $cs = $CompressClass->can('new')->( $CompressClass, \$output, Encode => 'fred'); } ; 12391f110e0Safresh1 like($@, qr/${CompressClass}: Encoding 'fred' is not available/, 12491f110e0Safresh1 " Encoding 'fred' is not available"); 12591f110e0Safresh1 } 12691f110e0Safresh1 12791f110e0Safresh1 { 12891f110e0Safresh1 title "Encode option"; 12991f110e0Safresh1 13091f110e0Safresh1 for my $to ( qw(filehandle filename buffer)) 13191f110e0Safresh1 { 13291f110e0Safresh1 title "Encode: To $to, Encode option"; 13391f110e0Safresh1 134*256a93a4Safresh1 my $lex2 = LexFile->new( my $name2 ); 13591f110e0Safresh1 my $output; 13691f110e0Safresh1 my $buffer; 13791f110e0Safresh1 13891f110e0Safresh1 if ($to eq 'buffer') 13991f110e0Safresh1 { 14091f110e0Safresh1 $output = \$buffer 14191f110e0Safresh1 } 14291f110e0Safresh1 elsif ($to eq 'filename') 14391f110e0Safresh1 { 14491f110e0Safresh1 $output = $name2 ; 14591f110e0Safresh1 } 14691f110e0Safresh1 elsif ($to eq 'filehandle') 14791f110e0Safresh1 { 148*256a93a4Safresh1 $output = IO::File->new( ">$name2" ); 14991f110e0Safresh1 } 15091f110e0Safresh1 15191f110e0Safresh1 my $out ; 152*256a93a4Safresh1 my $cs = $CompressClass->can('new')->( $CompressClass, $output, AutoClose =>1, Encode => 'utf8'); 15391f110e0Safresh1 ok $cs->print($string); 15491f110e0Safresh1 ok $cs->close(); 15591f110e0Safresh1 15691f110e0Safresh1 my $input; 15791f110e0Safresh1 if ($to eq 'buffer') 15891f110e0Safresh1 { 15991f110e0Safresh1 $input = \$buffer 16091f110e0Safresh1 } 16191f110e0Safresh1 elsif ($to eq 'filename') 16291f110e0Safresh1 { 16391f110e0Safresh1 $input = $name2 ; 16491f110e0Safresh1 } 16591f110e0Safresh1 else 16691f110e0Safresh1 { 167*256a93a4Safresh1 $input = IO::File->new( "<$name2" ); 16891f110e0Safresh1 } 16991f110e0Safresh1 17091f110e0Safresh1 { 171*256a93a4Safresh1 my $ucs = $UncompressClass->can('new')->( $UncompressClass, $input, AutoClose =>1, Append => 1); 17291f110e0Safresh1 my $got; 17391f110e0Safresh1 1 while $ucs->read($got) > 0 ; 17491f110e0Safresh1 ok length($got) > 0; 17591f110e0Safresh1 is $got, $encString, " Expected output"; 17691f110e0Safresh1 17791f110e0Safresh1 my $decode = Encode::decode_utf8($got); 17891f110e0Safresh1 17991f110e0Safresh1 is $decode, $string, " Expected output"; 18091f110e0Safresh1 } 18191f110e0Safresh1 18291f110e0Safresh1 18391f110e0Safresh1# { 184*256a93a4Safresh1# my $ucs = $UncompressClass->can('new')->( $UncompressClass, $input, Append => 1, Decode => 'utf8'); 18591f110e0Safresh1# my $got; 18691f110e0Safresh1# 1 while $ucs->read($got) > 0 ; 18791f110e0Safresh1# ok length($got) > 0; 18891f110e0Safresh1# is $got, $string, " Expected output"; 18991f110e0Safresh1# } 19091f110e0Safresh1 } 191b39c5158Smillert } 192b39c5158Smillert 193b39c5158Smillert} 194b39c5158Smillert 195b39c5158Smillert 196b39c5158Smillert 197b39c5158Smillert1; 198