From 07b3c86f6b9abc1119dc0c3562d23443d79e68f1 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Wed, 7 May 2008 21:20:24 -0700 Subject: [PATCH] mlang: Fix more tests to pass under windows --- dlls/mlang/mlang.c | 11 ++++++++++- dlls/mlang/tests/mlang.c | 10 ++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/dlls/mlang/mlang.c b/dlls/mlang/mlang.c index a60ad70..36a2507 100644 --- a/dlls/mlang/mlang.c +++ b/dlls/mlang/mlang.c @@ -676,13 +676,22 @@ HRESULT WINAPI IsConvertINetStringAvailable( TRACE("%d %d\n", dwSrcEncoding, dwDstEncoding); + if (GetFamilyCodePage(dwSrcEncoding, &src_family) != S_OK || GetFamilyCodePage(dwDstEncoding, &dst_family) != S_OK) return S_FALSE; + /* TODO: Check if there is any character in one locale that's not available in the other */ if (src_family == dst_family) return S_OK; + FIXME("Partial stub\n"); + + /* we can convert any codepage to/from unicode, except not all will fit */ + if (((dwSrcEncoding == 20127 || dwDstEncoding == 20127) || + (dwSrcEncoding == 28591 || dwDstEncoding == 28591) || + (dwSrcEncoding == 28605 || dwDstEncoding == 28605)) && + (dwSrcEncoding == CP_UTF8 || dwDstEncoding == CP_UTF8)) + return S_FALSE; - /* we can convert any codepage to/from unicode */ if (src_family == CP_UNICODE || dst_family == CP_UNICODE) return S_OK; return S_FALSE; diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c index 1329081..1874e25 100644 --- a/dlls/mlang/tests/mlang.c +++ b/dlls/mlang/tests/mlang.c @@ -369,6 +369,12 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags) */ if (IsValidCodePage(cpinfo[i].uiCodePage)) { + HRESULT expected = S_OK; + + /* Not all codepages can be converted to UTF-8 */ + if (cpinfo[i].uiCodePage == 20127 || cpinfo[i].uiCodePage == 28591 || cpinfo[i].uiCodePage == 28605) + expected = S_FALSE; + TRACE_2("Call IMultiLanguage2_IsConvertible\n"); ret = IMultiLanguage2_IsConvertible(iML2, cpinfo[i].uiCodePage, CP_UNICODE); ok(ret == S_OK, "IMultiLanguage2_IsConvertible(%u -> CP_UNICODE) = %08x\n", cpinfo[i].uiCodePage, ret); @@ -378,10 +384,10 @@ static void test_EnumCodePages(IMultiLanguage2 *iML2, DWORD flags) 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 == expected, "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 == expected, "IMultiLanguage2_IsConvertible(CP_UTF8 -> %u) = %08x\n", cpinfo[i].uiCodePage, ret); } else trace("IsValidCodePage failed for cp %u\n", cpinfo[i].uiCodePage); -- 1.5.4.1