Gijs Vermeulen : scrrun/tests: Add more Clone() tests.

Alexandre Julliard julliard at winehq.org
Fri Mar 29 16:27:43 CDT 2019


Module: wine
Branch: master
Commit: 0c4acb6104d5dc7eece9c53382351842769c3239
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0c4acb6104d5dc7eece9c53382351842769c3239

Author: Gijs Vermeulen <gijsvrm at gmail.com>
Date:   Thu Mar 28 18:52:33 2019 +0100

scrrun/tests: Add more Clone() tests.

Signed-off-by: Gijs Vermeulen <gijsvrm at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 29ee73f..54363f0 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;




More information about the wine-cvs mailing list