[PATCH v4 7/7] kernel32/tests: Test GetUserGeoID(), GetUserDefaultGeoName().

João Diogo Ferreira devilj at outlook.pt
Wed Oct 30 23:47:34 CDT 2019


Tests for SetUserGeoID() and SetUserGeoName() are not included,
since normal programs shouldn't call those anyway.

Signed-off-by: João Diogo Craveiro Ferreira <devilj at outlook.pt>
---
Supersedes: 172361
V4: Fix compiler warning (removed ARRAY_SIZE() from trace call).
---
 dlls/kernel32/tests/locale.c | 109 +++++++++++++++++++++++++++++++++++
 1 file changed, 109 insertions(+)

diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 81e74531ea..b40df611ca 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -98,6 +98,8 @@ static INT (WINAPI *pCompareStringEx)(LPCWSTR, DWORD, LPCWSTR, INT, LPCWSTR, INT
 static INT (WINAPI *pGetGeoInfoA)(GEOID, GEOTYPE, LPSTR, INT, LANGID);
 static INT (WINAPI *pGetGeoInfoW)(GEOID, GEOTYPE, LPWSTR, INT, LANGID);
 static BOOL (WINAPI *pEnumSystemGeoID)(GEOCLASS, GEOID, GEO_ENUMPROC);
+static GEOID (WINAPI *pGetUserGeoID)(GEOCLASS);
+static int (WINAPI *pGetUserDefaultGeoName)(WCHAR*, int);
 static BOOL (WINAPI *pGetSystemPreferredUILanguages)(DWORD, ULONG*, WCHAR*, ULONG*);
 static BOOL (WINAPI *pGetThreadPreferredUILanguages)(DWORD, ULONG*, WCHAR*, ULONG*);
 static BOOL (WINAPI *pGetUserPreferredUILanguages)(DWORD, ULONG*, WCHAR*, ULONG*);
@@ -136,6 +138,8 @@ static void InitFunctionPointers(void)
   X(GetGeoInfoA);
   X(GetGeoInfoW);
   X(EnumSystemGeoID);
+  X(GetUserGeoID);
+  X(GetUserDefaultGeoName);
   X(GetSystemPreferredUILanguages);
   X(GetThreadPreferredUILanguages);
   X(GetUserPreferredUILanguages);
@@ -4893,6 +4897,109 @@ static void test_EnumSystemGeoID(void)
     }
 }
 
+static void test_GetUserGeoID(void)
+{
+    GEOID id;
+
+    if (pGetUserDefaultGeoName)
+    {
+        ok(GEOID_NOT_AVAILABLE != GetUserGeoID(GEOCLASS_NATION),
+            "GEOCLASS_NATION: should never return GEOID_NOT_AVAILABLE in this platform.\n");
+        ok(GEOID_NOT_AVAILABLE != GetUserGeoID(GEOCLASS_REGION),
+            "GEOCLASS_REGION: should never return GEOID_NOT_AVAILABLE in this platform.\n");
+    }
+    else
+        win_skip("This platform allows returning GEOID_NOT_AVAILABLE on success.\n");
+
+    id = GetUserGeoID(GEOCLASS_ALL);
+    ok(id == GEOID_NOT_AVAILABLE,
+        "GEOCLASS_ALL: expected GEOID_NOT_AVAILABLE, got %d.\n", id);
+
+    id = GetUserGeoID(0xdeadbeef);
+    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;
+
+    if (!pGetUserDefaultGeoName)
+    {
+        win_skip("GetUserDefaultGeoName: not implemented on this platform.\n");
+        return;
+    }
+
+    SetLastError(ERROR_SUCCESS);
+    count = result = pGetUserDefaultGeoName(NULL, 0);
+    ok(result > 0,
+       "(NULL, 0): Expected ret > 0, got %d; last error was %d.\n",
+       result, GetLastError());
+
+    SetLastError(ERROR_SUCCESS);
+    result = pGetUserDefaultGeoName(name, 0);
+    ok(result == count,
+       "(buffer, 0): Expected ret to match previous result (%d), got %d; last error was %d.\n",
+       result, count, GetLastError());
+
+    SetLastError(ERROR_SUCCESS);
+    result = pGetUserDefaultGeoName(NULL, 10);
+    ok(result == 0 && (GetLastError() == ERROR_INVALID_PARAMETER),
+        "(NULL, 10): Expected ret=0, got %d; and expected last error = 87, got %d\n",
+        result, GetLastError());
+
+    SetLastError(ERROR_SUCCESS);
+    result = pGetUserDefaultGeoName(NULL, -1);
+    ok(result == 0 && (GetLastError() == ERROR_INVALID_PARAMETER),
+        "(NULL, -1): Expected ret=0, got %d; and expected last error = 87, got %d.\n",
+        result, GetLastError());
+
+    SetLastError(ERROR_SUCCESS);
+    result = pGetUserDefaultGeoName(name, 1);
+    ok(result == 0 && (GetLastError() == ERROR_INSUFFICIENT_BUFFER),
+        "(buffer, 1): Expected ret == 0, got %d; and expected last error = 122, got %d.\n",
+        result, GetLastError());
+
+    SetLastError(ERROR_SUCCESS);
+    result = pGetUserDefaultGeoName(name, -1);
+    ok(result == 0 && (GetLastError() == ERROR_INVALID_PARAMETER),
+        "(buffer, -1): Expected ret=0, got %d; and expected last error = 87, got %d.\n",
+        result, GetLastError());
+
+    if (count <= ARRAY_SIZE(name))
+    {
+        SetLastError(ERROR_SUCCESS);
+        result = pGetUserDefaultGeoName(name, count);
+        ok(result,
+           "(buffer, reported length): Expected non-zero ret, got otherwise with error = %d.\n",
+           GetLastError());
+        ok(result == count,
+           "(buffer, reported length): Expected charcount == %d, got %d; last error was %d.\n",
+        count, result, GetLastError());
+        ok(result == strlenW(name) + 1,
+           "(buffer, reported length): Expected string length to match ret (%d), got %d.\n",
+           result, strlenW(name) + 1);
+
+        if (count < ARRAY_SIZE(name))
+        {
+            SetLastError(ERROR_SUCCESS);
+            result = pGetUserDefaultGeoName(name, ARRAY_SIZE(name));
+            ok(result,
+               "(buffer, larger length): Expected non-zero ret, got otherwise with error = %d.\n",
+               GetLastError());
+            ok(result == count,
+               "(buffer, larger length): Expected charcount == %d, got %d; last error was %d.\n",
+            count, result, GetLastError());
+            ok(result == strlenW(name) + 1,
+               "(buffer, larger length): Expected string length to match ret (%d), got %d.\n",
+            result, strlenW(name) + 1);
+        }
+    }
+    else
+        skip("GetUserDefaultGeoName: string length (%d) too large to test.\n", count);
+}
+
 struct invariant_entry {
   const char *name;
   int id;
@@ -6048,6 +6155,8 @@ START_TEST(locale)
   test_IsValidLocaleName();
   test_CompareStringOrdinal();
   test_GetGeoInfo();
+  test_GetUserGeoID();
+  test_GetUserDefaultGeoName();
   test_EnumSystemGeoID();
   test_invariant();
   test_GetSystemPreferredUILanguages();
-- 
2.23.0



More information about the wine-devel mailing list