Dmitry Timoshkov : scrrun/tests: Add more tests for IFolderCollection using a dedicated temporary directory.

Alexandre Julliard julliard at winehq.org
Wed Jan 29 14:53:33 CST 2014


Module: wine
Branch: master
Commit: 9c6deb2b72dfb44f272a88feb916d8a2ea3f702f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9c6deb2b72dfb44f272a88feb916d8a2ea3f702f

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Tue Jan 28 11:35:43 2014 +0900

scrrun/tests: Add more tests for IFolderCollection using a dedicated temporary directory.

---

 dlls/scrrun/tests/filesystem.c |  118 ++++++++++++++++++++++++++++++++--------
 1 file changed, 95 insertions(+), 23 deletions(-)

diff --git a/dlls/scrrun/tests/filesystem.c b/dlls/scrrun/tests/filesystem.c
index 6942a3d..7c0fe7b 100644
--- a/dlls/scrrun/tests/filesystem.c
+++ b/dlls/scrrun/tests/filesystem.c
@@ -786,20 +786,26 @@ static void test_GetFolder(void)
 
 static void test_FolderCollection(void)
 {
+    static const WCHAR fooW[] = {'\\','f','o','o',0};
     static const WCHAR aW[] = {'\\','a',0};
     static const WCHAR bW[] = {'\\','b',0};
+    static const WCHAR cW[] = {'\\','c',0};
     IFolderCollection *folders;
-    WCHAR buffW[MAX_PATH], pathW[MAX_PATH], path2W[MAX_PATH];
+    WCHAR buffW[MAX_PATH], pathW[MAX_PATH];
     IEnumVARIANT *enumvar, *clone;
-    LONG count, count2, ref, ref2;
+    LONG count, ref, ref2, i;
     IUnknown *unk, *unk2;
     IFolder *folder;
     ULONG fetched;
-    VARIANT var;
+    VARIANT var, var2[2];
     HRESULT hr;
     BSTR str;
+    int found_a = 0, found_b = 0, found_c = 0;
 
-    GetTempPathW(MAX_PATH, buffW);
+    GetTempPathW(MAX_PATH, pathW);
+    GetTempFileNameW(pathW, fooW, 0, buffW);
+    DeleteFileW(buffW);
+    CreateDirectoryW(buffW, NULL);
 
     str = SysAllocString(buffW);
     hr = IFileSystem3_GetFolder(fs3, str, &folder);
@@ -813,6 +819,10 @@ static void test_FolderCollection(void)
     lstrcatW(pathW, aW);
     CreateDirectoryW(pathW, NULL);
 
+    lstrcpyW(pathW, buffW);
+    lstrcatW(pathW, bW);
+    CreateDirectoryW(pathW, NULL);
+
     hr = IFolder_get_SubFolders(folder, &folders);
     ok(hr == S_OK, "got 0x%08x\n", hr);
     IFolder_Release(folder);
@@ -820,17 +830,19 @@ static void test_FolderCollection(void)
     count = 0;
     hr = IFolderCollection_get_Count(folders, &count);
     ok(hr == S_OK, "got 0x%08x\n", hr);
-    ok(count > 0, "got %d\n", count);
+todo_wine
+    ok(count == 2, "got %d\n", count);
 
-    lstrcpyW(path2W, buffW);
-    lstrcatW(path2W, bW);
-    CreateDirectoryW(path2W, NULL);
+    lstrcpyW(pathW, buffW);
+    lstrcatW(pathW, cW);
+    CreateDirectoryW(pathW, NULL);
 
     /* every time property is requested it scans directory */
-    count2 = 0;
-    hr = IFolderCollection_get_Count(folders, &count2);
+    count = 0;
+    hr = IFolderCollection_get_Count(folders, &count);
     ok(hr == S_OK, "got 0x%08x\n", hr);
-    ok(count2 > count, "got %d, %d\n", count, count2);
+todo_wine
+    ok(count == 3, "got %d\n", count);
 
     hr = IFolderCollection_get__NewEnum(folders, NULL);
     ok(hr == E_POINTER, "got 0x%08x\n", hr);
@@ -870,29 +882,89 @@ static void test_FolderCollection(void)
     hr = IEnumVARIANT_Reset(enumvar);
     ok(hr == S_OK, "got 0x%08x\n", hr);
 
+    for (i = 0; i < 3; i++)
+    {
+        VariantInit(&var);
+        fetched = 0;
+        hr = IEnumVARIANT_Next(enumvar, 1, &var, &fetched);
+if (i == 2) todo_wine
+{
+        ok(hr == S_OK, "%d: got 0x%08x\n", i, hr);
+        ok(fetched == 1, "%d: got %d\n", i, fetched);
+        ok(V_VT(&var) == VT_DISPATCH, "%d: got type %d\n", i, V_VT(&var));
+} else
+{
+        ok(hr == S_OK, "%d: got 0x%08x\n", i, hr);
+        ok(fetched == 1, "%d: got %d\n", i, fetched);
+        ok(V_VT(&var) == VT_DISPATCH, "%d: got type %d\n", i, V_VT(&var));
+}
+
+        hr = IDispatch_QueryInterface(V_DISPATCH(&var), &IID_IFolder, (void**)&folder);
+        ok(hr == S_OK, "got 0x%08x\n", hr);
+
+        str = NULL;
+        hr = IFolder_get_Name(folder, &str);
+        ok(hr == S_OK, "got 0x%08x\n", hr);
+        if (!lstrcmpW(str, aW + 1))
+            found_a++;
+        else if (!lstrcmpW(str, bW + 1))
+            found_b++;
+        else if (!lstrcmpW(str, cW + 1))
+            found_c++;
+        SysFreeString(str);
+
+        IFolder_Release(folder);
+        VariantClear(&var);
+    }
+
+todo_wine
+    ok(found_a == 1 && found_b == 1 && found_c == 1,
+       "each folder should be found 1 time instead of %d/%d/%d\n",
+       found_a, found_b, found_c);
+
     VariantInit(&var);
-    fetched = 0;
+    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);
-    ok(V_VT(&var) == VT_DISPATCH, "got type %d\n", V_VT(&var));
+    ok(hr == S_FALSE, "got 0x%08x\n", hr);
+    ok(fetched == 0, "got %d\n", fetched);
 
