summaryrefslogtreecommitdiff
path: root/ext/Encode/t/CJKT.t
diff options
context:
space:
mode:
Diffstat (limited to 'ext/Encode/t/CJKT.t')
-rw-r--r--ext/Encode/t/CJKT.t107
1 files changed, 107 insertions, 0 deletions
diff --git a/ext/Encode/t/CJKT.t b/ext/Encode/t/CJKT.t
new file mode 100644
index 0000000000..4540034e55
--- /dev/null
+++ b/ext/Encode/t/CJKT.t
@@ -0,0 +1,107 @@
+BEGIN {
+ if ($ENV{'PERL_CORE'}){
+ chdir 't';
+ unshift @INC, '../lib';
+ }
+ require Config; import Config;
+ if ($Config{'extensions'} !~ /\bEncode\b/) {
+ print "1..0 # Skip: Encode was not built\n";
+ exit 0;
+ }
+ if (ord("A") == 193) {
+ print "1..0 # Skip: EBCDIC\n";
+ exit 0;
+ }
+# should work w/o PerlIO now!
+# unless (PerlIO::Layer->find('perlio')){
+# print "1..0 # Skip: PerlIO required\n";
+# exit 0;
+# }
+ $| = 1;
+}
+use strict;
+use Test::More tests => 73;
+#use Test::More qw(no_plan);
+use Encode;
+use File::Basename;
+use File::Spec;
+use File::Compare qw(compare_text);
+our $DEBUG;
+
+my %Charset =
+ (
+ 'big5-eten' => [qw(big5-eten cp950 MacChineseTrad)],
+ 'big5-hkscs' => [qw(big5-hkscs)],
+ gb2312 => [qw(euc-cn gb2312-raw cp936 MacChineseSimp)],
+ jisx0201 => [qw(euc-jp shiftjis 7bit-jis jis0201-raw
+ cp932 MacJapanese)],
+ jisx0212 => [qw(euc-jp 7bit-jis iso-2022-jp-1 jis0208-raw)],
+ jisx0208 => [qw(euc-jp shiftjis 7bit-jis cp932 MacJapanese
+ iso-2022-jp iso-2022-jp-1 jis0212-raw)],
+ ksc5601 => [qw(euc-kr iso-2022-kr ksc5601-raw cp949 MacKorean)],
+ );
+
+my $dir = dirname(__FILE__);
+
+for my $charset (sort keys %Charset){
+ my ($src, $uni, $dst, $txt);
+
+ my $transcoder = find_encoding($Charset{$charset}[0]) or die;
+
+ my $src_enc = File::Spec->catfile($dir,"$charset.enc");
+ my $src_utf = File::Spec->catfile($dir,"$charset.utf");
+ my $dst_enc = File::Spec->catfile($dir,"$$.enc");
+ my $dst_utf = File::Spec->catfile($dir,"$$.utf");
+
+
+ open $src, "<$src_enc" or die "$src_enc : $!";
+ binmode($src);
+ $txt = join('',<$src>);
+ close($src);
+
+ eval{ $uni = $transcoder->decode($txt, 1) };
+ $@ and print $@;
+ ok(defined($uni), "decode $charset");
+ is(length($txt),0, "decode $charset completely");
+
+ open $dst, ">$dst_utf" or die "$dst_utf : $!";
+ if (PerlIO::Layer->find('perlio')){
+ binmode($dst, ":utf8");
+ print $dst $uni;
+ }else{ # ugh!
+ binmode($dst);
+ my $raw = $uni; Encode::_utf8_off($raw);
+ print $dst $raw;
+ }
+
+ close($dst);
+ is(compare_text($dst_utf, $src_utf), 0, "$dst_utf eq $src_utf");
+
+ open $src, "<$src_utf" or die "$src_utf : $!";
+ if (PerlIO::Layer->find('perlio')){
+ binmode($src, ":utf8");
+ $uni = join('', <$src>);
+ }else{ # ugh!
+ binmode($src);
+ $uni = join('', <$src>);
+ Encode::_utf8_on($uni);
+ }
+ close $src;
+
+ eval{ $txt = $transcoder->encode($uni,1) };
+ $@ and print $@;
+ ok(defined($txt), "encode $charset");
+ is(length($uni), 0, "encode $charset completely");
+
+ open $dst,">$dst_enc" or die "$dst_utf : $!";
+ binmode($dst);
+ print $dst $txt;
+ close($dst);
+ is(compare_text($src_enc, $dst_enc), 0 => "$dst_enc eq $src_enc");
+
+ for my $canon (@{$Charset{$charset}}){
+ is($uni, decode($canon, encode($canon, $uni)),
+ "RT/$charset/$canon");
+ }
+ $DEBUG or unlink($dst_utf, $dst_enc);
+}