[PATCH 2/3] Add more MRU tests
Nikolay Sivov
nsivov at codeweavers.com
Mon May 2 07:47:41 CDT 2011
---
dlls/comctl32/tests/mru.c | 283 +++++++++++++++++++++++++++++++++++++++------
1 files changed, 247 insertions(+), 36 deletions(-)
diff --git a/dlls/comctl32/tests/mru.c b/dlls/comctl32/tests/mru.c
index 11f696f..fab30c1 100644
--- a/dlls/comctl32/tests/mru.c
+++ b/dlls/comctl32/tests/mru.c
@@ -48,6 +48,16 @@ typedef struct tagMRUINFOA
PROC lpfnCompare;
} MRUINFOA;
+typedef struct tagMRUINFOW
+{
+ DWORD cbSize;
+ UINT uMax;
+ UINT fFlags;
+ HKEY hKey;
+ LPCWSTR lpszSubKey;
+ PROC lpfnCompare;
+} MRUINFOW;
+
#define MRU_STRING 0 /* this one's invented */
#define MRU_BINARY 1
#define MRU_CACHEWRITE 2
@@ -68,26 +78,26 @@ static HMODULE hComctl32;
static HANDLE (WINAPI *pCreateMRUListA)(MRUINFOA*);
static void (WINAPI *pFreeMRUList)(HANDLE);
static INT (WINAPI *pAddMRUStringA)(HANDLE,LPCSTR);
-static INT (WINAPI *pEnumMRUList)(HANDLE,INT,LPVOID,DWORD);
+static INT (WINAPI *pEnumMRUListA)(HANDLE,INT,LPVOID,DWORD);
static INT (WINAPI *pEnumMRUListW)(HANDLE,INT,LPVOID,DWORD);
static HANDLE (WINAPI *pCreateMRUListLazyA)(MRUINFOA*, DWORD, DWORD, DWORD);
+static HANDLE (WINAPI *pCreateMRUListLazyW)(MRUINFOW*, DWORD, DWORD, DWORD);
static INT (WINAPI *pFindMRUData)(HANDLE, LPCVOID, DWORD, LPINT);
static INT (WINAPI *pAddMRUData)(HANDLE, LPCVOID, DWORD);
-/*
-static INT (WINAPI *pFindMRUStringA)(HANDLE,LPCSTR,LPINT);
-*/
-
+static HANDLE (WINAPI *pCreateMRUListW)(MRUINFOW*);
static void InitPointers(void)
{
pCreateMRUListA = (void*)GetProcAddress(hComctl32,(LPCSTR)151);
pFreeMRUList = (void*)GetProcAddress(hComctl32,(LPCSTR)152);
pAddMRUStringA = (void*)GetProcAddress(hComctl32,(LPCSTR)153);
- pEnumMRUList = (void*)GetProcAddress(hComctl32,(LPCSTR)154);
+ pEnumMRUListA = (void*)GetProcAddress(hComctl32,(LPCSTR)154);
pCreateMRUListLazyA = (void*)GetProcAddress(hComctl32,(LPCSTR)157);
pAddMRUData = (void*)GetProcAddress(hComctl32,(LPCSTR)167);
pFindMRUData = (void*)GetProcAddress(hComctl32,(LPCSTR)169);
+ pCreateMRUListW = (void*)GetProcAddress(hComctl32,(LPCSTR)400);
pEnumMRUListW = (void*)GetProcAddress(hComctl32,(LPCSTR)403);
+ pCreateMRUListLazyW = (void*)GetProcAddress(hComctl32,(LPCSTR)404);
}
/* Based on RegDeleteTreeW from dlls/advapi32/registry.c */
@@ -239,11 +249,12 @@ static HANDLE create_mruA(HKEY hKey, UINT flags, PROC cmp)
static void test_MRUListA(void)
{
const char *checks[LIST_SIZE+1];
+ MRUINFOA infoA;
HANDLE hMRU;
HKEY hKey;
INT iRet;
- if (!pCreateMRUListA || !pFreeMRUList || !pAddMRUStringA || !pEnumMRUList)
+ if (!pCreateMRUListA || !pFreeMRUList || !pAddMRUStringA || !pEnumMRUListA)
{
skip("MRU entry points not found\n");
return;
@@ -255,42 +266,75 @@ static void test_MRUListA(void)
hMRU = pCreateMRUListA(NULL);
}
- /* Create (size too small) */
- mruA.cbSize = sizeof(mruA) - 2;
- hMRU = create_mruA(NULL, MRU_STRING, (PROC)cmp_mru_strA);
+ /* size too small */
+ infoA.cbSize = sizeof(infoA) - 2;
+ infoA.uMax = LIST_SIZE;
+ infoA.fFlags = MRU_STRING;
+ infoA.hKey = NULL;
+ infoA.lpszSubKey = REG_TEST_SUBKEYA;
+ infoA.lpfnCompare = (PROC)cmp_mru_strA;
+
+ SetLastError(0);
+ hMRU = pCreateMRUListA(&infoA);
ok (!hMRU && !GetLastError(),
"CreateMRUListA(too small) expected NULL,0 got %p,%d\n",
hMRU, GetLastError());
- mruA.cbSize = sizeof(mruA);
- /* Create (size too big) */
- mruA.cbSize = sizeof(mruA) + 2;
- hMRU = create_mruA(NULL, MRU_STRING, (PROC)cmp_mru_strA);
+ /* size too big */
+ infoA.cbSize = sizeof(infoA) + 2;
+ infoA.uMax = LIST_SIZE;
+ infoA.fFlags = MRU_STRING;
+ infoA.hKey = NULL;
+ infoA.lpszSubKey = REG_TEST_SUBKEYA;
+ infoA.lpfnCompare = (PROC)cmp_mru_strA;
+
+ SetLastError(0);
+ hMRU = pCreateMRUListA(&infoA);
ok (!hMRU && !GetLastError(),
"CreateMRUListA(too big) expected NULL,0 got %p,%d\n",
hMRU, GetLastError());
- mruA.cbSize = sizeof(mruA);
- /* Create (NULL hKey) */
- hMRU = create_mruA(NULL, MRU_STRING, (PROC)cmp_mru_strA);
+ /* NULL hKey */
+ infoA.cbSize = sizeof(infoA);
+ infoA.uMax = LIST_SIZE;
+ infoA.fFlags = MRU_STRING;
+ infoA.hKey = NULL;
+ infoA.lpszSubKey = REG_TEST_SUBKEYA;
+ infoA.lpfnCompare = (PROC)cmp_mru_strA;
+
+ SetLastError(0);
+ hMRU = pCreateMRUListA(&infoA);
ok (!hMRU && !GetLastError(),
"CreateMRUListA(NULL key) expected NULL,0 got %p,%d\n",
hMRU, GetLastError());
- /* Create (NULL name) */
- mruA.lpszSubKey = NULL;
- hMRU = create_mruA(NULL, MRU_STRING, (PROC)cmp_mru_strA);
+ /* NULL subkey name */
+ infoA.cbSize = sizeof(infoA);
+ infoA.uMax = LIST_SIZE;
+ infoA.fFlags = MRU_STRING;
+ infoA.hKey = NULL;
+ infoA.lpszSubKey = NULL;
+ infoA.lpfnCompare = (PROC)cmp_mru_strA;
+
+ SetLastError(0);
+ hMRU = pCreateMRUListA(&infoA);
ok (!hMRU && !GetLastError(),
"CreateMRUListA(NULL name) expected NULL,0 got %p,%d\n",
hMRU, GetLastError());
- mruA.lpszSubKey = REG_TEST_SUBKEYA;
/* Create a string MRU */
ok(!RegCreateKeyA(HKEY_CURRENT_USER, REG_TEST_KEYA, &hKey),
"Couldn't create test key \"%s\"\n", REG_TEST_KEYA);
- if (!hKey)
- return;
- hMRU = create_mruA(hKey, MRU_STRING, (PROC)cmp_mru_strA);
+ if (!hKey) return;
+
+ infoA.cbSize = sizeof(infoA);
+ infoA.uMax = LIST_SIZE;
+ infoA.fFlags = MRU_STRING;
+ infoA.hKey = hKey;
+ infoA.lpszSubKey = REG_TEST_SUBKEYA;
+ infoA.lpfnCompare = (PROC)cmp_mru_strA;
+
+ hMRU = pCreateMRUListA(&infoA);
ok(hMRU && !GetLastError(),
"CreateMRUListA(string) expected non-NULL,0 got %p,%d\n",
hMRU, GetLastError());
@@ -363,28 +407,28 @@ static void test_MRUListA(void)
check_reg_entries("abc", checks);
/* NULL buffer = get list size */
- iRet = pEnumMRUList(hMRU, 0, NULL, 0);
+ iRet = pEnumMRUListA(hMRU, 0, NULL, 0);
ok(iRet == 3 || iRet == -1 /* Vista */, "EnumMRUList expected %d or -1, got %d\n", LIST_SIZE, iRet);
/* negative item pos = get list size */
- iRet = pEnumMRUList(hMRU, -1, NULL, 0);
+ iRet = pEnumMRUListA(hMRU, -1, NULL, 0);
ok(iRet == 3 || iRet == -1 /* Vista */, "EnumMRUList expected %d or -1, got %d\n", LIST_SIZE, iRet);
/* negative item pos = get list size */
- iRet = pEnumMRUList(hMRU, -5, NULL, 0);
+ iRet = pEnumMRUListA(hMRU, -5, NULL, 0);
ok(iRet == 3 || iRet == -1 /* Vista */, "EnumMRUList expected %d or -1, got %d\n", LIST_SIZE, iRet);
/* negative item pos = get list size */
- iRet = pEnumMRUList(hMRU, -1, buffer, 255);
+ iRet = pEnumMRUListA(hMRU, -1, buffer, 255);
ok(iRet == 3, "EnumMRUList expected %d, got %d\n", LIST_SIZE, iRet);
/* negative item pos = get list size */
- iRet = pEnumMRUList(hMRU, -5, buffer, 255);
+ iRet = pEnumMRUListA(hMRU, -5, buffer, 255);
ok(iRet == 3, "EnumMRUList expected %d, got %d\n", LIST_SIZE, iRet);
/* check entry 0 */
buffer[0] = 0;
- iRet = pEnumMRUList(hMRU, 0, buffer, 255);
+ iRet = pEnumMRUListA(hMRU, 0, buffer, 255);
ok(iRet == lstrlen(checks[3]), "EnumMRUList expected %d, got %d\n", lstrlen(checks[3]), iRet);
ok(strcmp(buffer, checks[3]) == 0, "EnumMRUList expected %s, got %s\n", checks[3], buffer);
@@ -393,7 +437,7 @@ static void test_MRUListA(void)
buffer[1] = 'A'; /* overwritten with 0 */
buffer[2] = 'A'; /* unchanged */
buffer[3] = 0; /* unchanged */
- iRet = pEnumMRUList(hMRU, 0, buffer, 2);
+ iRet = pEnumMRUListA(hMRU, 0, buffer, 2);
ok(iRet == lstrlen(checks[3]), "EnumMRUList expected %d, got %d\n", lstrlen(checks[3]), iRet);
ok(strcmp(buffer, "T") == 0, "EnumMRUList expected %s, got %s\n", "T", buffer);
/* make sure space after buffer has old values */
@@ -401,19 +445,19 @@ static void test_MRUListA(void)
/* check entry 1 */
buffer[0] = 0;
- iRet = pEnumMRUList(hMRU, 1, buffer, 255);
+ iRet = pEnumMRUListA(hMRU, 1, buffer, 255);
ok(iRet == lstrlen(checks[1]), "EnumMRUList expected %d, got %d\n", lstrlen(checks[1]), iRet);
ok(strcmp(buffer, checks[1]) == 0, "EnumMRUList expected %s, got %s\n", checks[1], buffer);
/* check entry 2 */
buffer[0] = 0;
- iRet = pEnumMRUList(hMRU, 2, buffer, 255);
+ iRet = pEnumMRUListA(hMRU, 2, buffer, 255);
ok(iRet == lstrlen(checks[2]), "EnumMRUList expected %d, got %d\n", lstrlen(checks[2]), iRet);
ok(strcmp(buffer, checks[2]) == 0, "EnumMRUList expected %s, got %s\n", checks[2], buffer);
/* check out of bounds entry 3 */
strcpy(buffer, "dummy");
- iRet = pEnumMRUList(hMRU, 3, buffer, 255);
+ iRet = pEnumMRUListA(hMRU, 3, buffer, 255);
ok(iRet == -1, "EnumMRUList expected %d, got %d\n", -1, iRet);
ok(strcmp(buffer, "dummy") == 0, "EnumMRUList expected unchanged buffer %s, got %s\n", "dummy", buffer);
@@ -462,7 +506,7 @@ static void test_CreateMRUListLazyA(void)
static void test_EnumMRUList(void)
{
- if (!pEnumMRUList || !pEnumMRUListW)
+ if (!pEnumMRUListA || !pEnumMRUListW)
{
win_skip("EnumMRUListA/EnumMRUListW entry point not found\n");
return;
@@ -472,7 +516,7 @@ static void test_EnumMRUList(void)
if (0)
{
/* crashes on NT4, passed on Win2k, XP, 2k3, Vista, 2k8 */
- pEnumMRUList(NULL, 0, NULL, 0);
+ pEnumMRUListA(NULL, 0, NULL, 0);
pEnumMRUListW(NULL, 0, NULL, 0);
}
}
@@ -507,6 +551,171 @@ static void test_AddMRUData(void)
ok(iRet == -1, "AddMRUData expected -1, got %d\n", iRet);
}
+static void test_CreateMRUListW(void)
+{
+ static const WCHAR mrutestW[] = {'M','R','U','T','e','s','t',0};
+ MRUINFOW infoW;
+ void *named;
+ HKEY hKey;
+ HANDLE hMru;
+
+ if (!pCreateMRUListW)
+ {
+ win_skip("CreateMRUListW entry point not found\n");
+ return;
+ }
+
+ /* exported by name too on recent versions */
+ named = GetProcAddress(hComctl32, "CreateMRUListW");
+ if (named)
+ ok(named == pCreateMRUListW, "got %p, expected %p\n", named, pCreateMRUListW);
+
+ ok(!RegCreateKeyA(HKEY_CURRENT_USER, REG_TEST_KEYA, &hKey),
+ "Couldn't create test key \"%s\"\n", REG_TEST_KEYA);
+
+ infoW.cbSize = sizeof(infoW);
+ infoW.uMax = 1;
+ infoW.fFlags = 0;
+ infoW.lpszSubKey = mrutestW;
+ infoW.hKey = hKey;
+ infoW.lpfnCompare = NULL;
+
+ hMru = pCreateMRUListW(&infoW);
+ ok(hMru != NULL, "got %p\n", hMru);
+ pFreeMRUList(hMru);
+
+ /* smaller size */
+ infoW.cbSize = sizeof(infoW) - 1;
+ infoW.uMax = 1;
+ infoW.fFlags = 0;
+ infoW.lpszSubKey = mrutestW;
+ infoW.hKey = hKey;
+ infoW.lpfnCompare = NULL;
+
+ hMru = pCreateMRUListW(&infoW);
+ todo_wine ok(hMru != NULL, "got %p\n", hMru);
+ pFreeMRUList(hMru);
+
+ /* increased size */
+ infoW.cbSize = sizeof(infoW) + 1;
+ infoW.uMax = 1;
+ infoW.fFlags = 0;
+ infoW.lpszSubKey = mrutestW;
+ infoW.hKey = hKey;
+ infoW.lpfnCompare = NULL;
+
+ hMru = pCreateMRUListW(&infoW);
+ todo_wine ok(hMru != NULL, "got %p\n", hMru);
+ pFreeMRUList(hMru);
+
+ /* zero size */
+ infoW.cbSize = 0;
+ infoW.uMax = 1;
+ infoW.fFlags = 0;
+ infoW.lpszSubKey = mrutestW;
+ infoW.hKey = hKey;
+ infoW.lpfnCompare = NULL;
+
+ hMru = pCreateMRUListW(&infoW);
+ todo_wine ok(hMru != NULL, "got %p\n", hMru);
+ pFreeMRUList(hMru);
+
+ /* NULL hKey */
+ infoW.cbSize = sizeof(infoW);
+ infoW.uMax = 1;
+ infoW.fFlags = 0;
+ infoW.lpszSubKey = mrutestW;
+ infoW.hKey = NULL;
+ infoW.lpfnCompare = NULL;
+
+ hMru = pCreateMRUListW(&infoW);
+ ok(hMru == NULL, "got %p\n", hMru);
+
+ RegCloseKey(hKey);
+}
+
+static void test_CreateMRUListLazyW(void)
+{
+ static const WCHAR mrutestW[] = {'M','R','U','T','e','s','t',0};
+ MRUINFOW infoW;
+ void *named;
+ HKEY hKey;
+ HANDLE hMru;
+
+ if (!pCreateMRUListLazyW)
+ {
+ win_skip("CreateMRUListLazyW entry point not found\n");
+ return;
+ }
+
+ /* check that it's not exported by name */
+ named = GetProcAddress(hComctl32, "CreateMRUListLazyW");
+ ok(named == NULL, "got %p\n", named);
+
+ ok(!RegCreateKeyA(HKEY_CURRENT_USER, REG_TEST_KEYA, &hKey),
+ "Couldn't create test key \"%s\"\n", REG_TEST_KEYA);
+
+ infoW.cbSize = sizeof(infoW);
+ infoW.uMax = 1;
+ infoW.fFlags = 0;
+ infoW.lpszSubKey = mrutestW;
+ infoW.hKey = hKey;
+ infoW.lpfnCompare = NULL;
+
+ hMru = pCreateMRUListLazyW(&infoW, 0, 0, 0);
+ ok(hMru != NULL, "got %p\n", hMru);
+ pFreeMRUList(hMru);
+
+ /* smaller size */
+ infoW.cbSize = sizeof(infoW) - 1;
+ infoW.uMax = 1;
+ infoW.fFlags = 0;
+ infoW.lpszSubKey = mrutestW;
+ infoW.hKey = hKey;
+ infoW.lpfnCompare = NULL;
+
+ hMru = pCreateMRUListLazyW(&infoW, 0, 0, 0);
+ todo_wine ok(hMru != NULL, "got %p\n", hMru);
+ pFreeMRUList(hMru);
+
+ /* increased size */
+ infoW.cbSize = sizeof(infoW) + 1;
+ infoW.uMax = 1;
+ infoW.fFlags = 0;
+ infoW.lpszSubKey = mrutestW;
+ infoW.hKey = hKey;
+ infoW.lpfnCompare = NULL;
+
+ hMru = pCreateMRUListLazyW(&infoW, 0, 0, 0);
+ todo_wine ok(hMru != NULL, "got %p\n", hMru);
+ pFreeMRUList(hMru);
+
+ /* zero size */
+ infoW.cbSize = 0;
+ infoW.uMax = 1;
+ infoW.fFlags = 0;
+ infoW.lpszSubKey = mrutestW;
+ infoW.hKey = hKey;
+ infoW.lpfnCompare = NULL;
+
+ hMru = pCreateMRUListLazyW(&infoW, 0, 0, 0);
+ todo_wine ok(hMru != NULL, "got %p\n", hMru);
+ pFreeMRUList(hMru);
+
+ /* NULL hKey */
+ infoW.cbSize = sizeof(infoW);
+ infoW.uMax = 1;
+ infoW.fFlags = 0;
+ infoW.lpszSubKey = mrutestW;
+ infoW.hKey = NULL;
+ infoW.lpfnCompare = NULL;
+
+ hMru = pCreateMRUListLazyW(&infoW, 0, 0, 0);
+ ok(hMru == NULL, "got %p\n", hMru);
+
+ RegCloseKey(hKey);
+}
+
START_TEST(mru)
{
hComctl32 = GetModuleHandleA("comctl32.dll");
@@ -519,9 +728,11 @@ START_TEST(mru)
test_MRUListA();
test_CreateMRUListLazyA();
+ test_CreateMRUListLazyW();
test_EnumMRUList();
test_FindMRUData();
test_AddMRUData();
+ test_CreateMRUListW();
delete_reg_entries();
}
--
1.5.6.5
--------------020809010605080902010502--
More information about the wine-patches
mailing list