OSDN Git Service

Add tests for [nkf-bug:32328]
[nkf/nkf.git] / nkf_test.pl
index aa55cfd..4e5a1fb 100644 (file)
@@ -2,8 +2,6 @@
 #
 # nkf test program for nkf-2
 #
-# $Id: nkf_test.pl,v 1.26 2008/01/01 14:21:20 naruse Exp $
-#
 #    Shinji KONO <kono@ie.u-ryukyu.ac.jp>
 # Sun Aug 18 12:25:40 JST 1996
 # Sun Nov  8 00:16:06 JST 1998
@@ -186,7 +184,7 @@ print "UTF8 to U16L0..";&test("$nkf --ic=utf-8 --oc=utf-16le",              $example{'utf8N'
 print "UTF8 to U16B...";&test("$nkf --ic=utf-8 --oc=utf-16be-bom",     $example{'utf8N'},$example{'u16B'});
 print "UTF8 to U16B0..";&test("$nkf --ic=utf-8 --oc=utf-16be",         $example{'utf8N'},$example{'u16B0'});
 
-
+print "UTF8 to UTF8...";&test("$nkf -w","\xf0\xa0\x80\x8b","\xf0\xa0\x80\x8b");
 
 # From JIS
 
@@ -216,8 +214,37 @@ print "UTF8 to SJIS...";&test("$nkf -s",$example{'utf1'},$example{'sjis1'});
 print "UTF8 to EUC ...";&test("$nkf -e",$example{'utf1'},$example{'euc1'});
 print "UTF8 to UTF8...";&test("$nkf -w",$example{'utf1'},$example{'utf1'});
 
-print "\nOther Features\n\n";
+# UTF
+sub h {pack("H*",shift)}
+print "SJIS to -w...          ";&test("$nkf -w",h("82A0"),h("E38182"));
+print "SJIS to -w8...         ";&test("$nkf -w8",h("82A0"),h("EFBBBFE38182"));
+print "SJIS to -w80...        ";&test("$nkf -w80",h("82A0"),h("E38182"));
+print "SJIS to UTF-8...       ";&test("$nkf --oc=UTF-8",h("82A0"),h("E38182"));
+print "SJIS to UTF-8N...      ";&test("$nkf --oc=UTF-8N",h("82A0"),h("E38182"));
+print "SJIS to UTF-8-BOM...   ";&test("$nkf --oc=UTF-8-BOM",h("82A0"),h("EFBBBFE38182"));
+print "SJIS to -w16...        ";&test("$nkf -w16",h("82A0"),h("FEFF3042"));
+print "SJIS to UTF-16...      ";&test("$nkf --oc=UTF-16",h("82A0"),h("FEFF3042"));
+print "SJIS to -w16B...       ";&test("$nkf -w16B",h("82A0"),h("FEFF3042"));
+print "SJIS to -w16B0...      ";&test("$nkf -w16B0",h("82A0"),h("3042"));
+print "SJIS to UTF-16BE...    ";&test("$nkf --oc=UTF-16BE",h("82A0"),h("3042"));
+print "SJIS to UTF-16BE-BOM...";&test("$nkf --oc=UTF-16BE-BOM",h("82A0"),h("FEFF3042"));
+print "SJIS to -w16L...       ";&test("$nkf -w16L",h("82A0"),h("FFFE4230"));
+print "SJIS to -w16L0...      ";&test("$nkf -w16L0",h("82A0"),h("4230"));
+print "SJIS to UTF-16LE...    ";&test("$nkf --oc=UTF-16LE",h("82A0"),h("4230"));
+print "SJIS to UTF-16LE-BOM...";&test("$nkf --oc=UTF-16LE-BOM",h("82A0"),h("FFFE4230"));
+print "SJIS to -w32...        ";&test("$nkf -w32",h("82A0"),h("0000FEFF00003042"));
+print "SJIS to UTF-32...      ";&test("$nkf --oc=UTF-32",h("82A0"),h("0000FEFF00003042"));
+print "SJIS to -w32B...       ";&test("$nkf -w32B",h("82A0"),h("0000FEFF00003042"));
+print "SJIS to -w32B0...      ";&test("$nkf -w32B0",h("82A0"),h("00003042"));
+print "SJIS to UTF-32BE...    ";&test("$nkf --oc=UTF-32BE",h("82A0"),h("00003042"));
+print "SJIS to UTF-32BE-BOM...";&test("$nkf --oc=UTF-32BE-BOM",h("82A0"),h("0000FEFF00003042"));
+print "SJIS to -w32L...       ";&test("$nkf -w32L",h("82A0"),h("FFFE000042300000"));
+print "SJIS to -w32L0...      ";&test("$nkf -w32L0",h("82A0"),h("42300000"));
+print "SJIS to UTF-32LE...    ";&test("$nkf --oc=UTF-32LE",h("82A0"),h("42300000"));
+print "SJIS to UTF-32LE-BOM...";&test("$nkf --oc=UTF-32LE-BOM",h("82A0"),h("FFFE000042300000"));
 
+
+print "\nOther Features\n\n";
 # Ambigous Case
 
 $example{'amb'} = unpack('u',<<'eofeof');
@@ -260,6 +287,13 @@ printf "%-40s", "Ambiguous Case.";
 printf "%-40s", "SJIS  Input assumption";
     &test("$nkf -jSx",$example{'amb'},$example{'amb.sjis'});
 
+# UTF8_STR_OF_JIS_SECOND_LEVEL_KANJI
+$example{'utf8_str_of_jis_second_level_kanji'} = "\xe9\xa4\x83\xe5\xad\x90";
+
+printf "%-40s", "UTF8_STR_OF_JIS_SECOND_LEVEL_KANJI";
+    &test("$nkf -w",$example{'utf8_str_of_jis_second_level_kanji'},
+           $example{'utf8_str_of_jis_second_level_kanji'});
+
 # Broken JIS
 
 printf "%-40s", "Broken JIS";
@@ -287,7 +321,7 @@ printf "%-40s", "test_data/cp51932";
 
 # test_data/cp932inv
 printf "%-40s", "test_data/cp932inv";
-    &test("$nkf -sE --cp932inv",$example{'test_data/cp932.ans'},$example{'test_data/cp932'});
+    &test("$nkf -sE --cp932",$example{'test_data/cp932.ans'},$example{'test_data/cp932'});
 
 # test_data/no-cp932inv
 
@@ -297,22 +331,6 @@ eofeof
 
 printf "%-40s", "test_data/no-cp932inv";
     &test("$nkf -sE --no-cp932",$example{'test_data/cp932.ans'},$example{'test_data/no-cp932inv.ans'});
-# ISO-2022-JP-MS
-$example{'iso2022jpms_sjis'} = "\xA1\xDF\xF0\xA0\xF4\xFC\xF5\x40\xF9\xFC";
-$example{'iso2022jpms_euc'} = "\x8e\xa1\x8e\xdf\xf6\xa2\xfe\xfe\x8f\xf5\xa1\x8f\xfe\xfe";
-$example{'iso2022jpms_jis'} = "\x1b\x28\x49\x21\x5f\x1b\x24\x28\x3f\x22\x22\x2a\x7e\x2b\x21\x34\x7e\x1b\x28\x42";
-
-# printf "%-40s", "ISO-2022-JP-MS to CP932";
-#     &test("$nkf --ic=ISO-2022-JP-MS --oc=CP932",$example{'iso2022jpms_jis'},$example{'iso2022jpms_sjis'});
-# 
-# printf "%-40s", "CP932 to ISO-2022-JP-MS";
-#     &test("$nkf --ic=CP932 --oc=ISO-2022-JP-MS",$example{'iso2022jpms_sjis'},$example{'iso2022jpms_jis'});
-# 
-# printf "%-40s", "ISO-2022-JP-MS to eucJP-ms";
-#     &test("$nkf --ic=ISO-2022-JP-MS --oc=eucJP-ms",$example{'iso2022jpms_jis'},$example{'iso2022jpms_euc'});
-# 
-# printf "%-40s", "eucJP-ms to ISO-2022-JP-MS";
-#     &test("$nkf --ic=eucJP-ms --oc=ISO-2022-JP-MS",$example{'iso2022jpms_euc'},$example{'iso2022jpms_jis'});
 # JIS X 0212
 $example{'jisx0212_euc'} = "\x8F\xA2\xAF\x8F\xED\xE3";
 $example{'jisx0212_jis'} = "\x1b\x24\x28\x44\x22\x2f\x6d\x63\x1b\x28\x42";
@@ -332,9 +350,16 @@ $example{'jisx0213_euc'} = unpack('u',<<'eofeof');
 2HJ^O_<_5S_WTJ/[YCZ&AC_[V
 eofeof
 
-$example{'jisx0213_jis'} = unpack('u',<<'eofeof');
+$example{'jisx0213_jis2000'} = unpack('u',<<'eofeof');
 ;&R0H3R(O+WU/54]]="A^>1LD*%`A(7YV&RA"
 eofeof
+$example{'jisx0213_jis2004'} = unpack('u',<<'eofeof');
+;&R0H42(O+WU/54]]="A^>1LD*%`A(7YV&RA"
+eofeof
+
+$example{'jisx0213_utf8'} = unpack('u',<<'eofeof');
+:[[R'Y:REY:V!Y;>+Y;>BZ;ZB\*""B?"JFK(`
+eofeof
 
 printf "%-40s", "Shift_JISX0213 to EUC-JISX0213";
     &test("$nkf --ic=Shift_JISX0213 --oc=EUC-JISX0213",$example{'jisx0213_sjis'},$example{'jisx0213_euc'});
@@ -343,10 +368,212 @@ printf "%-40s", "EUC-JISX0213 to Shift_JISX0213";
     &test("$nkf --ic=EUC-JISX0213 --oc=Shift_JISX0213",$example{'jisx0213_euc'},$example{'jisx0213_sjis'});
 
 printf "%-40s", "ISO-2022-JP-3 to EUC-JISX0213";
-    &test("$nkf --ic=ISO-2022-JP-3 --oc=EUC-JISX0213",$example{'jisx0213_jis'},$example{'jisx0213_euc'});
+    &test("$nkf --ic=ISO-2022-JP-3 --oc=EUC-JISX0213",$example{'jisx0213_jis2000'},$example{'jisx0213_euc'});
+
+printf "%-40s", "ISO-2022-JP-2004 to EUC-JISX0213";
+    &test("$nkf --ic=ISO-2022-JP-2004 --oc=EUC-JISX0213",$example{'jisx0213_jis2004'},$example{'jisx0213_euc'});
+
+printf "%-40s", "EUC-JISX0213 to ISO-2022-JP-2004";
+    &test("$nkf --ic=EUC-JISX0213 --oc=ISO-2022-JP-2004",$example{'jisx0213_euc'},$example{'jisx0213_jis2004'});
+
+printf "%-40s", "EUC-JISX0213 to UTF-8";
+    &test("$nkf --ic=EUC-JISX0213 -w",$example{'jisx0213_euc'},$example{'jisx0213_utf8'});
+
+printf "%-40s", "UTF-8 to EUC-JISX0213";
+    &test("$nkf -W --oc=EUC-JISX0213",$example{'jisx0213_utf8'},$example{'jisx0213_euc'});
+
+printf "%-40s",  "ISO-2022-JP-{1,3,2004} to UTF-8";
+    &test("$nkf --ic=iso-2022-jp-2004 -w",
+       "\x1b\$B5Y\x1b\$(O~e\x1b\$(Q.!\x1b\$(P#M\x1b\$(D\\e\x1b(B",
+       "\xe4\xbc\x91\xe9\xb7\x97\xe4\xbf\xb1\xe5\x8c\x8b\xe8\xa4\xb1");
+printf "%-40s",  "UTF-8 to ISO-2022-JP-2004";
+    &test("$nkf -W --oc=iso-2022-jp-2004",
+       "\xe4\xbc\x91\xe9\xb7\x97\xe4\xbf\xb1\xe5\x8c\x8b\xe8\xa4\xb1",
+       "\x1b\$(Q5Y~e.!\x1b\$(P#M\x1b(B");
+
+# test_data/jisx0213nonbmp
+
+$example{'test_data/jisx0213nonbmp'} = unpack('u',<<'eofeof');
+MKJ*OPJ_,K^"O^\_4S^//[O6Z]?+VJ?:R]N#W[/C^^:GYQ_G4^>[ZW?NS^\G[
+M[/S)_-'^YH^AH8^AJX^AKH^AMH^AQH^A\(^A]X^A^8^CHH^CI8^CIX^CL8^C
+MLH^CN(^COX^CP8^CRH^CTH^CTX^CV8^CW(^C]X^DJH^DL8^DLH^DNH^DO8^D
+MV8^DW(^DWH^DXX^DZH^DZX^D\H^D](^D]8^EI8^ELH^EOH^EQ(^EQX^EU8^E
+MUH^E_H^HL(^HMX^HN(^HNH^HNX^HOX^HP(^HQ8^HR(^HRH^HRX^HVX^HYH^H
+M[(^LHH^LJX^LL(^LT(^LY8^L[8^L\H^MI(^MJ8^MJH^MLH^MM(^MM8^MN8^M
+MUH^M_8^NHX^NI(^NNH^NO(^NO8^NPH^NPX^NQ(^NQX^NR8^NU8^NUH^NUX^N
+MVX^N]X^N^(^OJH^OOX^OP(^OPH^OPX^OSH^OV8^OX8^OZ8^OZH^O\(^O]8_N
+MHX_NM(_NR8_NW(_NWH_NWX_NX(_OLH_OQX_OS8_OX8_OY(_PHH_PLX_PN8_P
+MTX_P^X_QKH_QL(_QM8_QQ(_QW8_QX8_QYH_QZ8_Q]8_Q]X_Q^H_RH8_RHX_R
+MI(_RJ(_RK(_RO8_RR(_RVX_R]8_R]H_SLH_SO8_SOH_SP(_STH_SW8_SWH_S
+M\X_S](_S]8_S]X_S^X_S_8_THH_TI(_TIX_TKH_TKX_TM(_TM8_TO8_TPH_T
+MSX_TZ8_TZX_T\H_T]8_T^8_UM8_UNH_UQH_UUH_UV(_UVH_UW8_UWX_UXX_U
+MZH_U\(_U\X_VQ(_VSH_VW8_V]8_V_H_WH8_WHH_WLX_WMH_WY(_WY8_WZX_W
+M[H_W\X_XJ8_XJH_XK(_XM(_XO(_XOH_XPH_XUH_XXX_X]X_X^8_X^H_YI8_Y
+MKX_YLH_YN8_YPH_YR(_YV8_YWH_YYH_YZX_Y^H_Y_H_ZH8_ZK(_ZKX_ZSX_Z
+MT(_ZUX_ZY8_ZYH_Z\8_Z\H_Z_H_[H8_[K(_[K8_[MH_[MX_[O8_[OH_[SH_[
+MSX_[UX_[VH_[W(_[W8_[X8_[Y8_[YX_[Z8_[\8_\HH_\HX_\N(_\PH_\S(_\
+MUH_\V8_\W8_\]H_]K(_]RX_]S(_]V8_]VX_]W8_]YX_][8_]\(_^I8_^J8_^
+=JX_^LH_^M8_^TX_^V(_^VH_^[H_^\(_^\H_^]@H`
+eofeof
+
+$example{'test_data/jisx0213nonbmp.ans'} = unpack('u',<<'eofeof');
+M\*"`B_"AB+WPH8R;\*&1KO"AHKWPH*Z?\*&:M/"AN+3PHX>$\*.7A/"CG+_P
+MHYVC\*.SOO"DG['PI9*.\*64CO"EG;'PI:>$\*6VH?"FJ[_PIKF`\*>#M/"G
+MFH3PJ(FW\*B/C?"JAI#PH(*)\*""HO"@@J3PH(:B\*"(D_"@C*OPH(Z!\*"-
+ML?"@C[GPH)&*\*"4B?"@EY;PH)BH\*"=C_"@H(?PH*"Z\*"BN?"@I;SPH*:=
+M\*"KD_"@K)WPH+6%\*"WH?"@NI7PH+FM\*"YI/"@O9_PH8B!\*&)E?"AB;OP
+MH8FT\*&+I/"ABY?PH8N]\*&,MO"AC83PH8^$\*&1K?"AEY?PIK"I\*&9A_"A
+MG(;PH9V"\*&G@_"AL9;PH;2M\*&UA?"AM;CPH;6B\*&VH?"AMISPH;:2\*&V
+MM_"AMZ#PH;BS\*&\GO"AO;;PH;^Z\**%N_"BC)[PHHZM\**;L_"BH9OPHJ*K
+M\**FC_"BJKCPHJV/\**MD/"BK8;PHK"=\**NIO"BL*3PHK>A\*.'@_"CA[7P
+MHX:V\*.-LO"CCY/PHX^2\*./D/"CCZ3PHX^5\*./FO"CCY_PHY&*\*.1D?"C
+MD8OPHY&E\*.3I/"CE9KPHY:4\*.8N?"CF8?PHYBX\*.8NO"CG)SPHYR,\*.=
+MI/"CG[_PHY^G\*.@I/"CH+WPHZJ8\*.QO_"CM(#PH[6`\*.WNO"CM[GPH[>3
+M\*.]OO"D@I;PI(2#\*2'AO"DA[[PI(Z\\*28J?"DFJ7PI**6\*2IC?"DK9;P
+MI*VO\*2PEO"DM)3PI+B.\*2XM_"DN:KPI+J+\*6!BO"E@97PI82B\*6&J?"E
+MAZ7PI8>-\*6(GO"EB8SPI9"N\*63F?"EEJ?PI9ZI\*6>M/"EIY3PI:ND\*6K
+MH_"EJ['PI:ZR\*6QB_"EL:3PI;BN\*6YEO"EN:7PI;FB\*6[F/"ENX+PI;NH
+M\*6\H_"EO9SPI;^@\*6_E/"F@(SPI;^[\*:`E_"F@:#PIH.M\*:)L/"FBH;P
+MIHV,\*.TCO"FD(+PIIF^\*::L/"FG)WPIJ.=\*:CJO"FI9'PIJ6O\*:GG?"F
+MJ)[PIJF8\*:JC/"FJK?PIK&S\*:SG?"FN:7PIKZ4\*:_N/"FO[;PIK^W\*>$
+MC?"GA+GPIX^;\*>/FO"GC[[PIY"0\*>1B?"GF)7PIYB4\*>8L?"GFI/PIYR.
+M\*><H_"GG9+PIZ:%\*>JA/"GKK/PIZZ^\*>OA_"GLKCPI[:@\*>XD/"GOK?P
+MJ(**\*B"N_"HBH+PJ(NS\*B0C/"HD97PJ)6K\*B7B/"HEXGPJ)N7\*B;NO"H
+MI8GPJ*6&\*BEJ_"HIH?PJ*:(\*BFNO"HIKOPJ*B>\*BHJ?"HJ;'PJ*F#\*BJ
+MF?"HJXWPJ*ND\*BKG?"HKX'PJ*^O\*BTD/"HM;'PJ+>[\*BXG_"HN+;PJ+J)
+M\*B[J_"HO++PJ+^X\*F*H/"IBK'PJ9*0\*F7C_"IF;_PJ9NP\*F<F?"IG9#P
+MJ:.&\*FILO"IMYOPJ;B]\*FXE?"INHKPJ;F)\*F[A/"INZGPJ;N;\*F_CO"J
+K@*_PJH":\*J#N?"J@H+PHHB8\*J.C/"JD+?PJI>Q\*J8@O"JF)KPJIJR"@``
+eofeof
+
+printf "%-40s",  "EUC-JISX0213 to UTF-8 (not in BMP)";
+    &test("$nkf --ic=euc-jisx0213 -w",$example{'test_data/jisx0213nonbmp'},$example{'test_data/jisx0213nonbmp.ans'});
+printf "%-40s",  "UTF-8 to EUC-JISX0213 (not in BMP)";
+    &test("$nkf -W --oc=euc-jisx0213",$example{'test_data/jisx0213nonbmp.ans'},$example{'test_data/jisx0213nonbmp'});
+
+# test_data/jisx0213needx0213_f
+
+$example{'test_data/jisx0213needx0213_f'} = unpack('u',<<'eofeof');
+MXH*LPKS#B<.?P['%C<6"Q)C$C<6OR:[%B\63RJ+)FLN0RZ;+GN*=O^*%M^*3
+MFN.+DN.+G^*8GO"@@(OE@(+EA(OCDYOEC:'EC:/EEH;OJ+CEG+/EHJGEI9WE
+MB9WFD[?FF8CFFJ#FGKOFH;+CKK;GI(#OJ8WGIKCOJ97GKYGGL:WGM9SGN8?H
+M@+?PIJN_Z(VBZ(ZGZ(^1Z)2CZ)F;Z)FLZ*"?[ZFA[ZFB[ZFD\*B)M^F"F>F$
+ME>F$I^>J@N>JN>>MI.>ML^>OL.>RIN>SM>2+G>>VI^>ZD>>]DO"CM([H@([P
+MIIJPZ(2>\*:CG>B)B^^IG>B*M.B.E.B0C^B1O.B4F^B5D?"FO[;HF:_HFZ;H
+MG+KHG;+HH(OPIYB4Z*.2Z*6%Y)JAZ*BUY)R,\*>NOO"GMJ#HM(GHN:SDH8[H
+MOK;HO['I@K#IA8;IA9GIB9'PJ*:(Z8N&Z8N[Z8V:Z9")Z96XZ9J]Z9N:Z9Z6
+MZ:"EZ:*\Z:.QZ:6`Z:B@Z:BQZ:NE\*FXO>FOKO"INZGIL:GPJH":Z;:9Z;B"
+-\**(F/"JE['PJIJR"@``
+eofeof
+
+$example{'test_data/jisx0213needx0213_f.ans'} = unpack('u',<<'eofeof');
+MJ:&ILZG`J=6IYZG^JJZJOJK,JM6JZZKZJZJKO:O#J]6KX:OQK*JLO*S+K-VL
+MZJW^KJ*NO*[,KMNN[Z[PKZJOMJ_%K]^OZ:_^]:3UN/7$]=CUX_7^^:WYM/G$
+M^='YYOGP^J3ZM/K(^MWZ[?KY^Z'[MOO.^]+[Y_OY_*_\N/S)_-W\[/SPC_.M
+MC_.TC_/.C_/1C_/CC_/VC_2HC_2[C_3$C_3>C_3JC_3UC_6EC_6ZC_7!C_76
+MC_7KC_7TC_:BC_:WC_;!C_;2C_;FC_;PC_>AC_>[C_?.C_?:C_?BC_?\C_BJ
+MC_BSC_C`C_C.C_C8C_CKC_CYC_FOC_FSC_G/C_G<C_GJC_GTC_JHC_J^C_K!
+MC_K=C_KFC_KVC_NDC_NQC_O%C_O2C_OOC_OSC_RDC_R\C_S&C_S2C_SDC_S^
+EC_VAC_VTC_W,C_W8C_WMC_WVC_ZKC_Z\C_[-C_[3C_[NC_[V"@``
+eofeof
+
+printf "%-40s",  "test_data/jisx0213needx0213_f    ";
+    &test("$nkf -W --oc=euc-jisx0213",$example{'test_data/jisx0213needx0213_f'},$example{'test_data/jisx0213needx0213_f.ans'});
+
+# test_data/shift_jisx0213-utf8-need-no-cp932
+
+$example{'test_data/shift_jisx0213-utf8-need-no-cp932'} = unpack('u',<<'eofeof');
+M[4#M3NU/[5/M7NU?[6;M;>UO[7#M=^U][7[MA.V-[8_MGNV?[:OMKNVO[;[M
+MO^W"[<[MS^W0[=[MW^WL[>[M[^W[[?SN1>Y.[D_N4>Y>[E_N;>YO[GWN?NZ'
+F[HWNC^Z0[I[NG^ZF[J[NK^ZV[K_NQ^[.[L_NT.[?[NSN[^[[[OP`
+eofeof
+
+$example{'test_data/shift_jisx0213-utf8-need-no-cp932.ans'} = unpack('u',<<'eofeof');
+MYZ&#YZ2<YZ2N[ZF-[ZF2[ZF3\*6=L>>HN>>IK>^IE>>KJ^>MCN>MH.^IEN2)
+MI.>QF>>TL>>U@>>WH^>XB.>XD>>_G^>_K.^IF^B%H.B%I^B%J.B*H^B*I.B,
+MHNB,NNB-@^B/A^B/C^B0BNB2M.B2NNB3@NB6HNB6L.B9F^B9HNB>K>B>M>B@
+MG^BCM>^IH.BDF.BHE>BHHNBIN>^IH^BMAN^II.BWCO"HB;?HO93PJ(^-Z+ZF
+/Z8*^Z82BZ82OZ8>[Z8>D
+eofeof
+
+printf "%-40s",  "test_data/shift_jisx0213-utf8-need-no-cp932    ";
+    &test("$nkf --ic=shift_jisx0213 -w",$example{'test_data/shift_jisx0213-utf8-need-no-cp932'},$example{'test_data/shift_jisx0213-utf8-need-no-cp932.ans'});
+
+# jisx0213conflict-ibmext
+$example{'shift_jisx0213conflict-ibmext'} = "\x87\x40\xed\x40\xee\xf6\xfa\x52\xfb\x45\xfb\xfc\xfc\x4b";
+$example{'shift_jisx0213conflict-ibmext.x0213utf8'} = "\xe2\x91\xa0\xe7\xa1\x83\xe9\x86\x9e\xe8\xb4\x89\xe9\x8c\x8d\xe9\xa8\xa0\xf0\xa9\xa9\xb2";
+$example{'shift_jisx0213conflict-ibmext.cp932utf8'} = "\xe2\x91\xa0\xe7\xba\x8a\xe2\x85\xb7\xe2\x85\xa8\xe6\xb7\xbc\xe9\xab\x99\xe9\xbb\x91";
+
+printf "%-40s",  "Shift_JISX0213 to UTF-8 (ibmext etc)";
+    &test("$nkf --ic=shift_jisx0213 -w",
+    $example{'shift_jisx0213conflict-ibmext'},
+    $example{'shift_jisx0213conflict-ibmext.x0213utf8'});
+
+printf "%-40s",  "CP932 to UTF-8 (ibmext etc)";
+    &test("$nkf --ic=cp932 -w",
+    $example{'shift_jisx0213conflict-ibmext'},
+    $example{'shift_jisx0213conflict-ibmext.cp932utf8'});
+
+printf "%-40s",  "UTF-8 to Shift_JISX0213 (ibmext etc)";
+    &test("$nkf --oc=shift_jisx0213 -W",
+    $example{'shift_jisx0213conflict-ibmext.x0213utf8'},
+    $example{'shift_jisx0213conflict-ibmext'});
+
+printf "%-40s",  "UTF-8 to CP932 (ibmext etc)";
+    &test("$nkf --oc=cp932 -W --cp932inv",
+    $example{'shift_jisx0213conflict-ibmext.cp932utf8'},
+    "\x87\x40\xfa\x5c\xfa\x47\x87\x5c\xfb\x45\xfb\xfc\xfc\x4b");
+# test_data/jisx0213utf8comb
+
+$example{'test_data/jisx0213utf8comb'} = unpack('u',<<'eofeof');
+MI/>D^*3YI/JD^Z7WI?BE^:7ZI?NE_*7]I?ZF^*O$J\BKR:O*J\NKS*O-J\ZK
+.SZOEJ^:KVJO<J^"KY`H`
+eofeof
+
+$example{'test_data/jisx0213utf8comb.ans'} = unpack('u',<<'eofeof');
+MXX&+XX*:XX&-XX*:XX&/XX*:XX&1XX*:XX&3XX*:XX*KXX*:XX*MXX*:XX*O
+MXX*:XX*QXX*:XX*SXX*:XX*[XX*:XX.$XX*:XX.(XX*:XX>WXX*:PZ;,@,F4
+MS(#)E,R!RHS,@,J,S(')F<R`R9G,@<F:S(#)FLR!RZG+I<NERZG,@<R`RZ7+
+"J0H`
+eofeof
+
+$example{'test_data/jisx0213utf8combr.ans'} = unpack('u',<<'eofeof');
+MI/>D^*3YI/JD^Z7WI?BE^:7ZI?NE_*7]I?ZF^*O$J\BKR:O*J\NKS*O-J\ZK
+,SZOEJ^:KVJO<J^8*
+eofeof
+
+printf "%-40s",  "EUC-JISX0213 to UTF-8 (combining)";
+    &test("$nkf --ic=euc-jisx0213 -w",$example{'test_data/jisx0213utf8comb'},$example{'test_data/jisx0213utf8comb.ans'});
+printf "%-40s",  "UTF-8 to EUC-JISX0213 (combining)";
+    &test("$nkf -W --oc=euc-jisx0213",$example{'test_data/jisx0213utf8comb.ans'},$example{'test_data/jisx0213utf8combr.ans'});
+
+# test_data/jisx0213comb
+
+$example{'test_data/jisx0213comb'} = unpack('u',<<'eofeof');
+MXX&+XX*:XX&-XX*:XX&/XX*:XX&1XX*:XX&3XX*:XX*KXX*:XX*MXX*:XX*O
+MXX*:XX*QXX*:XX*SXX*:XX*[XX*:XX.$XX*:XX.(XX*:XX>WXX*:PZ;,@,F4
+MS(#)E,R!RHS,@,J,S(')F<R`R9G,@<F:S(#)FLR!RZG+I<NERZG,@<R`RZ7+
+"J0H`
+eofeof
+
+$example{'test_data/jisx0213comb.ans'} = unpack('u',<<'eofeof');
+M,$LPFC!-,)HP3S":,%$PFC!3,)HPJS":,*TPFC"O,)HPL3":,+,PFC"[,)HP
+MQ#":,,@PFC'W,)H`Y@,``E0#``)4`P$"C`,``HP#`0)9`P`"60,!`EH#``):
+4`P$"Z0+E`N4"Z0,!`P`"Y0+I``H`
+eofeof
+
+printf "%-40s",  "UTF-8 to UTF-16BE (combining)";
+    &test("$nkf -W --oc=utf-16be",$example{'test_data/jisx0213comb'},$example{'test_data/jisx0213comb.ans'});
+printf "%-40s",  "UTF-16BE to UTF-8 (combining)";
+    &test("$nkf --ic=utf-16be -w",$example{'test_data/jisx0213comb.ans'},$example{'test_data/jisx0213comb'});
+
+printf "%-40s", "UTF-32BE to EUC-JISX0213 (w/o comb char)";
+    &test("$nkf --ic=UTF-32BE --oc=euc-jisx0213",h("000030AB"),h("A5AB"));
+printf "%-40s", "UTF-16LE to EUC-JISX0213 (w/o comb char)";
+    &test("$nkf --ic=utf-16le --oc=euc-jisx0213",h("AB30"),h("A5AB"));
+printf "%-40s", "UTF-8 to EUC-JISX0213 (w/o comb char)";
+    &test("$nkf --ic=utf-8 --oc=euc-jisx0213",h("E382AB"),h("A5AB"));
 
-printf "%-40s", "EUC-JISX0213 to ISO-2022-JP-3";
-    &test("$nkf --ic=EUC-JISX0213 --oc=ISO-2022-JP-3",$example{'jisx0213_euc'},$example{'jisx0213_jis'});
 # test_data/no_best_fit_chars
 
 $example{'test_data/no_best_fit_chars'} = unpack('u',<<'eofeof');
@@ -395,17 +622,17 @@ $example{'ms_ucs_map_1_utf16'} = "\x30\x1C\x20\x16\x22\x12\x00\xA2\x00\xA3\x00\x
 $example{'ms_ucs_map_1_utf16_ms'} = "\xFF\x5E\x22\x25\xFF\x0D\xFF\xE0\xFF\xE1\xFF\xE2";
 
 printf "%-40s", "Normal UCS Mapping :";
-    &test("$nkf -w16B0 -S",$example{'ms_ucs_map_1_sjis'},$example{'ms_ucs_map_1_utf16'});
+    &test("$nkf -w16B0 --ic=Shift_JIS",$example{'ms_ucs_map_1_sjis'},$example{'ms_ucs_map_1_utf16'});
 
 printf "%-40s", "Microsoft UCS Mapping :";
     &test("$nkf -w16B0 -S --ms-ucs-map",$example{'ms_ucs_map_1_sjis'},$example{'ms_ucs_map_1_utf16_ms'});
 printf "%-40s", "CP932 to UTF-16BE :";
     &test("$nkf --ic=cp932 --oc=utf-16be",$example{'ms_ucs_map_1_sjis'},$example{'ms_ucs_map_1_utf16_ms'});
 
-# X0201 \e$B2>L>\e(B
+# X0201 仮名
 # X0201->X0208 conversion
 # X0208 aphabet -> ASCII
-# X0201 \e$BAj8_JQ49\e(B
+# X0201 相互変換
 
 print "\nX0201 test\n\n";
 
@@ -476,6 +703,24 @@ printf "%-40s", "X0201 conversion: EUC";
     &test("$nkf -jZ",$example{'x0201.euc'},$example{'x0201.x0208'});
 printf "%-40s", "X0201 conversion: UTF8";
     &test("$nkf -jZ",$example{'x0201.utf'},$example{'x0201.x0208'});
+printf "%-40s", "-wZ"; &test("$nkf -wZ",
+       "\xE3\x80\x80\xEF\xBD\x81\xEF\xBC\xA1&\xE3\x82\xA2",
+       "\xE3\x80\x80aA&\xE3\x82\xA2");
+printf "%-40s", "-wZ0"; &test("$nkf -wZ0",
+       "\xE3\x80\x80\xEF\xBD\x81\xEF\xBC\xA1&\xE3\x82\xA2",
+       "\xE3\x80\x80aA&\xE3\x82\xA2");
+printf "%-40s", "-wZ1"; &test("$nkf -wZ1",
+       "\xE3\x80\x80\xEF\xBD\x81\xEF\xBC\xA1&\xE3\x82\xA2",
+       " aA&\xE3\x82\xA2");
+printf "%-40s", "-wZ2"; &test("$nkf -wZ2",
+       "\xE3\x80\x80\xEF\xBD\x81\xEF\xBC\xA1&\xE3\x82\xA2",
+       "  aA&\xE3\x82\xA2");
+printf "%-40s", "-wZ3"; &test("$nkf -wZ3",
+       "\xE3\x80\x80\xEF\xBD\x81\xEF\xBC\xA1&\xE3\x82\xA2",
+       "\xE3\x80\x80aA&amp;\xE3\x82\xA2");
+printf "%-40s", "-wZ4"; &test("$nkf -wZ4",
+       "\xE3\x80\x80\xEF\xBD\x81\xEF\xBC\xA1&\xE3\x82\xA2",
+       "\xE3\x80\x80aA&\xEF\xBD\xB1");
 # -x means X0201 output
 printf "%-40s", "X0201 output: SJIS";
     &test("$nkf -xs",$example{'x0201.euc'},$example{'x0201.sjis'});
@@ -485,6 +730,80 @@ printf "%-40s", "X0201 output: EUC";
     &test("$nkf -xe",$example{'x0201.jis'},$example{'x0201.euc'});
 printf "%-40s", "X0201 output: UTF8";
     &test("$nkf -xw",$example{'x0201.jis'},$example{'x0201.utf'});
+# test_data/x0201jis=
+
+$example{'test_data/x0201jis=.ans'} = unpack('u',<<'eofeof');
+MH:*CI*6FIZBIJJNLK:ZOL+&RL[2UMK>XN;J[O+V^O\#!PL/$Q<;'R,G*R\S-
+2SL_0T=+3U-76U]C9VMO<W=[?
+eofeof
+
+printf "%-40s",  "X0201 JIS contains '='";
+    &test("$nkf -xs",
+    "\x1b(I!\"#\$%&'()*+,-./0123456789:;<=>?\@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\x1b(B",
+    $example{'test_data/x0201jis=.ans'});
+# test_data/Xx0213
+
+$example{'test_data/Xx0213'} = unpack('u',<<'eofeof');
+M[[VV[[Z?[[VW[[Z?[[VX[[Z?[[VY[[Z?[[VZ[[Z?[[V^[[Z?[[Z"[[Z?[[Z$
+*[[Z?XX>WXX*:"@``
+eofeof
+
+$example{'test_data/Xx0213.ans'} = unpack('u',<<'eofeof');
+3I?>E^*7YI?JE^Z7\I?VE_J;X"@``
+eofeof
+
+printf "%-40s",  "test_data/Xx0213    ";
+    &test("$nkf -X -W --oc=euc-jisx0213",$example{'test_data/Xx0213'},$example{'test_data/Xx0213.ans'});
+# test_data/xx0213
+
+$example{'test_data/xx0213'} = unpack('u',<<'eofeof');
+M[[VV[[Z?[[VW[[Z?[[VX[[Z?[[VY[[Z?[[VZ[[Z?[[V^[[Z?[[Z"[[Z?[[Z$
+*[[Z?XX>WXX*:"@``
+eofeof
+
+$example{'test_data/xx0213.ans'} = unpack('u',<<'eofeof');
+CCK:.WXZWCM^.N([?CKF.WXZZCM^.OH[?CL*.WX[$CM^F^`H`
+eofeof
+
+printf "%-40s",  "test_data/xx0213    ";
+    &test("$nkf -x -W --oc=euc-jisx0213",$example{'test_data/xx0213'},$example{'test_data/xx0213.ans'});
+# test_data/Z4x0213
+
+$example{'test_data/Z4x0213'} = unpack('u',<<'eofeof');
+3I?>E^*7YI?JE^Z7\I?VE_J;X"@``
+eofeof
+
+$example{'test_data/Z4x0213.ans'} = unpack('u',<<'eofeof');
+M[[VV[[Z?[[VW[[Z?[[VX[[Z?[[VY[[Z?[[VZ[[Z?[[V^[[Z?[[Z"[[Z?[[Z$
+*[[Z?XX>WXX*:"@``
+eofeof
+
+printf "%-40s",  "test_data/Z4x0213    ";
+    &test("$nkf -Z4 --ic=euc-jisx0213 -w",$example{'test_data/Z4x0213'},$example{'test_data/Z4x0213.ans'});
+# test_data/Z4comb
+
+$example{'test_data/Z4comb'} = unpack('u',<<'eofeof');
+MXX""XX",XX"-XX"!XX.[XX.\XX*;XX*<XX*AXX*BXX*CXX*DXX*EXX*FXX*G
+MXX*HXX*IXX*JXX*KXX*LXX*MXX*NXX*OXX*PXX*QXX*RXX*SXX*TXX*UXX*V
+MXX*WXX*XXX*YXX*ZXX*[XX*\XX*]XX*^XX*_XX.`XX.!XX."XX.#XX.$XX.%
+MXX.&XX.'XX.(XX.)XX.*XX.+XX.,XX.-XX..XX./XX.0XX.1XX.2XX.3XX.4
+MXX.5XX.6XX.7XX.8XX.9XX.:XX.;XX.<XX.=XX.>XX.?XX.@XX.AXX.BXX.C
+MXX.DXX.EXX.FXX.GXX.HXX.IXX.JXX.KXX.LXX.MXX.OXX.RXX.SXX.TXX*K
+MXX*:XX*MXX*:XX*OXX*:XX*QXX*:XX*SXX*:XX*[XX*:XX.$XX*:XX.(XX*:
+-XX>WXX*:XX*BXX*9"@``
+eofeof
+
+$example{'test_data/Z4comb.ans'} = unpack('u',<<'eofeof');
+MCJ&.HHZCCJ2.I8ZPCMZ.WXZGCK&.J(ZRCJF.LXZJCK2.JXZUCK:.MH[>CK>.
+MMX[>CKB.N([>CKF.N8[>CKJ.NH[>CKN.NX[>CKR.O([>CKV.O8[>CKZ.OH[>
+MCK^.OX[>CL".P([>CL&.P8[>CJ^.PH["CMZ.PX[#CMZ.Q([$CMZ.Q8[&CL>.
+MR([)CLJ.RH[>CLJ.WX[+CLN.WH[+CM^.S([,CMZ.S([?CLV.S8[>CLV.WX[.
+MCLZ.WH[.CM^.SX[0CM&.TH[3CJR.U(ZMCM6.KH[6CM>.V([9CMJ.VX[<CJ:.
+LW8ZSCMZ.MH[?CK>.WXZXCM^.N8[?CKJ.WXZ^CM^.PH[?CL2.WZ;XCK&.W@H`
+eofeof
+
+printf "%-40s",  "test_data/Z4comb    ";
+    &test("$nkf -Z4 -W --oc=euc-jisx0213",$example{'test_data/Z4comb'},$example{'test_data/Z4comb.ans'});
 
 # MIME decode
 
@@ -599,7 +918,7 @@ eofeof
 # Without -l, ISO-8859-1 was handled as X0201.
 
 printf "%-40s", "MIME ISO-8859-1 (Q)";
-    &test("$nkf -ml",$example{'mime.is8859'},$example{'mime.is8859.ans'});
+    &test("$nkf -jml",$example{'mime.is8859'},$example{'mime.is8859.ans'});
 
 # test for -f is not so simple.
 
@@ -844,6 +1163,20 @@ eofeof
 
 printf "%-40s", "test_data/q-encode-softrap";
     &test("$nkf -jmQ",$example{'test_data/q-encode-softrap'},$example{'test_data/q-encode-softrap.ans'});
+# test_data/q-encode-utf-8
+
+$example{'test_data/q-encode-utf-8'} = <<'eofeof';
+=?utf-8?Q?=E3=81=82=E3=81=84=E3=81=86=E3=81=88=E3=81=8A?=
+=?utf-8?Q?=E3=81=8B=E3=81=8D=E3=81=8F=E3=81=91=E3=81=93?=
+eofeof
+
+$example{'test_data/q-encode-utf-8.ans'} = <<"eofeof";
+\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86\xE3\x81\x88\xE3\x81\x8A
+\xE3\x81\x8B\xE3\x81\x8D\xE3\x81\x8F\xE3\x81\x91\xE3\x81\x93
+eofeof
+
+printf "%-40s", "test_data/q-encode-utf-8";
+    &test("$nkf -w",$example{'test_data/q-encode-utf-8'},$example{'test_data/q-encode-utf-8.ans'});
 # test_data/rot13
 
 $example{'test_data/rot13'} = unpack('u',<<'eofeof');
@@ -875,7 +1208,7 @@ $example{'test_data/slash.ans'} = unpack('u',<<'eofeof');
 eofeof
 
 printf "%-40s", "test_data/slash";
-    &test("$nkf  ",$example{'test_data/slash'},$example{'test_data/slash.ans'});
+    &test("$nkf -j",$example{'test_data/slash'},$example{'test_data/slash.ans'});
 # test_data/z1space-0
 
 $example{'test_data/z1space-0'} = unpack('u',<<'eofeof');
@@ -960,6 +1293,83 @@ eofeof
 printf "%-40s", "test_data/bugs10904";
     &test("$nkf -Mj",$example{'test_data/bugs10904'},$example{'test_data/bugs10904.ans'});
 
+printf "%-40s", "test_data/ruby-dev:39722";
+    &test("$nkf -MjW",<<eom,<<eom);
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\xE3\x81\x82
+eom
+=?US-ASCII?Q?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa?=
+ =?US-ASCII?Q?aaaaaaaaaaaaaaaaa?= =?ISO-2022-JP?B?GyRCJCIbKEI=?=
+eom
+# test_data/bug19779
+
+$example{'test_data/bug19779'} = unpack('u',<<'eofeof');
+2&R1","$;*$(*&R1"7V8;*$(*
+eofeof
+
+$example{'test_data/bug19779.ans'} = unpack('u',<<'eofeof');
+M/3])4T\M,C`R,BU*4#]"/T=Y4D--0T5B2T5)/3\]"CT_25-/+3(P,C(M2E`_
+10C]'>5)#6#)98DM%23T_/0H`
+eofeof
+
+printf "%-40s",  "test_data/bug19779    ";
+    &test("$nkf -jM",$example{'test_data/bug19779'},$example{'test_data/bug19779.ans'});
+
+printf "%-40s",  "[nkf-forum:47327]    ";
+    &test("$nkf -wM",pack('H*','feffd852de76d814dc45000a'),"=?UTF-8?B?8KSptvCVgYU=?=\n");
+
+printf "%-40s",  "[nkf-forum:47334]    ";
+    &test("$nkf -w",pack('H*','feff006100620063000a'),"abc\n");
+
+printf "%-40s",  "[nkf-bug:20079]    ";
+    &test("$nkf -jSxM","\xBB \xBB","=?ISO-2022-JP?B?GyhJOxsoQiAbKEk7GyhC?=");
+
+printf "%-40s",  "[nkf-bug:20079]    ";
+    &test("$nkf -SxMw8","\xBB \xBB","=?UTF-8?B?77u/7727IO+9uw==?=");
+
+printf "%-40s",  "[nkf-forum:48850]    ";
+    &test("$nkf -jSM",
+       "From: \x82\xA0\x82\xA0\x82\xA0\x82\xA0\x82\xA0\x82\xA0\x82\xA0\x82\xA0\x82\xA0" .
+       " <x-xxxx@xxxxxxxxxxxx.co.jp>\n",
+       "From: =?ISO-2022-JP?B?GyRCJCIkIiQiJCIkIiQiJCIkIiQiGyhC?=" .
+       " <x-xxxx@xxxxxxxxxxxx.co.jp>\n");
+
+printf "%-40s",  "[nkf-bug:21393]-x  ";
+    &test("$nkf --ic=UTF-8 --oc=CP932",
+    "\xEF\xBD\xBC\xEF\xBE\x9E\xEF\xBD\xAC\xEF\xBD\xB0\xEF\xBE\x8F\xEF\xBE\x9D\xEF\xBD\xA5\xEF\xBE\x8E\xEF\xBE\x9F\xEF\xBE\x83\xEF\xBE\x84\xEF\xBD\xA1",
+    "\xBC\xDE\xAC\xB0\xCF\xDD\xA5\xCE\xDF\xC3\xC4\xA1");
+
+printf "%-40s",  "[nkf-bug:21393]-X  ";
+    &test("$nkf --ic=UTF-8 --oc=CP932 -X",
+    "\xEF\xBD\xBC\xEF\xBE\x9E\xEF\xBD\xAC\xEF\xBD\xB0\xEF\xBE\x8F\xEF\xBE\x9D\xEF\xBD\xA5\xEF\xBE\x8E\xEF\xBE\x9F\xEF\xBE\x83\xEF\xBE\x84\xEF\xBD\xA1",
+    "\x83W\x83\x83\x81[\x83}\x83\x93\x81E\x83|\x83e\x83g\x81B");
+
+printf "%-40s",  "[nkf-forum:65316]  ";
+    &test("$nkf -xwW -f10",
+    "\xEF\xBD\xB1\xEF\xBD\xB2\xEF\xBD\xB3\xEF\xBD\xB4\xEF\xBD\xB5\xEF\xBD\xB6\xEF\xBD\xB7\xEF\xBD\xB8\xEF\xBD\xB9\xEF\xBD\xBA\xEF\xBD\xBB\xEF\xBD\xBC\xEF\xBD\xBD\xEF\xBD\xBE\xEF\xBD\xBF\xEF\xBE\x80\xEF\xBE\x81\xEF\xBE\x82\xEF\xBE\x83\xEF\xBE\x84",
+    "\xEF\xBD\xB1\xEF\xBD\xB2\xEF\xBD\xB3\xEF\xBD\xB4\xEF\xBD\xB5\xEF\xBD\xB6\xEF\xBD\xB7\xEF\xBD\xB8\xEF\xBD\xB9\xEF\xBD\xBA\n\xEF\xBD\xBB\xEF\xBD\xBC\xEF\xBD\xBD\xEF\xBD\xBE\xEF\xBD\xBF\xEF\xBE\x80\xEF\xBE\x81\xEF\xBE\x82\xEF\xBE\x83\xEF\xBE\x84\n");
+
+printf "%-40s",  "[nkf-forum:65482]  ";
+    &test("$nkf --ic=CP50221 --oc=CP932",
+    "\x1b\x24\x42\x7f\x21\x80\x21\x1b\x28\x42\n",
+    "\xf0\x40\xf0\x9f\x0a");
+
+# [KNOWNBUG]
+# printf "%-40s",  "[ruby-dev:47057]  ";
+#     &test("$nkf -jW -M --cp932",
+#     "\xe3\x80\x8c\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82 by \xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x81\x82\xe3\x80\x8d\xe3\x81\xae\xe3\x83\xac\xe3\x82\xb7\xe3\x83\x94",
+#     "=?ISO-2022-JP?B?GyRCIVYkIiQiJCIkIiQiJCIkIiQiJCIkIiQiGyhC?= by\n =?ISO-2022-JP?B?GyRCJCIkIiQiJCIkIiQiJCIkIiQiJCIhVyROJWwlNyVUGyhC?=");
+
+printf "%-40s",  "[nkf-bug:32328] SJIS";
+    &test("$nkf -Sw",
+    "\x1b\x82\xa0",
+    "\x1b\xe3\x81\x82");
+
+printf "%-40s",  "[nkf-bug:32328] JIS";
+    &test("$nkf -Jw",
+    "\x1b\x1b\$B\$\x22\x1b(B",
+    "\x1b\xe3\x81\x82");
+
+    if (!NKF) {
 printf "%-40s", "Guess NL";
 &command_tests(
        "$nkf --guess","none",      "ASCII\n",
@@ -983,76 +1393,77 @@ printf "%-40s", "Guess NL";
        "$nkf --guess","\r\n.\n",   "ASCII (MIXED NL)\n",
        "$nkf --guess","\r\n.\r",   "ASCII (MIXED NL)\n",
        "$nkf --guess","\r\n.\r\n", "ASCII (CRLF)\n");
+    }
 
 printf "%-40s", "Convert NL to LF";
 &command_tests(
-       "$nkf -Lu","none",      "none",
-       "$nkf -Lu","\n",        "\n",
-       "$nkf -Lu","\n\n",      "\n\n",
-       "$nkf -Lu","\n\r",      "\n\n",
-       "$nkf -Lu","\n\r\n",    "\n\n",
-       "$nkf -Lu","\n.\n",     "\n.\n",
-       "$nkf -Lu","\n.\r",     "\n.\n",
-       "$nkf -Lu","\n.\r\n",   "\n.\n",
-       "$nkf -Lu","\r",        "\n",
-       "$nkf -Lu","\r\r",      "\n\n",
-       "$nkf -Lu","\r\r\n",    "\n\n",
-       "$nkf -Lu","\r.\n",     "\n.\n",
-       "$nkf -Lu","\r.\r",     "\n.\n",
-       "$nkf -Lu","\r.\r\n",   "\n.\n",
-       "$nkf -Lu","\r\n",      "\n",
-       "$nkf -Lu","\r\n\n",    "\n\n",
-       "$nkf -Lu","\r\n\r",    "\n\n",
-       "$nkf -Lu","\r\n\r\n",  "\n\n",
-       "$nkf -Lu","\r\n.\n",   "\n.\n",
-       "$nkf -Lu","\r\n.\r",   "\n.\n",
-       "$nkf -Lu","\r\n.\r\n", "\n.\n");
+       "$nkf -jLu","none",      "none",
+       "$nkf -jLu","\n",        "\n",
+       "$nkf -jLu","\n\n",      "\n\n",
+       "$nkf -jLu","\n\r",      "\n\n",
+       "$nkf -jLu","\n\r\n",    "\n\n",
+       "$nkf -jLu","\n.\n",     "\n.\n",
+       "$nkf -jLu","\n.\r",     "\n.\n",
+       "$nkf -jLu","\n.\r\n",   "\n.\n",
+       "$nkf -jLu","\r",        "\n",
+       "$nkf -jLu","\r\r",      "\n\n",
+       "$nkf -jLu","\r\r\n",    "\n\n",
+       "$nkf -jLu","\r.\n",     "\n.\n",
+       "$nkf -jLu","\r.\r",     "\n.\n",
+       "$nkf -jLu","\r.\r\n",   "\n.\n",
+       "$nkf -jLu","\r\n",      "\n",
+       "$nkf -jLu","\r\n\n",    "\n\n",
+       "$nkf -jLu","\r\n\r",    "\n\n",
+       "$nkf -jLu","\r\n\r\n",  "\n\n",
+       "$nkf -jLu","\r\n.\n",   "\n.\n",
+       "$nkf -jLu","\r\n.\r",   "\n.\n",
+       "$nkf -jLu","\r\n.\r\n", "\n.\n");
 
 printf "%-40s", "Convert NL to LF";
 &command_tests(
-       "$nkf -Lm","none",      "none",
-       "$nkf -Lm","\n",        "\r",
-       "$nkf -Lm","\n\n",      "\r\r",
-       "$nkf -Lm","\n\r",      "\r\r",
-       "$nkf -Lm","\n\r\n",    "\r\r",
-       "$nkf -Lm","\n.\n",     "\r.\r",
-       "$nkf -Lm","\n.\r",     "\r.\r",
-       "$nkf -Lm","\n.\r\n",   "\r.\r",
-       "$nkf -Lm","\r",        "\r",
-       "$nkf -Lm","\r\r",      "\r\r",
-       "$nkf -Lm","\r\r\n",    "\r\r",
-       "$nkf -Lm","\r.\n",     "\r.\r",
-       "$nkf -Lm","\r.\r",     "\r.\r",
-       "$nkf -Lm","\r.\r\n",   "\r.\r",
-       "$nkf -Lm","\r\n",      "\r",
-       "$nkf -Lm","\r\n\n",    "\r\r",
-       "$nkf -Lm","\r\n\r",    "\r\r",
-       "$nkf -Lm","\r\n\r\n",  "\r\r",
-       "$nkf -Lm","\r\n.\n",   "\r.\r",
-       "$nkf -Lm","\r\n.\r",   "\r.\r",
-       "$nkf -Lm","\r\n.\r\n", "\r.\r");
+       "$nkf -jLm","none",      "none",
+       "$nkf -jLm","\n",        "\r",
+       "$nkf -jLm","\n\n",      "\r\r",
+       "$nkf -jLm","\n\r",      "\r\r",
+       "$nkf -jLm","\n\r\n",    "\r\r",
+       "$nkf -jLm","\n.\n",     "\r.\r",
+       "$nkf -jLm","\n.\r",     "\r.\r",
+       "$nkf -jLm","\n.\r\n",   "\r.\r",
+       "$nkf -jLm","\r",        "\r",
+       "$nkf -jLm","\r\r",      "\r\r",
+       "$nkf -jLm","\r\r\n",    "\r\r",
+       "$nkf -jLm","\r.\n",     "\r.\r",
+       "$nkf -jLm","\r.\r",     "\r.\r",
+       "$nkf -jLm","\r.\r\n",   "\r.\r",
+       "$nkf -jLm","\r\n",      "\r",
+       "$nkf -jLm","\r\n\n",    "\r\r",
+       "$nkf -jLm","\r\n\r",    "\r\r",
+       "$nkf -jLm","\r\n\r\n",  "\r\r",
+       "$nkf -jLm","\r\n.\n",   "\r.\r",
+       "$nkf -jLm","\r\n.\r",   "\r.\r",
+       "$nkf -jLm","\r\n.\r\n", "\r.\r");
 
 printf "%-40s", "Convert NL to CRLF";
 &command_tests(
-       "$nkf -Lw","none",      "none",
-       "$nkf -Lw","\n",        "\r\n",
-       "$nkf -Lw","\n\n",      "\r\n\r\n",
-       "$nkf -Lw","\n\r",      "\r\n\r\n",
-       "$nkf -Lw","\n\r\n",    "\r\n\r\n",
-       "$nkf -Lw","\n.\n",     "\r\n.\r\n",
-       "$nkf -Lw","\n.\r",     "\r\n.\r\n",
-       "$nkf -Lw","\n.\r\n",   "\r\n.\r\n",
-       "$nkf -Lw","\r",        "\r\n",
-       "$nkf -Lw","\r\r",      "\r\n\r\n",
-       "$nkf -Lw","\r\r\n",    "\r\n\r\n",
-       "$nkf -Lw","\r.\n",     "\r\n.\r\n",
-       "$nkf -Lw","\r.\r",     "\r\n.\r\n",
-       "$nkf -Lw","\r.\r\n",   "\r\n.\r\n",
-       "$nkf -Lw","\r\n",      "\r\n",
-       "$nkf -Lw","\r\n\n",    "\r\n\r\n",
-       "$nkf -Lw","\r\n\r",    "\r\n\r\n",
-       "$nkf -Lw","\r\n\r\r\n",  "\r\n\r\n\r\n",
-       "$nkf -Lw","\r\n.\n",   "\r\n.\r\n",
-       "$nkf -Lw","\r\n.\r",   "\r\n.\r\n",
-       "$nkf -Lw","\r\n.\r\n", "\r\n.\r\n");
+       "$nkf -jLw","none",      "none",
+       "$nkf -jLw","\n",        "\r\n",
+       "$nkf -jLw","\n\n",      "\r\n\r\n",
+       "$nkf -jLw","\n\r",      "\r\n\r\n",
+       "$nkf -jLw","\n\r\n",    "\r\n\r\n",
+       "$nkf -jLw","\n.\n",     "\r\n.\r\n",
+       "$nkf -jLw","\n.\r",     "\r\n.\r\n",
+       "$nkf -jLw","\n.\r\n",   "\r\n.\r\n",
+       "$nkf -jLw","\r",        "\r\n",
+       "$nkf -jLw","\r\r",      "\r\n\r\n",
+       "$nkf -jLw","\r\r\n",    "\r\n\r\n",
+       "$nkf -jLw","\r.\n",     "\r\n.\r\n",
+       "$nkf -jLw","\r.\r",     "\r\n.\r\n",
+       "$nkf -jLw","\r.\r\n",   "\r\n.\r\n",
+       "$nkf -jLw","\r\n",      "\r\n",
+       "$nkf -jLw","\r\n\n",    "\r\n\r\n",
+       "$nkf -jLw","\r\n\r",    "\r\n\r\n",
+       "$nkf -jLw","\r\n\r\r\n",  "\r\n\r\n\r\n",
+       "$nkf -jLw","\r\n.\n",   "\r\n.\r\n",
+       "$nkf -jLw","\r\n.\r",   "\r\n.\r\n",
+       "$nkf -jLw","\r\n.\r\n", "\r\n.\r\n");
 # end