-    hr = IDispatch_QueryInterface(V_DISPATCH(&var), &IID_IFolder, (void**)&folder);
+    hr = IEnumVARIANT_Reset(enumvar);
     ok(hr == S_OK, "got 0x%08x\n", hr);
-
-    str = NULL;
-    hr = IFolder_get_Name(folder, &str);
+    hr = IEnumVARIANT_Skip(enumvar, 2);
+todo_wine
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    hr = IEnumVARIANT_Skip(enumvar, 0);
     ok(hr == S_OK, "got 0x%08x\n", hr);
-    SysFreeString(str);
 
-    IFolder_Release(folder);
-    VariantClear(&var);
+    VariantInit(&var2[0]);
+    VariantInit(&var2[1]);
+    fetched = -1;
+    hr = IEnumVARIANT_Next(enumvar, 0, var2, &fetched);
+    ok(hr == S_OK, "got 0x%08x\n", hr);
+    ok(fetched == 0, "got %d\n", fetched);
+    fetched = -1;
+    hr = IEnumVARIANT_Next(enumvar, 2, var2, &fetched);
+todo_wine
+    ok(hr == S_FALSE, "got 0x%08x\n", hr);
+todo_wine
+    ok(fetched == 1, "got %d\n", fetched);
+    ok(V_VT(&var2[0]) == VT_DISPATCH, "got type %d\n", V_VT(&var2[0]));
+    VariantClear(&var2[0]);
+    VariantClear(&var2[1]);
 
     IEnumVARIANT_Release(enumvar);
     IUnknown_Release(unk);
 
+    lstrcpyW(pathW, buffW);
+    lstrcatW(pathW, aW);
+    RemoveDirectoryW(pathW);
+    lstrcpyW(pathW, buffW);
+    lstrcatW(pathW, bW);
+    RemoveDirectoryW(pathW);
+    lstrcpyW(pathW, buffW);
+    lstrcatW(pathW, cW);
     RemoveDirectoryW(pathW);
-    RemoveDirectoryW(path2W);
+    RemoveDirectoryW(buffW);
 
     IFolderCollection_Release(folders);
 }




More information about the wine-cvs mailing list