[PATCH 2/2 v2] kernel32/tests: Test GetUserGeoID, GetUserDefaultGeoName.

João Diogo Ferreira devilj at outlook.pt
Thu Oct 3 14:36:50 CDT 2019


Fixes from last version:
  - Removed testing for SetUserGeoID and SetUserGeoName;
  - Inverted if blocks to avoid long nesting blocks.

Good riddance to those two testing units, as they were a pain to write
and still failed on older Windows versions.
If someone thinks they're necessary, please contact me.

Signed-off-by: João Diogo Craveiro Ferreira <devilj at outlook.pt>
---
 dlls/kernel32/tests/locale.c | 86 ++++++++++++++++++++++++++++++++++++
 1 file changed, 86 insertions(+)

diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 81e74531ea..7527c36bb9 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -108,6 +108,8 @@ static LANGID (WINAPI *pSetThreadUILanguage)(LANGID);
 static LANGID (WINAPI *pGetThreadUILanguage)(VOID);
 static INT (WINAPI *pNormalizeString)(NORM_FORM, LPCWSTR, INT, LPWSTR, INT);
 static INT (WINAPI *pFindStringOrdinal)(DWORD, LPCWSTR lpStringSource, INT, LPCWSTR, INT, BOOL);
+static int (WINAPI *pGetUserDefaultGeoName)(LPWSTR, int);
+static BOOL (WINAPI *pSetUserGeoName)(PWSTR);
 
 static void InitFunctionPointers(void)
 {
@@ -145,6 +147,8 @@ static void InitFunctionPointers(void)
   X(GetThreadUILanguage);
   X(NormalizeString);
   X(FindStringOrdinal);
+  X(GetUserDefaultGeoName);
+  X(SetUserGeoName);
 
   mod = GetModuleHandleA("ntdll");
   X(RtlUpcaseUnicodeChar);
@@ -4745,6 +4749,86 @@ static void test_CompareStringOrdinal(void)
     }
 }
 
+static void test_GetUserGeoID(void)
+{
+    GEOID id;
+
+todo_wine {
+    if (pGetUserDefaultGeoName && pSetUserGeoName)
+    {
+        ok(GEOID_NOT_AVAILABLE != GetUserGeoID(GEOCLASS_NATION),
+            "GEOCLASS_NATION: should never return GEOID_NOT_AVAILABLE when GeoName API is available.\n");
+        ok(GEOID_NOT_AVAILABLE != GetUserGeoID(GEOCLASS_REGION),
+            "GEOCLASS_REGION: should never return GEOID_NOT_AVAILABLE when GeoName API is available.\n");
+    }
+    else
+        win_skip("This platform allows GEOID_NOT_AVAILABLE to be returned.\n");
+}
+
+    id = GetUserGeoID(GEOCLASS_ALL);
+    ok(id == GEOID_NOT_AVAILABLE,
+        "GEOCLASS_ALL: Expected GEOID_NOT_AVAILABLE, got %d.\n", id);
+    id = GetUserGeoID(12345);
+    ok(id == GEOID_NOT_AVAILABLE,
+        "Gibberish argument: Expected GEOID_NOT_AVAILABLE, got %d.\n", id);
+}
+
+static void test_GetUserDefaultGeoName(void)
+{
+    WCHAR name[10] = {0};
+    int result, count;
+
+todo_wine
+{
+    if (!(pGetUserDefaultGeoName && pSetUserGeoName))
+    {
+        todo_wine win_skip("GetUserDefaultGeoName: procedure not implemented on this platform.\n");
+        return;
+    }
+    SetLastError(ERROR_SUCCESS);
+    count = result = pGetUserDefaultGeoName(NULL, 0);
+    ok(result > 0, "Expected character count > 0, got %d; last error was %d.\n", result, GetLastError());
+
+    result = pGetUserDefaultGeoName(NULL, 10);
+    ok(result == 0 && (GetLastError() == ERROR_INVALID_PARAMETER),
+        "Expected ret=0, got %d; and expected last error = ERROR_INVALID_PARAMETER (87), got %d\n",
+        result, GetLastError());
+
+    result = pGetUserDefaultGeoName(NULL, -1);
+    ok(result == 0 && (GetLastError() == ERROR_INVALID_PARAMETER),
+        "Expected ret=0, got %d; and expected last error = ERROR_INVALID_PARAMETER (87), got %d\n",
+        result, GetLastError());
+
+    SetLastError(ERROR_SUCCESS);
+    result = pGetUserDefaultGeoName(name, 0);
+    ok(result > 0, "Expected character count > 0, got %d; last error was %d.\n", result, GetLastError());
+
+    result = pGetUserDefaultGeoName(name, 1);
+    ok(result == 0 && (GetLastError() == ERROR_INSUFFICIENT_BUFFER),
+        "Expected ret == 0, got %d; and expected last error = ERROR_INSUFFICIENT_BUFFER (122), got %d\n",
+        result, GetLastError());
+
+    result = pGetUserDefaultGeoName(name, -1);
+    ok(result == 0 && (GetLastError() == ERROR_INVALID_PARAMETER),
+        "Expected ret=0, got %d; and expected last error = ERROR_INVALID_PARAMETER (87), got %d\n",
+        result, GetLastError());
+
+    SetLastError(ERROR_SUCCESS);
+
+    ok(count <= 4, "Character count should never be higher than 4 (3 + null), got %d!\n", count);
+    if (count <= ARRAY_SIZE(name))
+    {
+        const int result = pGetUserDefaultGeoName(name, count);
+        ok(result,
+        "Expected character count == %d, got %d; last error was %d.\n",
+        count, result, GetLastError());
+    }
+    else
+        trace("Couldn't test successful operation since string is exceedingly large (%d > %lu).\n",
+            count, ARRAY_SIZE(name));
+}
+}
+
 static void test_GetGeoInfo(void)
 {
     char buffA[20];
@@ -6058,6 +6142,8 @@ START_TEST(locale)
   test_SetThreadUILanguage();
   test_NormalizeString();
   test_SpecialCasing();
+  test_GetUserGeoID();
+  test_GetUserDefaultGeoName();
   /* this requires collation table patch to make it MS compatible */
   if (0) test_sorting();
 }
-- 
2.23.0



More information about the wine-devel mailing list