[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