[PATCH] mlang/tests: Add more tests for GetLcidFromRfc1766

Detlef Riekenberg wine.dev at web.de
Sun May 24 12:52:18 CDT 2009


---
 dlls/mlang/tests/mlang.c |  140 +++++++++++++++++++++++++++-------------------
 1 files changed, 82 insertions(+), 58 deletions(-)

diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c
index c67ad8c..66e80e8 100644
--- a/dlls/mlang/tests/mlang.c
+++ b/dlls/mlang/tests/mlang.c
@@ -49,6 +49,53 @@ static HRESULT (WINAPI *pConvertINetMultiByteToUnicode)(LPDWORD, DWORD, LPCSTR,
 static HRESULT (WINAPI *pConvertINetUnicodeToMultiByte)(LPDWORD, DWORD, LPCWSTR,
                                                         LPINT, LPSTR, LPINT);
 
+typedef struct lcid_tag_table {
+    LPCSTR rfc1766;
+    LCID lcid;
+    HRESULT hr;
+    LPCSTR alternate_rfc;
+    LCID alternate_lcid;
+} lcid_table_entry;
+
+static const lcid_table_entry  lcid_table[] = {
+    {"ms-bad",  -1,     E_FAIL, "ms",    0x043e},
+    {"en-them", -1,     E_FAIL, "en",    9},
+    {"de-chm",  -1,     E_FAIL, "de-ch", 0x0807},
+    {"de-CHM",  -1,     E_FAIL, "de-ch", 0x0807},
+    {"english", -1,     E_FAIL},
+    {"msdn",    -1,     E_FAIL},
+
+    {"e",     -1,       E_FAIL},
+    {"",      -1,       E_FAIL},
+    {"-",     -1,       E_FAIL},
+    {"e-",    -1,       E_FAIL},
+
+    {"en",    9,        S_OK},       /* only en is special: PRIMARYLANGID */
+
+    {"en-gb", 0x809,    S_OK},
+    {"en-GB", 0x809,    S_OK},
+    {"EN-GB", 0x809,    S_OK},
+    {"en-us", 0x409,    S_OK},
+    {"en-US", 0x409,    S_OK},
+
+    {"de",    0x407,    S_OK},
+    {"de-DE", 0x407,    S_OK, "de"},
+    {"de-CH", 0x807,    S_OK},
+    {"de-AT", 0xc07,    S_OK},
+
+    {"fr",    0x040c,   S_OK},
+    {"fr-FR", 0x040c,   S_OK, "fr"},
+    {"fr-CH", 0x100c,   S_OK},
+
+    {"it",    0x410,    S_OK},
+    {"it-IT", 0x410,    S_OK, "it"},
+    {"it-CH", 0x810,    S_OK},
+
+    {"kok",   0x457,    S_OK}
+
+};
+
+
 static BOOL init_function_ptrs(void)
 {
     HMODULE hMlang;
@@ -834,74 +881,51 @@ static void test_rfc1766(IMultiLanguage2 *iML2)
 
 static void test_GetLcidFromRfc1766(IMultiLanguage2 *iML2)
 {
+    WCHAR rfc1766W[MAX_RFC1766_NAME + 1];
+    CHAR  alternateA[MAX_RFC1766_NAME + 1];
     LCID lcid;
     HRESULT ret;
+    BSTR alternateW;
+    DWORD i;
 
-    static WCHAR e[] = { 'e',0 };
     static WCHAR en[] = { 'e','n',0 };
-    static WCHAR empty[] = { 0 };
-    static WCHAR dash[] = { '-',0 };
-    static WCHAR e_dash[] = { 'e','-',0 };
-    static WCHAR en_gb[] = { 'e','n','-','g','b',0 };
-    static WCHAR en_us[] = { 'e','n','-','u','s',0 };
-    static WCHAR en_them[] = { 'e','n','-','t','h','e','m',0 };
-    static WCHAR english[] = { 'e','n','g','l','i','s','h',0 };
-
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, NULL, en);
-    ok(ret == E_INVALIDARG, "GetLcidFromRfc1766 returned: %08x\n", ret);
-
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, NULL);
-    ok(ret == E_INVALIDARG, "GetLcidFromRfc1766 returned: %08x\n", ret);
-
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, e);
-    ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret);
 
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, empty);
-    ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret);
-
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, dash);
-    ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret);
-
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, e_dash);
-    ok(ret == E_FAIL, "GetLcidFromRfc1766 returned: %08x\n", ret);
-
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, en_them);
-    ok((ret == E_FAIL || ret == S_FALSE), "GetLcidFromRfc1766 returned: %08x\n", ret);
-    if (ret == S_FALSE)
-    {
-        BSTR rfcstr;
-        static WCHAR en[] = {'e','n',0};
-
-        ret = IMultiLanguage2_GetRfc1766FromLcid(iML2, lcid, &rfcstr);
-        ok(ret == S_OK, "Expected S_OK, got %08x\n", ret);
-        ok_w2("Expected \"%s\",  got \"%s\"n", en, rfcstr);
-    }
-
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, english);
-    ok((ret == E_FAIL || ret == S_FALSE), "GetLcidFromRfc1766 returned: %08x\n", ret);
-    if (ret == S_FALSE)
-    {
-        BSTR rfcstr;
-        static WCHAR en[] = {'e','n',0};
+    for(i = 0; i < sizeof(lcid_table) / sizeof(lcid_table[0]); i++) {
+        lcid = -1;
+        MultiByteToWideChar(CP_ACP, 0, lcid_table[i].rfc1766, -1, rfc1766W, MAX_RFC1766_NAME);
+        ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, rfc1766W);
+
+        if (lcid_table[i].alternate_rfc && (lcid_table[i].lcid != -1)) {
+            ok(ret == S_OK || ret == S_FALSE,
+                "#%02d: HRESULT 0x%x (expected S_OK or S_FALSE)\n", i, ret);
+
+            if(ret == S_FALSE) {
+                alternateA[0] = '\0';
+                alternateW = NULL;
+                ret = IMultiLanguage2_GetRfc1766FromLcid(iML2, lcid, &alternateW);
+                WideCharToMultiByte(CP_ACP, 0, alternateW, -1, alternateA,
+                                    MAX_RFC1766_NAME, NULL, NULL);
+                ok( ret == S_OK && !lstrcmpiA(alternateA, lcid_table[i].alternate_rfc),
+                    "#%02d: got 0x%x with \"%s\" (expected S_OK with %s)\n",
+                    i, ret, alternateA, lcid_table[i].alternate_rfc);
+
+                SysFreeString(alternateW);
+            }
+        }
+        else
+            ok(ret == lcid_table[i].hr,
+                "#%02d: HRESULT 0x%x (expected 0x%x)\n", i, ret, lcid_table[i].hr);
 
-        ret = IMultiLanguage2_GetRfc1766FromLcid(iML2, lcid, &rfcstr);
-        ok(ret == S_OK, "Expected S_OK, got %08x\n", ret);
-        ok_w2("Expected \"%s\",  got \"%s\"n", en, rfcstr);
+        ok(lcid == lcid_table[i].lcid,
+            "#%02d: got LCID 0x%x (expected 0x%x)\n", i, lcid, lcid_table[i].lcid);
     }
 
-    lcid = 0;
-
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, en);
-    ok(ret == S_OK, "GetLcidFromRfc1766 returned: %08x\n", ret);
-    ok(lcid == 9, "got wrong lcid: %04x\n", lcid);
+    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, NULL);
+    ok(ret == E_INVALIDARG, "GetLcidFromRfc1766 returned: %08x\n", ret);
 
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, en_gb);
-    ok(ret == S_OK, "GetLcidFromRfc1766 returned: %08x\n", ret);
-    ok(lcid == 0x809, "got wrong lcid: %04x\n", lcid);
+    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, NULL, en);
+    ok(ret == E_INVALIDARG, "GetLcidFromRfc1766 returned: %08x\n", ret);
 
-    ret = IMultiLanguage2_GetLcidFromRfc1766(iML2, &lcid, en_us);
-    ok(ret == S_OK, "GetLcidFromRfc1766 returned: %08x\n", ret);
-    ok(lcid == 0x409, "got wrong lcid: %04x\n", lcid);
 }
 
 static void test_GetRfc1766FromLcid(IMultiLanguage2 *iML2)
-- 
1.5.4.3


--=-6FDjs1H7yf0V/X0zi6K5--




More information about the wine-patches mailing list