From 0c4acb6104d5dc7eece9c53382351842769c3239 Mon Sep 17 00:00:00 2001 From: Gijs Vermeulen Date: Thu, 28 Mar 2019 18:52:33 +0100 Subject: [PATCH] scrrun/tests: Add more Clone() tests. Signed-off-by: Gijs Vermeulen Signed-off-by: Alexandre Julliard --- dlls/scrrun/tests/filesystem.c | 75 +++++++++++++++++++++++++++++++----------- 1 file changed, 55 insertions(+), 20 deletions(-) diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c index 29ee73f2433..54363f08ba3 100644 --- a/dlls/scrrun/tests/filesystem.c +++ b/dlls/scrrun/tests/filesystem.c @@ -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; -- 2.11.4.GIT