Aric Stewart : mlang: Japanese conversion tests.
Alexandre Julliard
julliard at winehq.org
Tue Jul 29 07:16:11 CDT 2008
Module: wine
Branch: master
Commit: a4b636f10ab28732d39dfdf6f7489aa6cb4dbb11
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a4b636f10ab28732d39dfdf6f7489aa6cb4dbb11
Author: Aric Stewart <aric at codeweavers.com>
Date: Mon Jul 28 10:35:06 2008 -0500
mlang: Japanese conversion tests.
---
dlls/mlang/tests/mlang.c | 173 ++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 173 insertions(+), 0 deletions(-)
diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c
index 858d9fe..b5d77f7 100644
--- a/dlls/mlang/tests/mlang.c
+++ b/dlls/mlang/tests/mlang.c
@@ -1111,6 +1111,177 @@ static void test_ConvertINetUnicodeToMultiByte(void)
"Expected %u, got %u\n", lstrlenW(src) + 1, destsz);
}
+static void test_JapaneseConversion(void)
+{
+ /* Data */
+ static WCHAR unc_jp[9][12] = {
+ {9,0x31,0x20,0x3042,0x3044,0x3046,0x3048,0x304a,0x000d,0x000a},
+ {9,0x31,0x20,0x30a2,0x30a4,0x30a6,0x30a8,0x30aa,0x000d,0x000a},
+ {9,0x31,0x20,0xff71,0xff72,0xff73,0xff74,0xff75,0x000d,0x000a},
+ {9,0x31,0x20,0x3041,0x3043,0x3045,0x3047,0x3049,0x000d,0x000a},
+ {9,0x31,0x20,0x30a1,0x30a3,0x30a5,0x30a7,0x30a9,0x000d,0x000a},
+ {9,0x31,0x20,0xff67,0xff68,0xff69,0xff6a,0xff6b,0x000d,0x000a},
+ {9,0x31,0x20,0x300c,0x65e5,0x672c,0x8a9e,0x300d,0x000d,0x000a},
+ {7,0x31,0x20,0x25c7,0x25c7,0x3012,0x000d,0x000a},
+ {11,0x31,0x20,0x203b,0x3010,0x0074,0x0065,0x0073,0x0074,0x3011,0x000d,0x000a}
+ };
+ static CHAR jis_jp[9][27] = {
+ {20,0x31,0x20,0x1b,0x24,0x42,0x24,0x22,0x24,0x24,0x24,0x26,0x24,0x28,
+ 0x24,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x22,0x25,0x24,0x25,0x26,0x25,0x28,\
+ 0x25,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x22,0x25,0x24,0x25,0x26,0x25,0x28,\
+ 0x25,0x2a,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x24,0x21,0x24,0x23,0x24,0x25,0x24,0x27,\
+ 0x24,0x29,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x21,0x25,0x23,0x25,0x25,0x25,0x27,\
+ 0x25,0x29,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x25,0x21,0x25,0x23,0x25,0x25,0x25,0x27,\
+ 0x25,0x29,0x1b,0x28,0x42,0x0d,0x0a},
+ {20,0x31,0x20,0x1b,0x24,0x42,0x21,0x56,0x46,0x7c,0x4b,0x5c,0x38,0x6c,\
+ 0x21,0x57,0x1b,0x28,0x42,0x0d,0x0a},
+ {16,0x31,0x20,0x1b,0x24,0x42,0x21,0x7e,0x21,0x7e,0x22,0x29,0x1b,0x28,\
+ 0x42,0x0d,0x0a},
+ {26,0x31,0x20,0x1b,0x24,0x42,0x22,0x28,0x21,0x5a,0x1b,0x28,0x42,0x74,\
+ 0x65,0x73,0x74,0x1b,0x24,0x42,0x21,0x5b,0x1b,0x28,0x42,0x0d,0x0a}
+ };
+ static CHAR sjis_jp[9][15] = {
+ {14,0x31,0x20,0x82,0xa0,0x82,0xa2,0x82,0xa4,0x82,0xa6,0x82,0xa8,0x0d,0x0a},
+ {14,0x31,0x20,0x83,0x41,0x83,0x43,0x83,0x45,0x83,0x47,0x83,0x49,0x0d,0x0a},
+ {9,0x31,0x20,0xb1,0xb2,0xb3,0xb4,0xb5,0x0d,0x0a},
+ {14,0x31,0x20,0x82,0x9f,0x82,0xa1,0x82,0xa3,0x82,0xa5,0x82,0xa7,0x0d,0x0a},
+ {14,0x31,0x20,0x83,0x40,0x83,0x42,0x83,0x44,0x83,0x46,0x83,0x48,0x0d,0x0a},
+ {9,0x31,0x20,0xa7,0xa8,0xa9,0xaa,0xab,0x0d,0x0a},
+ {14,0x31,0x20,0x81,0x75,0x93,0xfa,0x96,0x7b,0x8c,0xea,0x81,0x76,0x0d,0x0a},
+ {10,0x31,0x20,0x81,0x9e,0x81,0x9e,0x81,0xa7,0x0d,0x0a},
+ {14,0x31,0x20,0x81,0xa6,0x81,0x79,0x74,0x65,0x73,0x74,0x81,0x7a,0x0d,0x0a}
+ };
+ static CHAR euc_jp[9][15] = {
+ {14,0x31,0x20,0xa4,0xa2,0xa4,0xa4,0xa4,0xa6,0xa4,0xa8,0xa4,0xaa,0x0d,0x0a},
+ {14,0x31,0x20,0xa5,0xa2,0xa5,0xa4,0xa5,0xa6,0xa5,0xa8,0xa5,0xaa,0x0d,0x0a},
+ {14,0x31,0x20,0x8e,0xb1,0x8e,0xb2,0x8e,0xb3,0x8e,0xb4,0x8e,0xb5,0x0d,0x0a},
+ {14,0x31,0x20,0xa4,0xa1,0xa4,0xa3,0xa4,0xa5,0xa4,0xa7,0xa4,0xa9,0x0d,0x0a},
+ {14,0x31,0x20,0xa5,0xa1,0xa5,0xa3,0xa5,0xa5,0xa5,0xa7,0xa5,0xa9,0x0d,0x0a},
+ {14,0x31,0x20,0x8e,0xa7,0x8e,0xa8,0x8e,0xa9,0x8e,0xaa,0x8e,0xab,0x0d,0x0a},
+ {14,0x31,0x20,0xa1,0xd6,0xc6,0xfc,0xcb,0xdc,0xb8,0xec,0xa1,0xd7,0x0d,0x0a},
+ {10,0x31,0x20,0xa1,0xfe,0xa1,0xfe,0xa2,0xa9,0x0d,0x0a},
+ {14,0x31,0x20,0xa2,0xa8,0xa1,0xda,0x74,0x65,0x73,0x74,0xa1,0xdb,0x0d,0x0a}
+ };
+
+ INT srcsz, destsz;
+ INT i;
+ HRESULT hr;
+ CHAR output[30];
+ WCHAR outputW[30];
+ int outlen;
+
+ /* test unc->jis */
+ for (i = 0; i < 9; i++)
+ {
+ int j;
+ destsz = 30;
+ outlen = jis_jp[i][0];
+ srcsz = unc_jp[i][0];
+ hr = pConvertINetUnicodeToMultiByte(NULL, 50220, &unc_jp[i][1], &srcsz, output, &destsz);
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n", i, hr);
+ ok(destsz == outlen, "(%i) Expected %i, got %i\n",i,outlen,destsz);
+ ok(srcsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],srcsz);
+ ok(memcmp(output,&jis_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+
+ /* and back */
+ srcsz = outlen;
+ destsz = 30;
+ hr = pConvertINetMultiByteToUnicode(NULL, 50220, output, &srcsz, outputW,&destsz);
+
+ /*
+ * JIS does not have hankata so it get automatically converted to
+ * zenkata. this means that strings 1 and 2 are identical as well as
+ * strings 4 and 5.
+ */
+ j = i;
+ if (i == 2) j = 1;
+ if (i == 5) j = 4;
+
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i, hr);
+ ok(destsz == unc_jp[j][0],"(%i) Expected %i, got %i\n",i,unc_jp[j][0],destsz);
+ ok(srcsz == outlen,"(%i) Expected %i, got %i\n",i,outlen,srcsz);
+ ok(memcmp(outputW,&unc_jp[j][1],destsz)==0,"(%i) Strings do not match\n",i);
+ }
+
+ /* test unc->sjis */
+ for (i = 0; i < 9; i++)
+ {
+ destsz = 30;
+ outlen = sjis_jp[i][0];
+ srcsz = unc_jp[i][0];
+
+ hr = pConvertINetUnicodeToMultiByte(NULL, 932, &unc_jp[i][1], &srcsz, output, &destsz);
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == outlen,"(%i) Expected %i, got %i\n",i,outlen,destsz);
+ ok(srcsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],srcsz);
+ ok(memcmp(output,&sjis_jp[i][1],outlen)==0,"(%i) Strings do not match\n",i);
+
+ srcsz = outlen;
+ destsz = 30;
+ hr = pConvertINetMultiByteToUnicode(NULL, 932, output, &srcsz, outputW,&destsz);
+
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n", i, hr);
+ ok(destsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(srcsz == outlen,"(%i) Expected %i, got %i\n",i,outlen,srcsz);
+ ok(memcmp(outputW,&unc_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+ }
+
+ /* test unc->euc */
+ for (i = 0; i < 9; i++)
+ {
+ destsz = 30;
+ outlen = euc_jp[i][0];
+ srcsz = unc_jp[i][0];
+
+ hr = pConvertINetUnicodeToMultiByte(NULL, 51932, &unc_jp[i][1], &srcsz, output, &destsz);
+ ok(hr == S_OK, "(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == outlen, "(%i) Expected %i, got %i\n",i,outlen,destsz);
+ ok(srcsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(memcmp(output,&euc_jp[i][1],outlen)==0,"(%i) Strings do not match\n",i);
+
+ srcsz = outlen;
+ destsz = 30;
+ hr = pConvertINetMultiByteToUnicode(NULL, 51932, output, &srcsz, outputW,&destsz);
+
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(srcsz == outlen,"(%i) Expected %i, got %i\n",i,outlen,srcsz);
+ ok(memcmp(outputW,&unc_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+ }
+
+ /* Japanese autodetect */
+ i = 0;
+ destsz = 30;
+ srcsz = jis_jp[i][0];
+ hr = pConvertINetMultiByteToUnicode(NULL, 50932, &jis_jp[i][1], &srcsz, outputW, &destsz);
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(srcsz == jis_jp[i][0],"(%i) Expected %i, got %i\n",i,jis_jp[i][0],srcsz);
+ ok(memcmp(outputW,&unc_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+
+ i = 1;
+ destsz = 30;
+ srcsz = sjis_jp[i][0];
+ hr = pConvertINetMultiByteToUnicode(NULL, 50932, &sjis_jp[i][1], &srcsz, outputW, &destsz);
+ ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(srcsz == sjis_jp[i][0],"(%i) Expected %i, got %i\n",i,sjis_jp[i][0],srcsz);
+ ok(memcmp(outputW,&unc_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+
+ i = 2;
+ destsz = 30;
+ srcsz = euc_jp[i][0];
+ hr = pConvertINetMultiByteToUnicode(NULL, 50932, &euc_jp[i][1], &srcsz, outputW, &destsz); ok(hr == S_OK,"(%i) Expected S_OK, got %08x\n",i,hr);
+ ok(destsz == unc_jp[i][0],"(%i) Expected %i, got %i\n",i,unc_jp[i][0],destsz);
+ ok(srcsz == euc_jp[i][0],"(%i) Expected %i, got %i\n",i,euc_jp[i][0],srcsz);
+ ok(memcmp(outputW,&unc_jp[i][1],destsz)==0,"(%i) Strings do not match\n",i);
+}
+
START_TEST(mlang)
{
IMultiLanguage2 *iML2 = NULL;
@@ -1158,6 +1329,8 @@ START_TEST(mlang)
test_ConvertINetUnicodeToMultiByte();
+ test_JapaneseConversion();
+
ret = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER,
&IID_IMLangFontLink, (void **)&iMLFL);
More information about the wine-cvs
mailing list