[PATCH 1/3] shell32/tests: Test that ShellView picks up external file changes

Nigel Baillie metreckk at gmail.com
Tue Jan 8 19:52:14 CST 2019


Signed-off-by: Nigel Baillie <metreckk at gmail.com>
---
 dlls/shell32/tests/shlview.c | 89 ++++++++++++++++++++++++++++++++++++
 1 file changed, 89 insertions(+)

diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c
index f5d96c8d44..4d0cf641a7 100644
--- a/dlls/shell32/tests/shlview.c
+++ b/dlls/shell32/tests/shlview.c
@@ -1502,6 +1502,94 @@ todo_wine
     IUnknown_Release(unk);
 }
 
+static void do_events(void)
+{
+    MSG msg;
+    while(PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE)){
+        TranslateMessage(&msg);
+        DispatchMessageA(&msg);
+    }
+}
+
+static void test_external_change(void)
+{
+    IShellFolder *desktop, *folder;
+    FOLDERSETTINGS settings;
+    IShellView *view;
+    IShellBrowser *browser;
+    IFolderView *fv;
+    HWND hwnd_view;
+    LPITEMIDLIST pidl;
+    HRESULT hr;
+    HANDLE file;
+    INT count;
+    RECT r;
+    BOOLEAN b;
+    static const WCHAR test_folder_path[] =
+        {'C',':','\\','s','h','l','v','i','e','w','_','t','e','s','t',0};
+    static const WCHAR test_file_path[] =
+        {'C',':','\\','s','h','l','v','i','e','w','_','t','e','s','t','\\','f','.','t','x','t',0};
+
+    /* create test folder, get a PIDL to it */
+    b = CreateDirectoryW(test_folder_path, NULL);
+    ok(b, "failed to create test directory\n");
+
+    pidl = ILCreateFromPathW(test_folder_path);
+    ok(pidl != NULL, "couldn't get a PIDL to the test directory\n");
+
+    /* Get an IFolderView for the test folder */
+    hr = SHGetDesktopFolder(&desktop);
+    ok(hr == S_OK, "got (0x%08x) when trying to grab desktop folder\n", hr);
+
+    hr = IShellFolder_BindToObject(desktop, pidl, NULL, &IID_IShellFolder, (void**)&folder);
+    ok(hr == S_OK, "got (0x%08x) from BindToObject\n", hr);
+
+    hr = IShellFolder_CreateViewObject(folder, NULL, &IID_IShellView, (void**)&view);
+    ok(hr == S_OK, "got (0x%08x) from CreateViewObject\n", hr);
+
+    hr = IShellView_QueryInterface(view, &IID_IFolderView, (void**)&fv);
+    ok(hr == S_OK, "got (0x%08x) when trying to get an IFolderView interface\n", hr);
+
+    /* create window */
+    browser = IShellBrowserImpl_Construct();
+    settings.ViewMode = FVM_ICON;
+    settings.fFlags = 0;
+    hwnd_view = (HWND)0xdeadbeef;
+    SetRect(&r, 0, 0, 100, 100);
+    hr = IShellView_CreateViewWindow(view, NULL, &settings, browser, &r, &hwnd_view);
+    ok(hr == S_OK, "got (0x%08x) when trying to create view window\n", hr);
+    ok(IsWindow(hwnd_view), "got %p instead of a valid HWND\n", hwnd_view);
+
+    /* item count should be zero */
+    IFolderView_ItemCount(fv, SVGIO_ALLVIEW, &count);
+    ok(count == 0, "count should've been 0, but was %i\n", count);
+
+    /* create test file */
+    file = CreateFileW(test_file_path, 0,
+                       FILE_SHARE_READ | FILE_SHARE_WRITE,
+                       NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+    ok(file != INVALID_HANDLE_VALUE, "failed to create test file\n");
+    if (file != INVALID_HANDLE_VALUE)
+        CloseHandle(file); /* we don't actually need the file open */
+
+    /* let the shlview figure out that it was created */
+    Sleep(1000);
+    do_events();
+
+    /* it should now show the new file! */
+    IFolderView_ItemCount(fv, SVGIO_ALLVIEW, &count);
+    ok(count == 1, "count should've been 1, but was %i\n", count);
+
+    /* cleanup */
+    hr = IShellView_DestroyViewWindow(view);
+    DeleteFileW(test_file_path);
+    RemoveDirectoryW(test_folder_path);
+    IShellBrowser_Release(browser);
+    IFolderView_Release(fv);
+    IShellView_Release(view);
+    IShellFolder_Release(desktop);
+}
+
 START_TEST(shlview)
 {
     OleInitialize(NULL);
@@ -1518,6 +1606,7 @@ START_TEST(shlview)
     test_SHCreateShellFolderView();
     test_SHCreateShellFolderViewEx();
     test_newmenu();
+    test_external_change();
 
     OleUninitialize();
 }
-- 
2.19.1




More information about the wine-devel mailing list