scrrun/tests: Add more Clone() tests.

Signed-off-by: Gijs Vermeulen <gijsvrm@gmail.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Gijs Vermeulen 2019-03-28 18:52:33 +01:00 committed by Alexandre Julliard
parent a8e16ab94c
commit 0c4acb6104

View file

@ -973,6 +973,52 @@ static void test_GetFolder(void)
IFolder_Release(folder);
}
static void test_clone(IEnumVARIANT *enumvar, BOOL position_inherited)
{
HRESULT hr;
IEnumVARIANT *clone;
ULONG fetched;
VARIANT var, var2;
hr = IEnumVARIANT_Reset(enumvar);
ok(hr == S_OK, "got 0x%08x\n", hr);
VariantInit(&var);
fetched = -1;
hr = IEnumVARIANT_Next(enumvar, 1, &var, &fetched);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(fetched == 1, "got %d\n", fetched);
/* clone enumerator */
hr = IEnumVARIANT_Clone(enumvar, &clone);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(clone != enumvar, "got %p, %p\n", enumvar, clone);
/* check if clone inherits position */
VariantInit(&var2);
fetched = -1;
hr = IEnumVARIANT_Next(clone, 1, &var2, &fetched);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(fetched == 1, "got %d\n", fetched);
if (!position_inherited)
todo_wine ok(V_DISPATCH(&var) == V_DISPATCH(&var2), "values don't match\n");
else
{
fetched = -1;
hr = IEnumVARIANT_Next(enumvar, 1, &var, &fetched);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(fetched == 1, "got %d\n", fetched);
todo_wine ok(V_DISPATCH(&var) == V_DISPATCH(&var2), "values don't match\n");
}
VariantClear(&var2);
VariantClear(&var);
IEnumVARIANT_Release(clone);
hr = IEnumVARIANT_Reset(enumvar);
ok(hr == S_OK, "got 0x%08x\n", hr);
}
/* Please keep the tests for IFolderCollection and IFileCollection in sync */
static void test_FolderCollection(void)
{
@ -982,7 +1028,7 @@ static void test_FolderCollection(void)
static const WCHAR cW[] = {'\\','c',0};
IFolderCollection *folders;
WCHAR buffW[MAX_PATH], pathW[MAX_PATH];
IEnumVARIANT *enumvar, *clone;
IEnumVARIANT *enumvar;
LONG count, ref, ref2, i;
IUnknown *unk, *unk2;
IFolder *folder;
@ -1068,14 +1114,7 @@ static void test_FolderCollection(void)
ref2 = GET_REFCOUNT(folders);
ok(ref2 == ref, "got %d, %d\n", ref2, ref);
/* clone enumerator */
hr = IEnumVARIANT_Clone(enumvar, &clone);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(clone != enumvar, "got %p, %p\n", enumvar, clone);
IEnumVARIANT_Release(clone);
hr = IEnumVARIANT_Reset(enumvar);
ok(hr == S_OK, "got 0x%08x\n", hr);
test_clone(enumvar, FALSE);
for (i = 0; i < 3; i++)
{
@ -1165,7 +1204,7 @@ static void test_FileCollection(void)
IFolder *folder;
IFileCollection *files;
IFile *file;
IEnumVARIANT *enumvar, *clone;
IEnumVARIANT *enumvar;
LONG count, ref, ref2, i;
IUnknown *unk, *unk2;
ULONG fetched;
@ -1245,14 +1284,7 @@ static void test_FileCollection(void)
ref2 = GET_REFCOUNT(files);
ok(ref2 == ref, "got %d, %d\n", ref2, ref);
/* clone enumerator */
hr = IEnumVARIANT_Clone(enumvar, &clone);
ok(hr == S_OK, "got 0x%08x\n", hr);
ok(clone != enumvar, "got %p, %p\n", enumvar, clone);
IEnumVARIANT_Release(clone);
hr = IEnumVARIANT_Reset(enumvar);
ok(hr == S_OK, "got 0x%08x\n", hr);
test_clone(enumvar, FALSE);
for (i = 0; i < 3; i++)
{
@ -1329,7 +1361,7 @@ static void test_FileCollection(void)
static void test_DriveCollection(void)
{
IDriveCollection *drives;
IEnumVARIANT *enumvar;
IEnumVARIANT *enumvar, *clone;
ULONG fetched;
VARIANT var;
HRESULT hr;
@ -1366,10 +1398,13 @@ static void test_DriveCollection(void)
hr = IEnumVARIANT_Skip(enumvar, 1);
ok(hr == S_FALSE, "got 0x%08x\n", hr);
/* reset and iterate again */
hr = IEnumVARIANT_Reset(enumvar);
ok(hr == S_OK, "got 0x%08x\n", hr);
hr = IEnumVARIANT_Clone(enumvar, &clone);
if(hr == S_OK)
test_clone(enumvar, TRUE);
while (IEnumVARIANT_Next(enumvar, 1, &var, &fetched) == S_OK) {
IDrive *drive = (IDrive*)V_DISPATCH(&var);
DriveTypeConst type;