Commit e7304066 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

comctl32/dpa: Split tests to several functions to avoid undesired dependencies.

parent 7517135f
......@@ -201,7 +201,6 @@ static void test_dpa(void)
INT ret, i;
PVOID p;
DWORD dw, dw2, dw3;
HRESULT hRes;
BOOL rc;
GetSystemInfo(&si);
......@@ -336,49 +335,6 @@ static void test_dpa(void)
ok(j != i, "i=%d\n", i);
}
if(pDPA_Merge)
{
/* Delete all even entries from dpa */
p = pDPA_DeletePtr(dpa, 1);
p = pDPA_DeletePtr(dpa, 2);
p = pDPA_DeletePtr(dpa, 3);
rc=CheckDPA(dpa, 0x135, &dw);
ok(rc, "dw=0x%x\n", dw);
/* Delete all odd entries from dpa2 */
pDPA_Merge(dpa2, dpa, DPAM_DELETE,
CB_CmpLT, CB_MergeDeleteOddSrc, 0xdeadbeef);
todo_wine
{
rc=CheckDPA(dpa2, 0x246, &dw2);
ok(rc, "dw=0x%x\n", dw2);
}
/* Merge dpa3 into dpa2 and dpa */
pDPA_Merge(dpa, dpa3, DPAM_INSERT|DPAM_NOSORT,
CB_CmpLT, CB_MergeInsertSrc, 0xdeadbeef);
pDPA_Merge(dpa2, dpa3, DPAM_INSERT|DPAM_NOSORT,
CB_CmpLT, CB_MergeInsertSrc, 0xdeadbeef);
rc=CheckDPA(dpa, 0x123456, &dw);
ok(rc, "dw=0x%x\n", dw);
rc=CheckDPA(dpa2, 0x123456, &dw2);
ok(rc ||
broken(!rc), /* win98 */
"dw2=0x%x\n", dw2);
rc=CheckDPA(dpa3, 0x123456, &dw3);
ok(rc, "dw3=0x%x\n", dw3);
}
if(pDPA_EnumCallback)
{
nEnum = 0;
pDPA_EnumCallback(dpa2, CB_EnumFirstThree, dpa2);
rc=CheckDPA(dpa2, 0x777456, &dw2);
ok(rc, "dw=0x%x\n", dw2);
ok(nEnum == 3, "nEnum=%d\n", nEnum);
}
/* Setting item with huge index should work */
ok(pDPA_SetPtr(dpa2, 0x12345, (PVOID)0xdeadbeef), "\n");
ret = pDPA_GetPtrIndex(dpa2, (PVOID)0xdeadbeef);
......@@ -388,61 +344,200 @@ static void test_dpa(void)
rc=CheckDPA(dpa2, 0, &dw2);
ok(rc, "dw2=0x%x\n", dw2);
pDPA_Destroy(dpa2);
pDPA_Destroy(dpa3);
}
static void test_DPA_Merge(void)
{
HDPA dpa, dpa2, dpa3;
INT ret, i;
DWORD dw;
BOOL rc;
if(!pDPA_Merge)
{
win_skip("DPA_Merge() not available\n");
return;
}
dpa = pDPA_Create(0);
dpa2 = pDPA_Create(0);
dpa3 = pDPA_Create(0);
ret = pDPA_InsertPtr(dpa, 0, (PVOID)1);
ok(ret == 0, "ret=%d\n", ret);
ret = pDPA_InsertPtr(dpa, 1, (PVOID)3);
ok(ret == 1, "ret=%d\n", ret);
ret = pDPA_InsertPtr(dpa, 2, (PVOID)5);
ok(ret == 2, "ret=%d\n", ret);
rc = CheckDPA(dpa, 0x135, &dw);
ok(rc, "dw=0x%x\n", dw);
for (i = 0; i < 6; i++)
{
ret = pDPA_InsertPtr(dpa2, i, (PVOID)(6-i));
ok(ret == i, "ret=%d\n", ret);
ret = pDPA_InsertPtr(dpa3, i, (PVOID)(i+1));
ok(ret == i, "ret=%d\n", ret);
}
rc = CheckDPA(dpa2, 0x654321, &dw);
ok(rc, "dw=0x%x\n", dw);
rc = CheckDPA(dpa3, 0x123456, &dw);
ok(rc, "dw=0x%x\n", dw);
/* Delete all odd entries from dpa2 */
pDPA_Merge(dpa2, dpa, DPAM_DELETE,
CB_CmpLT, CB_MergeDeleteOddSrc, 0xdeadbeef);
todo_wine
{
rc = CheckDPA(dpa2, 0x246, &dw);
ok(rc, "dw=0x%x\n", dw);
}
/* Merge dpa3 into dpa2 and dpa */
pDPA_Merge(dpa, dpa3, DPAM_INSERT|DPAM_NOSORT,
CB_CmpLT, CB_MergeInsertSrc, 0xdeadbeef);
pDPA_Merge(dpa2, dpa3, DPAM_INSERT|DPAM_NOSORT,
CB_CmpLT, CB_MergeInsertSrc, 0xdeadbeef);
rc = CheckDPA(dpa, 0x123456, &dw);
ok(rc, "dw=0x%x\n", dw);
rc = CheckDPA(dpa2, 0x123456, &dw);
ok(rc ||
broken(!rc), /* win98 */
"dw=0x%x\n", dw);
rc = CheckDPA(dpa3, 0x123456, &dw);
ok(rc, "dw=0x%x\n", dw);
pDPA_Destroy(dpa);
pDPA_Destroy(dpa2);
pDPA_Destroy(dpa3);
}
static void test_DPA_EnumCallback(void)
{
HDPA dpa;
BOOL rc;
DWORD dw;
INT i, ret;
if(!pDPA_EnumCallback)
{
win_skip("DPA_EnumCallback() not available\n");
return;
}
dpa = pDPA_Create(0);
for (i = 0; i < 6; i++)
{
ret = pDPA_InsertPtr(dpa, i, (PVOID)(i+1));
ok(ret == i, "ret=%d\n", ret);
}
rc = CheckDPA(dpa, 0x123456, &dw);
ok(rc, "dw=0x%x\n", dw);
nEnum = 0;
/* test callback sets first 3 items to 7 */
pDPA_EnumCallback(dpa, CB_EnumFirstThree, dpa);
rc = CheckDPA(dpa, 0x777456, &dw);
ok(rc, "dw=0x%x\n", dw);
ok(nEnum == 3, "nEnum=%d\n", nEnum);
pDPA_Destroy(dpa);
}
static void test_DPA_DestroyCallback(void)
{
HDPA dpa;
INT i, ret;
if(!pDPA_DestroyCallback)
{
win_skip("DPA_DestroyCallback() not available\n");
return;
}
dpa = pDPA_Create(0);
if(pDPA_DestroyCallback)
for (i = 0; i < 3; i++)
{
nEnum = 0;
pDPA_DestroyCallback(dpa3, CB_EnumFirstThree, dpa3);
ok(nEnum == 3, "nEnum=%d\n", nEnum);
ret = pDPA_InsertPtr(dpa, i, (PVOID)(i+1));
ok(ret == i, "ret=%d\n", ret);
}
else pDPA_Destroy(dpa3);
nEnum = 0;
pDPA_DestroyCallback(dpa, CB_EnumFirstThree, dpa);
ok(nEnum == 3, "nEnum=%d\n", nEnum);
}
static void test_dpa_stream(void)
{
HDPA dpa;
HRESULT hRes;
INT ret, i;
BOOL rc;
static const WCHAR szStg[] = { 'S','t','g',0 };
IStorage* pStg = NULL;
IStream* pStm = NULL;
LARGE_INTEGER liZero;
DWORD dwMode, dw;
if(!pDPA_SaveStream)
goto skip_stream_tests;
{
win_skip("DPA_SaveStream() not available. Skipping stream tests.\n");
return;
}
hRes = CoInitialize(NULL);
if(hRes == S_OK)
if (hRes != S_OK)
{
static const WCHAR szStg[] = { 'S','t','g',0 };
IStorage* pStg = NULL;
IStream* pStm = NULL;
LARGE_INTEGER liZero;
DWORD dwMode;
liZero.QuadPart = 0;
dwMode = STGM_DIRECT|STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE;
hRes = StgCreateDocfile(NULL, dwMode|STGM_DELETEONRELEASE, 0, &pStg);
ok(hRes == S_OK, "hRes=0x%x\n", hRes);
ok(0, "hResult: %d\n", hRes);
return;
}
hRes = IStorage_CreateStream(pStg, szStg, dwMode, 0, 0, &pStm);
ok(hRes == S_OK, "hRes=0x%x\n", hRes);
dpa = pDPA_Create(0);
hRes = pDPA_SaveStream(dpa, CB_Save, pStm, 0xdeadbeef);
todo_wine ok(hRes == S_OK, "hRes=0x%x\n", hRes);
pDPA_Destroy(dpa);
hRes = IStream_Seek(pStm, liZero, STREAM_SEEK_SET, NULL);
ok(hRes == S_OK, "hRes=0x%x\n", hRes);
hRes = pDPA_LoadStream(&dpa, CB_Load, pStm, 0xdeadbeef);
todo_wine
{
ok(hRes == S_OK, "hRes=0x%x\n", hRes);
rc=CheckDPA(dpa, 0x123456, &dw);
ok(rc, "dw=0x%x\n", dw);
}
for (i = 0; i < 6; i++)
{
ret = pDPA_InsertPtr(dpa, i, (PVOID)(i+1));
ok(ret == i, "ret=%d\n", ret);
}
ret = IStream_Release(pStm);
ok(!ret, "ret=%d\n", ret);
ret = IStorage_Release(pStg);
ok(!ret, "ret=%d\n", ret);
dwMode = STGM_DIRECT|STGM_CREATE|STGM_READWRITE|STGM_SHARE_EXCLUSIVE;
hRes = StgCreateDocfile(NULL, dwMode|STGM_DELETEONRELEASE, 0, &pStg);
ok(hRes == S_OK, "hRes=0x%x\n", hRes);
CoUninitialize();
}
else ok(0, "hResult: %d\n", hRes);
hRes = IStorage_CreateStream(pStg, szStg, dwMode, 0, 0, &pStm);
ok(hRes == S_OK, "hRes=0x%x\n", hRes);
skip_stream_tests:
hRes = pDPA_SaveStream(dpa, CB_Save, pStm, 0xdeadbeef);
todo_wine ok(hRes == S_OK, "hRes=0x%x\n", hRes);
pDPA_Destroy(dpa);
liZero.QuadPart = 0;
hRes = IStream_Seek(pStm, liZero, STREAM_SEEK_SET, NULL);
ok(hRes == S_OK, "hRes=0x%x\n", hRes);
hRes = pDPA_LoadStream(&dpa, CB_Load, pStm, 0xdeadbeef);
todo_wine
{
ok(hRes == S_OK, "hRes=0x%x\n", hRes);
rc = CheckDPA(dpa, 0x123456, &dw);
ok(rc, "dw=0x%x\n", dw);
}
pDPA_Destroy(dpa);
ret = IStream_Release(pStm);
ok(!ret, "ret=%d\n", ret);
ret = IStorage_Release(pStg);
ok(!ret, "ret=%d\n", ret);
CoUninitialize();
}
START_TEST(dpa)
......@@ -451,8 +546,15 @@ START_TEST(dpa)
hcomctl32 = GetModuleHandleA("comctl32.dll");
if(InitFunctionPtrs(hcomctl32))
test_dpa();
else
if(!InitFunctionPtrs(hcomctl32))
{
win_skip("Needed functions are not available\n");
return;
}
test_dpa();
test_DPA_Merge();
test_DPA_EnumCallback();
test_DPA_DestroyCallback();
test_dpa_stream();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment