James Hawkins : mlang: Fix all test failures for NT+ platforms.

Alexandre Julliard julliard at winehq.org
Thu May 22 06:27:58 CDT 2008


Module: wine
Branch: master
Commit: 03a7ddb73c74e41916ba8da17dc4cd47d102d957
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=03a7ddb73c74e41916ba8da17dc4cd47d102d957

Author: James Hawkins <jhawkins at codeweavers.com>
Date:   Wed May 21 20:29:00 2008 -0500

mlang: Fix all test failures for NT+ platforms.

---

 dlls/mlang/tests/mlang.c |   62 +++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 59 insertions(+), 3 deletions(-)

diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c
index dcb8d7d..e826a01 100644
--- a/dlls/mlang/tests/mlang.c
+++ b/dlls/mlang/tests/mlang.c
@@ -266,6 +266,32 @@ static const char *dump_mime_flags(DWORD flags)
 }
 #endif
 
+static BOOL check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to)
+{
+    CHAR convert[MAX_PATH];
+    BYTE dest[MAX_PATH];
+    HRESULT hr;
+    UINT srcsz, destsz;
+
+    static WCHAR strW[] = {'a','b','c',0};
+
+    srcsz = -1;
+    destsz = MAX_PATH;
+    hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, from, strW,
+                                                  &srcsz, convert, &destsz);
+    if (hr != S_OK)
+        return FALSE;
+
+    srcsz = -1;
+    destsz = MAX_PATH;
+    hr = IMultiLanguage2_ConvertString(iML2, NULL, from, to, (BYTE *)convert,
+                                       &srcsz, dest, &destsz);
+    if (hr != S_OK)
+        return FALSE;
+
+    return TRUE;
+}
+
 static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
 {
     IEnumCodePage *iEnumCP = NULL;
@@ -327,6 +353,8 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
 	CPINFOEXA cpinfoex;
 	CHARSETINFO csi;
 	MIMECSETINFO mcsi;
+        BOOL convertible;
+        HRESULT check = S_OK;
 	static const WCHAR autoW[] = {'_','a','u','t','o',0};
 
 #ifdef DUMP_CP_INFO
@@ -387,12 +415,16 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
 	    ret = IMultiLanguage2_IsConvertible(iML2, CP_UNICODE, cpinfo[i].uiCodePage);
 	    ok(ret == S_OK, "IMultiLanguage2_IsConvertible(CP_UNICODE -> %u) = %08x\n", cpinfo[i].uiCodePage, ret);
 
+            convertible = check_convertible(iML2, cpinfo[i].uiCodePage, CP_UTF8);
+            if (!convertible)
+                check = S_FALSE;
+
 	    TRACE_2("Call IMultiLanguage2_IsConvertible\n");
 	    ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UTF8);
-	    ok(ret == S_OK, "IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08x\n", cpinfo[i].uiCodePage, ret);
+	    ok(ret == check, "IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08x\n", cpinfo[i].uiCodePage, ret);
 	    TRACE_2("Call IMultiLanguage2_IsConvertible\n");
 	    ret = IMultiLanguage2_IsConvertible(iML2, CP_UTF8, cpinfo[i].uiCodePage);
-	    ok(ret == S_OK, "IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n", cpinfo[i].uiCodePage, ret);
+	    ok(ret == check, "IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n", cpinfo[i].uiCodePage, ret);
 	}
 	else
 	    trace("IsValidCodePage failed for cp %u\n", cpinfo[i].uiCodePage);
@@ -665,12 +697,26 @@ static void IMLangFontLink_Test(IMLangFontLink* iMLFL)
     ok(CodePage == 1252, "Incorrect CodePage Returned (%i)\n",CodePage);
 }
 
+/* copied from libs/wine/string.c */
+WCHAR *strstrW(const WCHAR *str, const WCHAR *sub)
+{
+    while (*str)
+    {
+        const WCHAR *p1 = str, *p2 = sub;
+        while (*p1 && *p2 && *p1 == *p2) { p1++; p2++; }
+        if (!*p2) return (WCHAR *)str;
+        str++;
+    }
+    return NULL;
+}
+
 static void test_rfc1766(IMultiLanguage2 *iML2)
 {
     IEnumRfc1766 *pEnumRfc1766;
     RFC1766INFO info;
     ULONG n;
     HRESULT ret;
+    BSTR rfcstr;
 
     ret = IMultiLanguage2_EnumRfc1766(iML2, LANG_NEUTRAL, &pEnumRfc1766);
     ok(ret == S_OK, "IMultiLanguage2_EnumRfc1766 error %08x\n", ret);
@@ -686,7 +732,17 @@ static void test_rfc1766(IMultiLanguage2 *iML2)
 #endif
 
         ok(n == 1, "couldn't fetch 1 RFC1766INFO structure\n");
-        ok(IsValidLocale(info.lcid, LCID_SUPPORTED), "invalid lcid %04x\n", info.lcid);
+
+        /* verify the Rfc1766 value */
+        ret = IMultiLanguage2_GetRfc1766FromLcid(iML2, info.lcid, &rfcstr);
+        ok(ret == S_OK, "Expected S_OK, got %08x\n", ret);
+
+        /* not an exact 1:1 correspondence between lcid and rfc1766 in the
+         * mlang database, e.g., nb-no -> 1044 -> no */
+        ok(strstrW(info.wszRfc1766, rfcstr) != NULL,
+           "Expected matching locale names\n");
+
+        SysFreeString(rfcstr);
     }
     IEnumRfc1766_Release(pEnumRfc1766);
 }




More information about the wine-cvs mailing list