[PATCH 1/8] Cleanup MRU lists tests, add more
Nikolay Sivov
nsivov at codeweavers.com
Sat Apr 30 00:18:48 CDT 2011
---
dlls/comctl32/tests/mru.c | 422 +++++++++++++++++++++++++++++++++------------
1 files changed, 309 insertions(+), 113 deletions(-)
diff --git a/dlls/comctl32/tests/mru.c b/dlls/comctl32/tests/mru.c
index 24fcff5..5def70f 100644
--- a/dlls/comctl32/tests/mru.c
+++ b/dlls/comctl32/tests/mru.c
@@ -37,42 +37,44 @@
#define REG_TEST_SUBKEYA "MRUTest"
#define REG_TEST_FULLKEY REG_TEST_KEYA "\\" REG_TEST_SUBKEYA
-/* Undocumented MRU structures & functions */
-typedef struct tagCREATEMRULISTA
+typedef struct tagMRUINFOA
{
DWORD cbSize;
- DWORD nMaxItems;
- DWORD dwFlags;
+ UINT uMax;
+ UINT fFlags;
HKEY hKey;
LPCSTR lpszSubKey;
PROC lpfnCompare;
-} CREATEMRULISTA, *LPCREATEMRULISTA;
+} MRUINFOA;
-#define MRUF_STRING_LIST 0
-#define MRUF_BINARY_LIST 1
-#define MRUF_DELAYED_SAVE 2
+typedef struct tagMRUINFOW
+{
+ DWORD cbSize;
+ UINT uMax;
+ UINT fFlags;
+ HKEY hKey;
+ LPCWSTR lpszSubKey;
+ PROC lpfnCompare;
+} MRUINFOW;
-#define LIST_SIZE 3 /* Max entries for each mru */
+#define MRU_STRING 0 /* name is invented for that */
+#define MRU_BINARY 1
+#define MRU_CACHEWRITE 2
-static CREATEMRULISTA mruA =
-{
- sizeof(CREATEMRULISTA),
- LIST_SIZE,
- 0,
- NULL,
- REG_TEST_SUBKEYA,
- NULL
-};
+#define LIST_SIZE 3 /* Max entries for each mru */
static HMODULE hComctl32;
-static HANDLE (WINAPI *pCreateMRUListA)(LPCREATEMRULISTA);
+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 *pEnumMRUListW)(HANDLE,INT,LPVOID,DWORD);
-static HANDLE (WINAPI *pCreateMRUListLazyA)(LPCREATEMRULISTA, DWORD, DWORD, DWORD);
-static INT (WINAPI *pFindMRUData)(HANDLE, LPCVOID, DWORD, LPINT);
-static INT (WINAPI *pAddMRUData)(HANDLE, LPCVOID, DWORD);
+static INT (WINAPI *pEnumMRUListA)(HANDLE,INT, void*, DWORD);
+static INT (WINAPI *pEnumMRUListW)(HANDLE,INT, void*, DWORD);
+static HANDLE (WINAPI *pCreateMRUListLazyA)(MRUINFOA*, DWORD, DWORD, DWORD);
+static HANDLE (WINAPI *pCreateMRUListLazyW)(MRUINFOW*, DWORD, DWORD, DWORD);
+static INT (WINAPI *pFindMRUData)(HANDLE, const void*, DWORD, INT*);
+static INT (WINAPI *pAddMRUData)(HANDLE, const void*, DWORD);
+static HANDLE (WINAPI *pCreateMRUListW)(MRUINFOW*);
+
/*
static INT (WINAPI *pFindMRUStringA)(HANDLE,LPCSTR,LPINT);
*/
@@ -83,11 +85,13 @@ 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 */
@@ -226,71 +230,94 @@ static INT CALLBACK cmp_mru_strA(LPCVOID data1, LPCVOID data2)
return lstrcmpiA(data1, data2);
}
-static HANDLE create_mruA(HKEY hKey, DWORD flags, PROC cmp)
-{
- mruA.dwFlags = flags;
- mruA.lpfnCompare = cmp;
- mruA.hKey = hKey;
-
- SetLastError(0);
- return pCreateMRUListA(&mruA);
-}
-
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");
+ win_skip("MRU entry points not found\n");
return;
}
if (0)
{
- /* Create (NULL) - crashes native */
- hMRU = pCreateMRUListA(NULL);
+ /* Create (NULL) - crashes native */
+ hMRU = pCreateMRUListA(NULL);
}
- /* Create (size too small) */
- mruA.cbSize = sizeof(mruA) - 2;
- hMRU = create_mruA(NULL, MRUF_STRING_LIST, (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, MRUF_STRING_LIST, (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, MRUF_STRING_LIST, (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, MRUF_STRING_LIST, (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, MRUF_STRING_LIST, (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());
@@ -298,6 +325,8 @@ static void test_MRUListA(void)
if (hMRU)
{
char buffer[255];
+ INT ret;
+
checks[0] = "Test 1";
checks[1] = "Test 2";
checks[2] = "Test 3";
@@ -305,117 +334,117 @@ static void test_MRUListA(void)
/* Add (NULL list) */
SetLastError(0);
- iRet = pAddMRUStringA(NULL, checks[0]);
- ok(iRet == -1 && !GetLastError(),
+ ret = pAddMRUStringA(NULL, checks[0]);
+ ok(ret == -1 && !GetLastError(),
"AddMRUStringA(NULL list) expected -1,0 got %d,%d\n",
- iRet, GetLastError());
+ ret, GetLastError());
/* Add (NULL string) */
if (0)
{
/* Some native versions crash when passed NULL or fail to SetLastError() */
SetLastError(0);
- iRet = pAddMRUStringA(hMRU, NULL);
- ok(iRet == 0 && GetLastError() == ERROR_INVALID_PARAMETER,
+ ret = pAddMRUStringA(hMRU, NULL);
+ ok(ret == 0 && GetLastError() == ERROR_INVALID_PARAMETER,
"AddMRUStringA(NULL str) expected 0,ERROR_INVALID_PARAMETER got %d,%d\n",
- iRet, GetLastError());
+ ret, GetLastError());
}
/* Add 3 strings. Check the registry is correct after each add */
SetLastError(0);
- iRet = pAddMRUStringA(hMRU, checks[0]);
- ok(iRet == 0 && !GetLastError(),
+ ret = pAddMRUStringA(hMRU, checks[0]);
+ ok(ret == 0 && !GetLastError(),
"AddMRUStringA(1) expected 0,0 got %d,%d\n",
- iRet, GetLastError());
+ ret, GetLastError());
check_reg_entries("a", checks);
SetLastError(0);
- iRet = pAddMRUStringA(hMRU, checks[1]);
- ok(iRet == 1 && !GetLastError(),
+ ret = pAddMRUStringA(hMRU, checks[1]);
+ ok(ret == 1 && !GetLastError(),
"AddMRUStringA(2) expected 1,0 got %d,%d\n",
- iRet, GetLastError());
+ ret, GetLastError());
check_reg_entries("ba", checks);
SetLastError(0);
- iRet = pAddMRUStringA(hMRU, checks[2]);
- ok(iRet == 2 && !GetLastError(),
+ ret = pAddMRUStringA(hMRU, checks[2]);
+ ok(ret == 2 && !GetLastError(),
"AddMRUStringA(2) expected 2,0 got %d,%d\n",
- iRet, GetLastError());
+ ret, GetLastError());
check_reg_entries("cba", checks);
/* Add a duplicate of the 2nd string - it should move to the front,
* but keep the same index in the registry.
*/
SetLastError(0);
- iRet = pAddMRUStringA(hMRU, checks[1]);
- ok(iRet == 1 && !GetLastError(),
+ ret = pAddMRUStringA(hMRU, checks[1]);
+ ok(ret == 1 && !GetLastError(),
"AddMRUStringA(re-add 1) expected 1,0 got %d,%d\n",
- iRet, GetLastError());
+ ret, GetLastError());
check_reg_entries("bca", checks);
/* Add a new string - replaces the oldest string + moves to the front */
SetLastError(0);
- iRet = pAddMRUStringA(hMRU, checks[3]);
- ok(iRet == 0 && !GetLastError(),
+ ret = pAddMRUStringA(hMRU, checks[3]);
+ ok(ret == 0 && !GetLastError(),
"AddMRUStringA(add new) expected 0,0 got %d,%d\n",
- iRet, GetLastError());
+ ret, GetLastError());
checks[0] = checks[3];
check_reg_entries("abc", checks);
/* NULL buffer = get list size */
- iRet = pEnumMRUList(hMRU, 0, NULL, 0);
- ok(iRet == 3 || iRet == -1 /* Vista */, "EnumMRUList expected %d or -1, got %d\n", LIST_SIZE, iRet);
+ ret = pEnumMRUListA(hMRU, 0, NULL, 0);
+ ok(ret == 3 || ret == -1 /* Vista */, "EnumMRUListA expected %d or -1, got %d\n", LIST_SIZE, ret);
/* negative item pos = get list size */
- iRet = pEnumMRUList(hMRU, -1, NULL, 0);
- ok(iRet == 3 || iRet == -1 /* Vista */, "EnumMRUList expected %d or -1, got %d\n", LIST_SIZE, iRet);
+ ret = pEnumMRUListA(hMRU, -1, NULL, 0);
+ ok(ret == 3 || ret == -1 /* Vista */, "EnumMRUListA expected %d or -1, got %d\n", LIST_SIZE, ret);
/* negative item pos = get list size */
- iRet = pEnumMRUList(hMRU, -5, NULL, 0);
- ok(iRet == 3 || iRet == -1 /* Vista */, "EnumMRUList expected %d or -1, got %d\n", LIST_SIZE, iRet);
+ ret = pEnumMRUListA(hMRU, -5, NULL, 0);
+ ok(ret == 3 || ret == -1 /* Vista */, "EnumMRUListA expected %d or -1, got %d\n", LIST_SIZE, ret);
/* negative item pos = get list size */
- iRet = pEnumMRUList(hMRU, -1, buffer, 255);
- ok(iRet == 3, "EnumMRUList expected %d, got %d\n", LIST_SIZE, iRet);
+ ret = pEnumMRUListA(hMRU, -1, buffer, 255);
+ ok(ret == 3, "EnumMRUListA expected %d, got %d\n", LIST_SIZE, ret);
/* negative item pos = get list size */
- iRet = pEnumMRUList(hMRU, -5, buffer, 255);
- ok(iRet == 3, "EnumMRUList expected %d, got %d\n", LIST_SIZE, iRet);
+ ret = pEnumMRUListA(hMRU, -5, buffer, 255);
+ ok(ret == 3, "EnumMRUListA expected %d, got %d\n", LIST_SIZE, ret);
/* check entry 0 */
buffer[0] = 0;
- iRet = pEnumMRUList(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);
+ ret = pEnumMRUListA(hMRU, 0, buffer, 255);
+ ok(ret == lstrlen(checks[3]), "EnumMRUListA expected %d, got %d\n", lstrlen(checks[3]), ret);
+ ok(strcmp(buffer, checks[3]) == 0, "EnumMRUListA expected %s, got %s\n", checks[3], buffer);
/* check entry 0 with a too small buffer */
buffer[0] = 0; /* overwritten with 'T' */
buffer[1] = 'A'; /* overwritten with 0 */
buffer[2] = 'A'; /* unchanged */
buffer[3] = 0; /* unchanged */
- iRet = pEnumMRUList(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);
+ ret = pEnumMRUListA(hMRU, 0, buffer, 2);
+ ok(ret == lstrlen(checks[3]), "EnumMRUListA expected %d, got %d\n", lstrlen(checks[3]), ret);
+ ok(strcmp(buffer, "T") == 0, "EnumMRUListA expected %s, got %s\n", "T", buffer);
/* make sure space after buffer has old values */
- ok(buffer[2] == 'A', "EnumMRUList expected %02x, got %02x\n", 'A', buffer[2]);
+ ok(buffer[2] == 'A', "EnumMRUListA expected %02x, got %02x\n", 'A', buffer[2]);
/* check entry 1 */
buffer[0] = 0;
- iRet = pEnumMRUList(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);
+ ret = pEnumMRUListA(hMRU, 1, buffer, 255);
+ ok(ret == lstrlen(checks[1]), "EnumMRUListA expected %d, got %d\n", lstrlen(checks[1]), ret);
+ ok(strcmp(buffer, checks[1]) == 0, "EnumMRUListA expected %s, got %s\n", checks[1], buffer);
/* check entry 2 */
buffer[0] = 0;
- iRet = pEnumMRUList(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);
+ ret = pEnumMRUListA(hMRU, 2, buffer, 255);
+ ok(ret == lstrlen(checks[2]), "EnumMRUListA expected %d, got %d\n", lstrlen(checks[2]), ret);
+ ok(strcmp(buffer, checks[2]) == 0, "EnumMRUListA expected %s, got %s\n", checks[2], buffer);
/* check out of bounds entry 3 */
strcpy(buffer, "dummy");
- iRet = pEnumMRUList(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);
+ ret = pEnumMRUListA(hMRU, 3, buffer, 255);
+ ok(ret == -1, "EnumMRUListA expected %d, got %d\n", -1, ret);
+ ok(strcmp(buffer, "dummy") == 0, "EnumMRUListA expected unchanged buffer %s, got %s\n", "dummy", buffer);
/* Finished with this MRU */
pFreeMRUList(hMRU);
@@ -428,7 +457,7 @@ static void test_CreateMRUListLazyA(void)
{
HANDLE hMRU;
HKEY hKey;
- CREATEMRULISTA listA = { 0 };
+ MRUINFOA listA = { 0 };
if (!pCreateMRUListLazyA || !pFreeMRUList)
{
@@ -462,7 +491,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,14 +501,14 @@ 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);
}
}
static void test_FindMRUData(void)
{
- INT iRet;
+ INT ret;
if (!pFindMRUData)
{
@@ -488,13 +517,13 @@ static void test_FindMRUData(void)
}
/* NULL handle */
- iRet = pFindMRUData(NULL, NULL, 0, NULL);
- ok(iRet == -1, "FindMRUData expected -1, got %d\n", iRet);
+ ret = pFindMRUData(NULL, NULL, 0, NULL);
+ ok(ret == -1, "FindMRUData expected -1, got %d\n", ret);
}
static void test_AddMRUData(void)
{
- INT iRet;
+ INT ret;
if (!pAddMRUData)
{
@@ -503,8 +532,173 @@ static void test_AddMRUData(void)
}
/* NULL handle */
- iRet = pFindMRUData(NULL, NULL, 0, NULL);
- ok(iRet == -1, "AddMRUData expected -1, got %d\n", iRet);
+ ret = pFindMRUData(NULL, NULL, 0, NULL);
+ ok(ret == -1, "AddMRUData expected -1, got %d\n", ret);
+}
+
+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)
@@ -519,9 +713,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
--------------010800000308090408060004--
More information about the wine-patches
mailing list