More NLS updates (tests)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Tests for kernel NLS updates in the last patch. These pass on XP and
Linux.

Cheers,
Jon

Changelog:

  Jon Griffiths <jon_p_griffiths@yahoo.com>
 +dlls/kernel/tests/locale.c
    More locale tests


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com
diff -u wine/dlls/kernel/tests/locale.c wine-develop-old/dlls/kernel/tests/locale.c
--- wine/dlls/kernel/tests/locale.c	2003-09-23 19:44:39.000000000 +0100
+++ wine-develop-old/dlls/kernel/tests/locale.c	2003-09-24 00:11:44.000000000 +0100
@@ -33,6 +33,28 @@
 #include "winerror.h"
 #include "winnls.h"
 
+/* Some functions are only in later versions of kernel32.dll */
+static HMODULE hKernel32;
+
+typedef BOOL (WINAPI *EnumSystemLanguageGroupsAFn)(LANGUAGEGROUP_ENUMPROC,
+                                                   DWORD, LONG_PTR);
+static EnumSystemLanguageGroupsAFn pEnumSystemLanguageGroupsA;
+typedef BOOL (WINAPI *EnumLanguageGroupLocalesAFn)(LANGGROUPLOCALE_ENUMPROC,
+                                                   LGRPID, DWORD, LONG_PTR);
+static EnumLanguageGroupLocalesAFn pEnumLanguageGroupLocalesA;
+
+
+static void InitFunctionPointers(void)
+{
+  hKernel32 = GetModuleHandleA("kernel32");
+
+  if (hKernel32)
+  {
+    pEnumSystemLanguageGroupsA = (void*)GetProcAddress(hKernel32, "EnumSystemLanguageGroupsA");
+	pEnumLanguageGroupLocalesA = (void*)GetProcAddress(hKernel32, "EnumLanguageGroupLocalesA");
+  }
+}
+
 #define eq(received, expected, label, type) \
         ok((received) == (expected), "%s: got " type " instead of " type "\n", \
            (label), (received), (expected))
@@ -1017,8 +1039,152 @@
     ok(!lstrcmpW(buf, symbols_stripped), "string comparison mismatch\n");
 }
 
