Jay Yang : shell32/tests: Add tests for SHCreateDefaultContextMenu.

Alexandre Julliard julliard at winehq.org
Tue Aug 2 14:18:28 CDT 2011


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

Author: Jay Yang <jkelleyy at gmail.com>
Date:   Mon Aug  1 17:47:52 2011 -0400

shell32/tests: Add tests for SHCreateDefaultContextMenu.

---

 dlls/shell32/tests/shlfolder.c |   90 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 90 insertions(+), 0 deletions(-)

diff --git a/dlls/shell32/tests/shlfolder.c b/dlls/shell32/tests/shlfolder.c
index 0006155..c0533cb 100644
--- a/dlls/shell32/tests/shlfolder.c
+++ b/dlls/shell32/tests/shlfolder.c
@@ -71,6 +71,7 @@ static HRESULT (WINAPI *pSHGetIDListFromObject)(IUnknown*, PIDLIST_ABSOLUTE*);
 static HRESULT (WINAPI *pSHGetItemFromObject)(IUnknown*,REFIID,void**);
 static BOOL (WINAPI *pIsWow64Process)(HANDLE, PBOOL);
 static UINT (WINAPI *pGetSystemWow64DirectoryW)(LPWSTR, UINT);
+static HRESULT (WINAPI *pSHCreateDefaultContextMenu)(const DEFCONTEXTMENU*,REFIID,void**);
 
 static WCHAR *make_wstr(const char *str)
 {
@@ -126,6 +127,7 @@ static void init_function_pointers(void)
     MAKEFUNC(SHGetItemFromDataObject);
     MAKEFUNC(SHGetIDListFromObject);
     MAKEFUNC(SHGetItemFromObject);
+    MAKEFUNC(SHCreateDefaultContextMenu);
 #undef MAKEFUNC
 
 #define MAKEFUNC_ORD(f, ord) (p##f = (void*)GetProcAddress(hmod, (LPSTR)(ord)))
@@ -4475,6 +4477,93 @@ static void test_SHChangeNotify(void)
     ok(br == TRUE, "RemoveDirectory failed: %d\n", GetLastError());
 }
 
+static void test_SHCreateDefaultContextMenu(void)
+{
+    HKEY keys[16];
+    WCHAR path[MAX_PATH];
+    IShellFolder *desktop,*folder;
+    IPersistFolder2 *persist;
+    IContextMenu *cmenu;
+    LONG status;
+    LPITEMIDLIST pidlFolder, pidl_child, pidl;
+    DEFCONTEXTMENU cminfo;
+    HRESULT hr;
+    UINT i;
+    const WCHAR filename[] =
+        {'\\','t','e','s','t','d','i','r','\\','t','e','s','t','1','.','t','x','t',0};
+    if(!pSHCreateDefaultContextMenu)
+    {
+        todo_wine win_skip("SHCreateDefaultContextMenu missing.\n");
+        return;
+    }
+
+    if(!pSHBindToParent)
+    {
+        skip("SHBindToParent missing.\n");
+        return;
+    }
+
+    GetCurrentDirectoryW(MAX_PATH, path);
+    if(!lstrlenW(path))
+    {
+        skip("GetCurrentDirectoryW returned an empty string.\n");
+        return;
+    }
+    lstrcatW(path, filename);
+    SHGetDesktopFolder(&desktop);
+
+    CreateFilesFolders();
+
+    hr = IShellFolder_ParseDisplayName(desktop, NULL, NULL, path, NULL, &pidl, 0);
+    ok(hr == S_OK || broken(hr == E_FAIL) /* WinME */, "Got 0x%08x\n", hr);
+    if(SUCCEEDED(hr))
+    {
+
+        hr = pSHBindToParent(pidl, &IID_IShellFolder, (void**)&folder, (LPCITEMIDLIST*)&pidl_child);
+        ok(hr == S_OK, "Got 0x%08x\n", hr);
+
+        IShellFolder_QueryInterface(folder,&IID_IPersistFolder2,(void**)&persist);
+        IPersistFolder2_GetCurFolder(persist,&pidlFolder);
+        IPersistFolder2_Release(persist);
+        if(SUCCEEDED(hr))
+        {
+
+            cminfo.hwnd=NULL;
+            cminfo.pcmcb=NULL;
+            cminfo.psf=folder;
+            cminfo.pidlFolder=NULL;
+            cminfo.apidl=(LPCITEMIDLIST*)&pidl_child;
+            cminfo.cidl=1;
+            cminfo.aKeys=NULL;
+            cminfo.cKeys=0;
+            cminfo.punkAssociationInfo=NULL;
+            hr = pSHCreateDefaultContextMenu(&cminfo,&IID_IContextMenu,(void**)&cmenu);
+            ok(hr==S_OK,"Got 0x%08x\n", hr);
+            IContextMenu_Release(cmenu);
+            cminfo.pidlFolder=pidlFolder;
+            hr = pSHCreateDefaultContextMenu(&cminfo,&IID_IContextMenu,(void**)&cmenu);
+            ok(hr==S_OK,"Got 0x%08x\n", hr);
+            IContextMenu_Release(cmenu);
+            status = RegOpenKeyExA(HKEY_CLASSES_ROOT,"*",0,KEY_READ,keys);
+            if(status==ERROR_SUCCESS){
+                for(i=1;i<16;i++)
+                    keys[i]=keys[0];
+                cminfo.aKeys=keys;
+                cminfo.cKeys=16;
+                hr = pSHCreateDefaultContextMenu(&cminfo,&IID_IContextMenu,(void**)&cmenu);
+                RegCloseKey(keys[0]);
+                ok(hr==S_OK,"Got 0x%08x\n", hr);
+                IContextMenu_Release(cmenu);
+            }
+        }
+        ILFree(pidlFolder);
+        IShellFolder_Release(folder);
+    }
+    IShellFolder_Release(desktop);
+    ILFree(pidl);
+    Cleanup();
+}
+
 START_TEST(shlfolder)
 {
     init_function_pointers();
@@ -4509,6 +4598,7 @@ START_TEST(shlfolder)
     test_SHChangeNotify();
     test_ShellItemBindToHandler();
     test_ShellItemGetAttributes();
+    test_SHCreateDefaultContextMenu();
 
     OleUninitialize();
 }




More information about the wine-cvs mailing list