[Wine-devel] Eter's patch is applied to winehq repo 01/24/11
builder на builder.office.etersoft.ru
builder на builder.office.etersoft.ru
Пн Янв 24 20:20:53 MSK 2011
New Etersoft's patches since last build time:
commit 38f85c37cc66e8f62e8397694c08f6e779988bb9
Author: Alexander Morozov <amorozov на etersoft.ru>
shell32/tests: Add tests for IShellDispatch::NameSpace.
---
commit 38f85c37cc66e8f62e8397694c08f6e779988bb9
Author: Alexander Morozov <amorozov на etersoft.ru>
Date: Fri Jan 21 18:28:40 2011 +0300
shell32/tests: Add tests for IShellDispatch::NameSpace.
diff --git a/dlls/shell32/tests/Makefile.in b/dlls/shell32/tests/Makefile.in
index d6a942c..53f33b1 100644
--- a/dlls/shell32/tests/Makefile.in
+++ b/dlls/shell32/tests/Makefile.in
@@ -1,5 +1,5 @@
TESTDLL = shell32.dll
-IMPORTS = shell32 ole32 oleaut32 user32 advapi32
+IMPORTS = shell32 ole32 oleaut32 shlwapi user32 advapi32
C_SRCS = \
appbar.c \
@@ -8,6 +8,7 @@ C_SRCS = \
ebrowser.c \
generated.c \
progman_dde.c \
+ shelldispatch.c \
shelllink.c \
shellole.c \
shellpath.c \
diff --git a/dlls/shell32/tests/shelldispatch.c b/dlls/shell32/tests/shelldispatch.c
new file mode 100644
index 0000000..9375d40
--- /dev/null
+++ b/dlls/shell32/tests/shelldispatch.c
@@ -0,0 +1,208 @@
+/*
+ * Unit tests for IShellDispatch
+ *
+ * Copyright 2010 Alexander Morozov for Etersoft
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define COBJMACROS
+#define NONAMELESSUNION
+#define NONAMELESSSTRUCT
+
+#include "shldisp.h"
+#include "shlobj.h"
+#include "shlwapi.h"
+#include "wine/test.h"
+
+static HRESULT (WINAPI *pSHGetFolderPathW)(HWND, int, HANDLE, DWORD, LPWSTR);
+static HRESULT (WINAPI *pSHGetNameFromIDList)(PCIDLIST_ABSOLUTE,SIGDN,PWSTR*);
+static HRESULT (WINAPI *pSHGetSpecialFolderLocation)(HWND, int, LPITEMIDLIST *);
+
+static void init_function_pointers(void)
+{
+ HMODULE hmod;
+
+ hmod = GetModuleHandleA("shell32.dll");
+ pSHGetFolderPathW = (void*)GetProcAddress(hmod, "SHGetFolderPathW");
+ pSHGetNameFromIDList = (void*)GetProcAddress(hmod, "SHGetNameFromIDList");
+ pSHGetSpecialFolderLocation = (void*)GetProcAddress(hmod,
+ "SHGetSpecialFolderLocation");
+}
+
+static void test_namespace(void)
+{
+ static const WCHAR winetestW[] = {'w','i','n','e','t','e','s','t',0};
+ static const WCHAR backslashW[] = {'\\',0};
+
+ static WCHAR tempW[MAX_PATH], curW[MAX_PATH];
+ HRESULT r;
+ IShellDispatch *sd;
+ Folder *folder;
+ VARIANT var;
+ BSTR title;
+ int len;
+
+ r = CoCreateInstance(&CLSID_Shell, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IShellDispatch, (LPVOID*)&sd);
+ if (r == REGDB_E_CLASSNOTREG) /* NT4 */
+ {
+ win_skip("skipping IShellDispatch tests\n");
+ return;
+ }
+ ok(SUCCEEDED(r), "CoCreateInstance failed: %08x\n", r);
+ if (FAILED(r))
+ return;
+
+ VariantInit(&var);
+ folder = (void*)0xdeadbeef;
+ r = IShellDispatch_NameSpace(sd, var, &folder);
+ todo_wine
+ ok(r == S_FALSE, "expected S_FALSE, got %08x\n", r);
+ ok(folder == NULL, "expected NULL, got %p\n", folder);
+
+ V_VT(&var) = VT_I4;
+ V_I4(&var) = -1;
+ r = IShellDispatch_NameSpace(sd, var, &folder);
+ todo_wine
+ ok(r == S_FALSE, "expected S_FALSE, got %08x\n", r);
+
+ V_VT(&var) = VT_I4;
+ V_I4(&var) = ssfPROGRAMFILES;
+ r = IShellDispatch_NameSpace(sd, var, &folder);
+ todo_wine
+ ok(r == S_OK, "IShellDispatch::NameSpace failed: %08x\n", r);
+ if (r == S_OK)
+ {
+ r = Folder_get_Title(folder, &title);
+ todo_wine
+ ok(r == S_OK, "Folder::get_Title failed: %08x\n", r);
+ if (r == S_OK)
+ {
+ /* On Win2000-2003 title is equal to program files directory name in
+ HKLM\Software\Microsoft\Windows\CurrentVersion\ProgramFilesDir.
+ On newer Windows it seems constant and is not changed
+ if the program files directory name is changed */
+ if (pSHGetSpecialFolderLocation && pSHGetNameFromIDList)
+ {
+ LPITEMIDLIST pidl;
+ PWSTR name;
+
+ r = pSHGetSpecialFolderLocation(NULL, CSIDL_PROGRAM_FILES, &pidl);
+ ok(r == S_OK, "SHGetSpecialFolderLocation failed: %08x\n", r);
+ r = pSHGetNameFromIDList(pidl, SIGDN_NORMALDISPLAY, &name);
+ ok(r == S_OK, "SHGetNameFromIDList failed: %08x\n", r);
+ todo_wine
+ ok(!lstrcmpW(title, name), "expected %s, got %s\n",
+ wine_dbgstr_w(name), wine_dbgstr_w(title));
+ CoTaskMemFree(name);
+ CoTaskMemFree(pidl);
+ }
+ else if (pSHGetFolderPathW)
+ {
+ static WCHAR path[MAX_PATH];
+ WCHAR *p;
+
+ r = pSHGetFolderPathW(NULL, CSIDL_PROGRAM_FILES, NULL,
+ SHGFP_TYPE_CURRENT, path);
+ ok(r == S_OK, "SHGetFolderPath failed: %08x\n", r);
+ p = PathFindFileNameW(path);
+ ok(!lstrcmpW(title, p), "expected %s, got %s\n",
+ wine_dbgstr_w(p), wine_dbgstr_w(title));
+ }
+ else skip("skipping Folder::get_Title test\n");
+ SysFreeString(title);
+ }
+ Folder_Release(folder);
+ }
+
+ GetTempPathW(MAX_PATH, tempW);
+ GetCurrentDirectoryW(MAX_PATH, curW);
+ SetCurrentDirectoryW(tempW);
+ CreateDirectoryW(winetestW, NULL);
+ V_VT(&var) = VT_BSTR;
+ V_BSTR(&var) = SysAllocString(winetestW);
+ r = IShellDispatch_NameSpace(sd, var, &folder);
+ todo_wine
+ ok(r == S_FALSE, "expected S_FALSE, got %08x\n", r);
+ SysFreeString(V_BSTR(&var));
+
+ GetFullPathNameW(winetestW, MAX_PATH, tempW, NULL);
+ V_VT(&var) = VT_BSTR;
+ V_BSTR(&var) = SysAllocString(tempW);
+ r = IShellDispatch_NameSpace(sd, var, &folder);
+ todo_wine
+ ok(r == S_OK, "IShellDispatch::NameSpace failed: %08x\n", r);
+ if (r == S_OK)
+ {
+ r = Folder_get_Title(folder, &title);
+ todo_wine
+ ok(r == S_OK, "Folder::get_Title failed: %08x\n", r);
+ if (r == S_OK)
+ {
+ todo_wine
+ ok(!lstrcmpW(title, winetestW), "bad title: %s\n",
+ wine_dbgstr_w(title));
+ SysFreeString(title);
+ }
+ Folder_Release(folder);
+ }
+ SysFreeString(V_BSTR(&var));
+
+ len = lstrlenW(tempW);
+ if (len < MAX_PATH - 1)
+ {
+ lstrcatW(tempW, backslashW);
+ V_VT(&var) = VT_BSTR;
+ V_BSTR(&var) = SysAllocString(tempW);
+ r = IShellDispatch_NameSpace(sd, var, &folder);
+ todo_wine
+ ok(r == S_OK, "IShellDispatch::NameSpace failed: %08x\n", r);
+ if (r == S_OK)
+ {
+ r = Folder_get_Title(folder, &title);
+ todo_wine
+ ok(r == S_OK, "Folder::get_Title failed: %08x\n", r);
+ if (r == S_OK)
+ {
+ todo_wine
+ ok(!lstrcmpW(title, winetestW), "bad title: %s\n",
+ wine_dbgstr_w(title));
+ SysFreeString(title);
+ }
+ Folder_Release(folder);
+ }
+ SysFreeString(V_BSTR(&var));
+ }
+
+ RemoveDirectoryW(winetestW);
+ SetCurrentDirectoryW(curW);
+ IShellDispatch_Release(sd);
+}
+
+START_TEST(shelldispatch)
+{
+ HRESULT r;
+
+ r = CoInitialize(NULL);
+ ok(SUCCEEDED(r), "CoInitialize failed: %08x\n", r);
+ if (FAILED(r))
+ return;
+
+ init_function_pointers();
+ test_namespace();
+
+ CoUninitialize();
+}
Подробная информация о списке рассылки Wine-devel