[PATCH] Skip Listview interaction tests on Vista+, list doesn't contain any items for some reason

Nikolay Sivov nsivov at codeweavers.com
Sun Apr 25 15:32:22 CDT 2010


---
 dlls/shell32/shlview.c       |    5 +---
 dlls/shell32/tests/shlview.c |   51 +++++++++++++++++++++++++++++++++--------
 2 files changed, 42 insertions(+), 14 deletions(-)

diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index c30da18..a42cd20 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -2713,10 +2713,7 @@ static HRESULT WINAPI IFView_GetFolder(IFolderView *iface, REFIID riid, void **p
     if (!ppv) return E_POINTER;
 
     if (IsEqualIID(riid, &IID_IShellFolder))
-    {
-        *ppv = This->pSFParent;
-        return S_OK;
-    }
+        return IShellFolder_QueryInterface(This->pSFParent, riid, ppv);
 
     return E_NOINTERFACE;
 }
diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c
index dc60a49..c98f2dd 100644
--- a/dlls/shell32/tests/shlview.c
+++ b/dlls/shell32/tests/shlview.c
@@ -479,23 +479,48 @@ if (0)
 
 static void test_IFolderView(void)
 {
-    IShellFolder *desktop, *folder;
+    IShellFolder *desktop, *folder, *sysfolder;
     FOLDERSETTINGS settings;
     IShellView *view;
     IShellBrowser *browser;
     IFolderView *fv;
     HWND hwnd_view, hwnd_list;
     PITEMID_CHILD pidl;
+    LPITEMIDLIST pidl2;
     HRESULT hr;
     INT ret;
     POINT pt;
     LONG ref1, ref2;
     RECT r;
+    WCHAR pathW[MAX_PATH];
+    IEnumIDList *list;
 
     hr = SHGetDesktopFolder(&desktop);
     ok(hr == S_OK, "got (0x%08x)\n", hr);
 
-    hr = IShellFolder_CreateViewObject(desktop, NULL, &IID_IShellView, (void**)&view);
+    GetSystemDirectoryW(pathW, sizeof(pathW));
+
+    pidl2 = (void*)0xdeadbeef;
+    hr = IShellFolder_ParseDisplayName(desktop, NULL, NULL, pathW, NULL, &pidl2, NULL);
+    ok(hr == S_OK, "got (0x%08x)\n", hr);
+
+    hr = IShellFolder_BindToObject(desktop, pidl2, NULL, &IID_IShellFolder, (void**)&sysfolder);
+    ok(hr == S_OK, "got (0x%08x)\n", hr);
+    SHFree(pidl2);
+
+    hr = IShellFolder_EnumObjects(sysfolder, NULL, SHCONTF_FOLDERS, &list);
+    ok(hr == S_OK, "got (0x%08x)\n", hr);
+
+    ret = 0;
+    while (IEnumIDList_Next(list, 1, &pidl2, NULL) == S_OK)
+    {
+        ret++;
+        SHFree(pidl2);
+    }
+    ok(ret > 0, "expected not empty folder\n");
+    IEnumIDList_Release(list);
+
+    hr = IShellFolder_CreateViewObject(sysfolder, GetDesktopWindow(), &IID_IShellView, (void**)&view);
     ok(hr == S_OK, "got (0x%08x)\n", hr);
 
     hr = IShellView_QueryInterface(view, &IID_IFolderView, (void**)&fv);
@@ -541,9 +566,14 @@ if (0)
     ok(IsWindow(hwnd_view), "got %p\n", hwnd_view);
 
     hwnd_list = subclass_listview(hwnd_view);
-    if (!hwnd_list)
+    ret = SendMessageA(hwnd_list, LVM_GETITEMCOUNT, 0, 0);
+    if (!hwnd_list || !ret)
     {
-        win_skip("Failed to subclass ListView control\n");
+        if (!hwnd_list)
+            win_skip("Failed to subclass ListView control\n");
+        else
+            win_skip("Listview isn't filled with items on Vista+ for yet unknown reasons\n");
+
         IShellBrowser_Release(browser);
         IFolderView_Release(fv);
         IShellView_Release(view);
@@ -601,14 +631,14 @@ if (0)
     hr = IFolderView_GetFolder(fv, &IID_IShellFolder, NULL);
     ok(hr == E_POINTER, "got (0x%08x)\n", hr);
 
-    ref1 = IShellFolder_AddRef(desktop);
-    IShellFolder_Release(desktop);
+    ref1 = IShellFolder_AddRef(sysfolder);
+    IShellFolder_Release(sysfolder);
     hr = IFolderView_GetFolder(fv, &IID_IShellFolder, (void**)&folder);
     ok(hr == S_OK, "got (0x%08x)\n", hr);
-    ref2 = IShellFolder_AddRef(desktop);
-    IShellFolder_Release(desktop);
-    ok(ref1 == ref2, "expected same refcount, got %d\n", ref2);
-    ok(desktop == folder, "\n");
+    ref2 = IShellFolder_AddRef(sysfolder);
+    IShellFolder_Release(sysfolder);
+    ok(ref1+1 == ref2, "expected same refcount, got %d, expected %d\n", ref2, ref1+1);
+    ok(sysfolder == folder, "expected same instance\n");
 
     /* IFolderView::ItemCount */
 if (0)
@@ -627,6 +657,7 @@ if (0)
     IFolderView_Release(fv);
     IShellView_Release(view);
     IShellFolder_Release(desktop);
+    IShellFolder_Release(sysfolder);
 }
 
 static void test_GetItemObject(void)
-- 
1.5.6.5


--=-ILdr+BYEl11EjNRh6odT--




More information about the wine-patches mailing list