Aric Stewart : mlang/tests: Make sure a given codepage has 'abc' before depending on that conversion to detect if a codepage is convertable .

Alexandre Julliard julliard at winehq.org
Fri Oct 10 08:06:28 CDT 2008


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

Author: Aric Stewart <aric at codeweavers.com>
Date:   Thu Oct  9 08:40:39 2008 -0500

mlang/tests: Make sure a given codepage has 'abc' before depending on that conversion to detect if a codepage is convertable.

---

 dlls/mlang/tests/mlang.c |   41 ++++++++++++++++++++++++++++-------------
 1 files changed, 28 insertions(+), 13 deletions(-)

diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c
index a1e5793..f42836d 100644
--- a/dlls/mlang/tests/mlang.c
+++ b/dlls/mlang/tests/mlang.c
@@ -250,7 +250,7 @@ static const char *dump_mime_flags(DWORD flags)
 }
 #endif
 
-static BOOL check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to)
+static HRESULT check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to)
 {
     CHAR convert[MAX_PATH];
     BYTE dest[MAX_PATH];
@@ -259,21 +259,37 @@ static BOOL check_convertible(IMultiLanguage2 *iML2, UINT from, UINT to)
 
     static WCHAR strW[] = {'a','b','c',0};
 
+    /* Check to see if the target codepage has these characters or not */
+    if (from != CP_UTF8)
+    {
+        BOOL fDefaultChar;
+        char ch[10];
+        int cb;
+        cb = WideCharToMultiByte( from, WC_NO_BEST_FIT_CHARS | WC_COMPOSITECHECK | WC_DEFAULTCHAR,
+                                  strW, 3, ch, sizeof(ch), NULL, &fDefaultChar);
+
+        if(cb == 0 || fDefaultChar)
+        {
+            trace("target codepage %i does not contain 'abc'\n",from);
+            return E_FAIL;
+        }
+    }
+
     srcsz = lstrlenW(strW) + 1;
     destsz = MAX_PATH;
     hr = IMultiLanguage2_ConvertStringFromUnicode(iML2, NULL, from, strW,
                                                   &srcsz, convert, &destsz);
     if (hr != S_OK)
-        return FALSE;
+        return S_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 S_FALSE;
 
-    return TRUE;
+    return S_OK;
 }
 
 static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
@@ -333,8 +349,7 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
     {
 	CHARSETINFO csi;
 	MIMECSETINFO mcsi;
-        BOOL convertible;
-        HRESULT check = S_OK;
+        HRESULT convertible = S_OK;
 	static const WCHAR autoW[] = {'_','a','u','t','o',0};
 	static const WCHAR feffW[] = {'u','n','i','c','o','d','e','F','E','F','F',0};
 
@@ -386,13 +401,13 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags)
 	    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;
-
-	    ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UTF8);
-	    ok(ret == check, "IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08x\n", cpinfo[i].uiCodePage, ret);
-	    ret = IMultiLanguage2_IsConvertible(iML2, CP_UTF8, cpinfo[i].uiCodePage);
-	    ok(ret == check, "IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n", cpinfo[i].uiCodePage, ret);
+            if (convertible != E_FAIL)
+            {
+                ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UTF8);
+                ok(ret == convertible, "IMultiLanguage2_IsConvertible(%u -> CP_UTF8) = %08x\n", cpinfo[i].uiCodePage, ret);
+                ret = IMultiLanguage2_IsConvertible(iML2, CP_UTF8, cpinfo[i].uiCodePage);
+                ok(ret == convertible, "IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n", cpinfo[i].uiCodePage, ret);
+            }
 	}
 	else
 	    trace("IsValidCodePage failed for cp %u\n", cpinfo[i].uiCodePage);




More information about the wine-cvs mailing list