[PATCH] mlang/tests: Add tests for LcidToRfc1766

Detlef Riekenberg wine.dev at web.de
Mon May 25 07:08:41 CDT 2009


---
 dlls/mlang/tests/mlang.c |   86 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 85 insertions(+), 1 deletions(-)

diff --git a/dlls/mlang/tests/mlang.c b/dlls/mlang/tests/mlang.c
index 00493b5..075e1f6 100644
--- a/dlls/mlang/tests/mlang.c
+++ b/dlls/mlang/tests/mlang.c
@@ -169,8 +169,11 @@ static const info_table_entry  info_table[] = {
     {MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_SWISS),    MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT),
          TODO_NAME, "de-ch", "Allemand (Suisse)"},
     {MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN), MAKELANGID(LANG_FRENCH, SUBLANG_DEFAULT),
-         TODO_NAME, "de-at", "Allemand (Autriche)"}
+         TODO_NAME, "de-at", "Allemand (Autriche)"},
 
+    /* language without a country */
+    {MAKELANGID(LANG_KONKANI, SUBLANG_DEFAULT),         MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT),
+         0, "kok", "Konkani"}
 };
 
 static BOOL init_function_ptrs(void)
@@ -1130,6 +1133,86 @@ static void test_GetRfc1766Info(IMultiLanguage2 *iML2)
     ok(ret == E_INVALIDARG, "got 0x%x (expected E_INVALIDARG)\n", ret);
 }
 
+static void test_LcidToRfc1766(void)
+{
+    CHAR buffer[MAX_RFC1766_NAME + 2];
+    HRESULT ret;
+    DWORD i;
+    INT x;
+
+    for(i = 0; i < sizeof(info_table) / sizeof(info_table[0]); i++) {
+        memset(buffer, 'x', sizeof(buffer) - 1);
+        buffer[sizeof(buffer) -1] = 0;
+
+        ret = LcidToRfc1766A(info_table[i].lcid, buffer, MAX_RFC1766_NAME);
+        ok(ret == S_OK, "#%02d: got 0x%x (expected S_OK)\n", i, ret);
+
+        x = lstrcmpA(buffer, info_table[i].rfc1766);
+        if (info_table[i].todo & TODO_RFC) {
+            todo_wine
+            ok(!x, "#%02d: got '%s' (expected '%s')\n", i, buffer, info_table[i].rfc1766);
+        }
+        else
+            ok(!x, "#%02d: got '%s' (expected '%s')\n", i, buffer, info_table[i].rfc1766);
+
+
+        if (info_table[i].todo & TODO_RFC) 
+            continue;
+
+        /* minimal size */
+        memset(buffer, 'x', sizeof(buffer) - 1);
+        buffer[sizeof(buffer) -1] = 0;
+        ret = LcidToRfc1766A(info_table[i].lcid, buffer, lstrlen(info_table[i].rfc1766) + 1);
+        ok(ret == S_OK, "#%02d: got 0x%x (expected S_OK)\n", i, ret);
+
+        ok(!lstrcmpA(buffer, info_table[i].rfc1766),
+            "#%02d: got '%s' (expected '%s')\n", i, buffer, info_table[i].rfc1766);
+
+        /* size to small for terminating zero (buffer has the data) */
+        memset(buffer, 'x', sizeof(buffer) - 1);
+        buffer[sizeof(buffer) -1] = 0;
+        ret = LcidToRfc1766A(info_table[i].lcid, buffer, lstrlen(info_table[i].rfc1766));
+        ok(ret == E_INVALIDARG, "got 0x%x (expected E_INVALIDARG)\n", ret);
+
+        /* size to small for the data (buffer has partial data) */
+        memset(buffer, 'x', sizeof(buffer) - 1);
+        buffer[sizeof(buffer) -1] = 0;
+        ret = LcidToRfc1766A(info_table[i].lcid, buffer, lstrlen(info_table[i].rfc1766) - 1);
+        ok(ret == E_INVALIDARG, "got 0x%x (expected E_INVALIDARG)\n", ret);
+
+    }
+
+    /* SUBLANG_NEUTRAL is allowed */
+    memset(buffer, 'x', sizeof(buffer) - 1);
+    buffer[sizeof(buffer) -1] = 0;
+    ret = LcidToRfc1766A(MAKELANGID(LANG_GERMAN, SUBLANG_NEUTRAL), buffer, MAX_RFC1766_NAME);
+    ok(ret == S_OK, "got 0x%x (expected S_OK)\n", ret);
+    ok (!lstrcmpA(buffer, "de-de"), "got '%s' (expected 'de-de')\n", buffer);
+
+    memset(buffer, 'x', sizeof(buffer) - 1);
+    buffer[sizeof(buffer) -1] = 0;
+    ret = LcidToRfc1766A(MAKELANGID(LANG_ITALIAN, SUBLANG_NEUTRAL), buffer, MAX_RFC1766_NAME);
+    ok(ret == S_OK, "got 0x%x (expected S_OK)\n", ret);
+    ok (!lstrcmpA(buffer, "it-it"), "got '%s' (expected 'it-it')\n", buffer);
+
+    /* result depend on the current locale */
+    memset(buffer, 'x', sizeof(buffer) - 1);
+    buffer[sizeof(buffer) -1] = 0;
+    ret = LcidToRfc1766A(0, buffer, MAX_RFC1766_NAME);
+    ok(ret == S_OK, "got 0x%x (expected S_OK)\n", ret);
+
+    /* we neeed a pointer */
+    ret = LcidToRfc1766A(LANG_ENGLISH, NULL, MAX_RFC1766_NAME);
+    ok(ret == E_INVALIDARG, "got 0x%x (expected E_INVALIDARG)\n", ret);
+
+    /* max len is signed */
+    ret = LcidToRfc1766A(LANG_ENGLISH, buffer, -1);
+    ok(ret == E_INVALIDARG, "got 0x%x (expected E_INVALIDARG)\n", ret);
+
+    ret = LcidToRfc1766A(LANG_ENGLISH, buffer, 0);
+    ok(ret == E_INVALIDARG, "got 0x%x (expected E_INVALIDARG)\n", ret);
+}
+
 
 static void test_IMultiLanguage2_ConvertStringFromUnicode(IMultiLanguage2 *iML2)
 {
@@ -1693,6 +1776,7 @@ START_TEST(mlang)
 
     CoInitialize(NULL);
     test_Rfc1766ToLcid();
+    test_LcidToRfc1766();
 
     ret = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER,
                            &IID_IMultiLanguage2, (void **)&iML2);
-- 
1.5.4.3


--=-UMuzRaXnYM4j85tONKWq--




More information about the wine-patches mailing list