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