+#define LCID_OK(l) \
+  ok(lcid == l, "Expected lcid = %08lx, got %08lx\n", l, lcid)
+#define MKLCID(x,y,z) MAKELCID(MAKELANGID(x, y), z)
+#define LCID_RES(src, res) lcid = ConvertDefaultLocale(src); LCID_OK(res)
+#define TEST_LCIDLANG(a,b) LCID_RES(MAKELCID(a,b), MAKELCID(a,b))
+#define TEST_LCID(a,b,c) LCID_RES(MKLCID(a,b,c), MKLCID(a,b,c))
+
+static void test_ConvertDefaultLocale(void)
+{
+  LCID lcid;
+
+  /* Doesn't change lcid, even if non default sublang/sort used */
+  TEST_LCID(LANG_ENGLISH,  SUBLANG_ENGLISH_US, SORT_DEFAULT);
+  TEST_LCID(LANG_ENGLISH,  SUBLANG_ENGLISH_UK, SORT_DEFAULT);
+  TEST_LCID(LANG_JAPANESE, SUBLANG_DEFAULT,    SORT_DEFAULT);
+  TEST_LCID(LANG_JAPANESE, SUBLANG_DEFAULT,    SORT_JAPANESE_UNICODE);
+
+  /* SUBLANG_NEUTRAL -> SUBLANG_DEFAULT */
+  LCID_RES(MKLCID(LANG_ENGLISH,  SUBLANG_NEUTRAL, SORT_DEFAULT),
+           MKLCID(LANG_ENGLISH,  SUBLANG_DEFAULT, SORT_DEFAULT));
+  LCID_RES(MKLCID(LANG_JAPANESE, SUBLANG_NEUTRAL, SORT_DEFAULT),
+           MKLCID(LANG_JAPANESE, SUBLANG_DEFAULT, SORT_DEFAULT));
+  LCID_RES(MKLCID(LANG_JAPANESE, SUBLANG_NEUTRAL, SORT_JAPANESE_UNICODE),
+           MKLCID(LANG_JAPANESE, SUBLANG_DEFAULT, SORT_JAPANESE_UNICODE));
+
+  /* Invariant language is not treated specially */
+  TEST_LCID(LANG_INVARIANT, SUBLANG_DEFAULT, SORT_DEFAULT);
+  LCID_RES(MKLCID(LANG_INVARIANT, SUBLANG_NEUTRAL, SORT_DEFAULT),
+           MKLCID(LANG_INVARIANT, SUBLANG_DEFAULT, SORT_DEFAULT));
+
+  /* User/system default languages alone are not mapped */
+  TEST_LCIDLANG(LANG_SYSTEM_DEFAULT, SORT_JAPANESE_UNICODE);
+  TEST_LCIDLANG(LANG_USER_DEFAULT,   SORT_JAPANESE_UNICODE);
+
+  /* Default lcids */
+  LCID_RES(LOCALE_SYSTEM_DEFAULT, GetSystemDefaultLCID());
+  LCID_RES(LOCALE_USER_DEFAULT,   GetUserDefaultLCID());
+  LCID_RES(LOCALE_NEUTRAL,        GetUserDefaultLCID());
+}
+
+static BOOL CALLBACK langgrp_procA(LGRPID lgrpid, LPSTR lpszNum, LPSTR lpszName,
+                                    DWORD dwFlags, LONG_PTR lParam)
+{
+  trace("%08lx, %s, %s, %08lx, %08lx\n",
+        lgrpid, lpszNum, lpszName, dwFlags, lParam);
+
+  ok(IsValidLanguageGroup(lgrpid, dwFlags) == TRUE,
+     "Enumerated grp %ld not valid (flags %ld)\n", lgrpid, dwFlags);
+
+  /* If lParam is one, we are calling with flags defaulted from 0 */
+  ok(!lParam || dwFlags == LGRPID_INSTALLED,
+	 "Expected dwFlags == LGRPID_INSTALLED, got %ld\n", dwFlags);
+
+  return TRUE;
+}
+
+static void test_EnumSystemLanguageGroupsA(void)
+{
+  if (!pEnumSystemLanguageGroupsA)
+    return;
+
+  /* No enumeration proc */
+  SetLastError(0);
+  pEnumSystemLanguageGroupsA(0, LGRPID_INSTALLED, 0);
+  EXPECT_INVALID;
+
+  /* Invalid flags */
+  SetLastError(0);
+  pEnumSystemLanguageGroupsA(langgrp_procA, LGRPID_INSTALLED|LGRPID_SUPPORTED, 0);
+  EXPECT_FLAGS;
+
+  /* No flags - defaults to LGRPID_INSTALLED */
+  SetLastError(0);
+  pEnumSystemLanguageGroupsA(langgrp_procA, 0, 1);
+  EXPECT_VALID;
+
+  pEnumSystemLanguageGroupsA(langgrp_procA, LGRPID_INSTALLED, 0);
+  pEnumSystemLanguageGroupsA(langgrp_procA, LGRPID_SUPPORTED, 0);
+}
+
+
+static BOOL CALLBACK lgrplocale_procA(LGRPID lgrpid, LCID lcid, LPSTR lpszNum,
+                                      LONG_PTR lParam)
+{
+  trace("%08lx, %08lx, %s, %08lx\n", lgrpid, lcid, lpszNum, lParam);
+
+  ok(IsValidLanguageGroup(lgrpid, LGRPID_SUPPORTED) == TRUE,
+     "Enumerated grp %ld not valid\n", lgrpid);
+  ok(IsValidLocale(lcid, LCID_SUPPORTED) == TRUE,
+     "Enumerated grp locale %ld not valid\n", lcid);
+  return TRUE;
+}
+
+static void test_EnumLanguageGroupLocalesA(void)
+{
+  if (!pEnumLanguageGroupLocalesA)
+   return;
+
+  /* No enumeration proc */
+  SetLastError(0);
+  pEnumLanguageGroupLocalesA(0, LGRPID_WESTERN_EUROPE, 0, 0);
+  EXPECT_INVALID;
+
+  /* lgrpid too small */
+  SetLastError(0);
+  pEnumLanguageGroupLocalesA(lgrplocale_procA, 0, 0, 0);
+  EXPECT_INVALID;
+
+  /* lgrpid too big */
+  SetLastError(0);
+  pEnumLanguageGroupLocalesA(lgrplocale_procA, LGRPID_ARMENIAN + 1, 0, 0);
+  EXPECT_INVALID;
+
+  /* dwFlags is reserved */
+  SetLastError(0);
+  pEnumLanguageGroupLocalesA(0, LGRPID_WESTERN_EUROPE, 0x1, 0);
+  EXPECT_INVALID;
+
+  pEnumLanguageGroupLocalesA(lgrplocale_procA, LGRPID_WESTERN_EUROPE, 0, 0);
+}
+
+static void test_SetLocaleInfoA(void)
+{
+  BOOL bRet;
+  LCID lcid = GetUserDefaultLCID();
+
+  /* Null data */
+  SetLastError(0);
+  bRet = SetLocaleInfoA(lcid, LOCALE_SDATE, 0);
+  EXPECT_INVALID;
+
+  /* IDATE */
+  SetLastError(0);
+  bRet = SetLocaleInfoA(lcid, LOCALE_IDATE, (LPSTR)test_SetLocaleInfoA);
+  EXPECT_FLAGS;
+
+  /* ILDATE */
+  SetLastError(0);
+  bRet = SetLocaleInfoA(lcid, LOCALE_ILDATE, (LPSTR)test_SetLocaleInfoA);
+  EXPECT_FLAGS;
+}
+
 START_TEST(locale)
 {
+  InitFunctionPointers();
+
 #if 0
   test_EnumTimeFormats();
 #endif
@@ -1031,4 +1197,8 @@
   test_CompareStringA();
   test_LCMapStringA();
   test_LCMapStringW();
+  test_ConvertDefaultLocale();
+  test_EnumSystemLanguageGroupsA();
+  test_EnumLanguageGroupLocalesA();
+  test_SetLocaleInfoA();
 }

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux