Lei Zhang : shlwapi: Add some tests for AssocQueryStringW.
Alexandre Julliard
julliard at winehq.org
Mon Oct 13 06:38:51 CDT 2008
Module: wine
Branch: master
Commit: 0c568c2ae8c190c1c513e8adf603e273910fb681
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0c568c2ae8c190c1c513e8adf603e273910fb681
Author: Lei Zhang <thestig at google.com>
Date: Fri Oct 10 22:20:51 2008 -0700
shlwapi: Add some tests for AssocQueryStringW.
---
dlls/shlwapi/tests/Makefile.in | 1 +
dlls/shlwapi/tests/assoc.c | 134 ++++++++++++++++++++++++++++++++++++++++
include/shlwapi.h | 1 +
3 files changed, 136 insertions(+), 0 deletions(-)
diff --git a/dlls/shlwapi/tests/Makefile.in b/dlls/shlwapi/tests/Makefile.in
index cba37b8..d626ed9 100644
--- a/dlls/shlwapi/tests/Makefile.in
+++ b/dlls/shlwapi/tests/Makefile.in
@@ -6,6 +6,7 @@ TESTDLL = shlwapi.dll
IMPORTS = shlwapi advapi32 ole32 oleaut32 kernel32
CTESTS = \
+ assoc.c \
clist.c \
clsid.c \
generated.c \
diff --git a/dlls/shlwapi/tests/assoc.c b/dlls/shlwapi/tests/assoc.c
new file mode 100644
index 0000000..3fce90d
--- /dev/null
+++ b/dlls/shlwapi/tests/assoc.c
@@ -0,0 +1,134 @@
+/* Unit test suite for SHLWAPI IQueryAssociations functions
+ *
+ * Copyright 2008 Google (Lei Zhang)
+ *
+ * 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
+ */
+
+#include <stdarg.h>
+
+#include "wine/test.h"
+#include "shlwapi.h"
+
+#define expect(expected, got) ok ( expected == got, "Expected %d, got %d\n", expected, got)
+#define expect_hr(expected, got) ok ( expected == got, "Expected %08x, got %08x\n", expected, got)
+
+/* Every version of Windows with IE should have this association? */
+static const WCHAR dotHtml[] = { '.','h','t','m','l',0 };
+static const WCHAR badBad[] = { 'b','a','d','b','a','d',0 };
+static const WCHAR dotBad[] = { '.','b','a','d',0 };
+static const WCHAR open[] = { 'o','p','e','n',0 };
+static const WCHAR invalid[] = { 'i','n','v','a','l','i','d',0 };
+
+static void test_getstring_bad(void)
+{
+ HRESULT hr;
+ DWORD len;
+
+ hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, NULL, open, NULL, &len);
+ todo_wine expect_hr(E_INVALIDARG, hr);
+ hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, badBad, open, NULL, &len);
+ todo_wine expect_hr(E_FAIL, hr);
+ hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, dotBad, open, NULL, &len);
+ todo_wine expect_hr(E_FAIL, hr);
+ hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, dotHtml, invalid, NULL,
+ &len);
+ todo_wine expect_hr(0x80070002, hr); /* NOT FOUND */
+ hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, dotHtml, open, NULL, NULL);
+ todo_wine expect_hr(E_UNEXPECTED, hr);
+
+ hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, NULL, open, NULL, &len);
+ todo_wine expect_hr(E_INVALIDARG, hr);
+ hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, badBad, open, NULL,
+ &len);
+ todo_wine expect_hr(E_FAIL, hr);
+ hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, dotBad, open, NULL,
+ &len);
+ todo_wine expect_hr(E_FAIL, hr);
+ hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, dotHtml, invalid, NULL,
+ &len);
+ todo_wine expect_hr(0x80070002, hr); /* NOT FOUND */
+ hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, dotHtml, open, NULL,
+ NULL);
+ todo_wine expect_hr(E_UNEXPECTED, hr);
+}
+
+static void test_getstring_basic(void)
+{
+ HRESULT hr;
+ WCHAR * friendlyName;
+ WCHAR * executableName;
+ DWORD len, len2, slen;
+
+ hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, dotHtml, open, NULL, &len);
+ todo_wine expect_hr(S_FALSE, hr);
+ if (hr != S_FALSE)
+ {
+ skip("failed to get initial len\n");
+ return;
+ }
+
+ executableName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ len * sizeof(WCHAR));
+ if (!executableName)
+ {
+ skip("failed to allocate memory\n");
+ return;
+ }
+
+ len2 = len;
+ hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, dotHtml, open,
+ executableName, &len2);
+ expect_hr(S_OK, hr);
+ slen = lstrlenW(executableName) + 1;
+ expect(len, len2);
+ expect(len, slen);
+
+ hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, dotHtml, open, NULL,
+ &len);
+ expect_hr(S_FALSE, hr);
+ if (hr != S_FALSE)
+ {
+ HeapFree(GetProcessHeap(), 0, executableName);
+ skip("failed to get initial len\n");
+ return;
+ }
+
+ friendlyName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+ len * sizeof(WCHAR));
+ if (!friendlyName)
+ {
+ HeapFree(GetProcessHeap(), 0, executableName);
+ skip("failed to allocate memory\n");
+ return;
+ }
+
+ len2 = len;
+ hr = AssocQueryStringW(0, ASSOCSTR_FRIENDLYAPPNAME, dotHtml, open,
+ friendlyName, &len2);
+ expect_hr(S_OK, hr);
+ slen = lstrlenW(friendlyName) + 1;
+ expect(len, len2);
+ expect(len, slen);
+
+ HeapFree(GetProcessHeap(), 0, executableName);
+ HeapFree(GetProcessHeap(), 0, friendlyName);
+}
+
+START_TEST(assoc)
+{
+ test_getstring_bad();
+ test_getstring_basic();
+}
diff --git a/include/shlwapi.h b/include/shlwapi.h
index e4100fc..d1669e6 100644
--- a/include/shlwapi.h
+++ b/include/shlwapi.h
@@ -193,6 +193,7 @@ enum
ASSOCF_REMAPRUNDLL = 0x080, /* Get rundll args */
ASSOCF_NOFIXUPS = 0x100, /* Don't fixup errors */
ASSOCF_IGNOREBASECLASS = 0x200, /* Don't read baseclass */
+ ASSOCF_INIT_IGNOREUNKNOWN = 0x400, /* Fail for unknown progid */
};
typedef DWORD ASSOCF;
More information about the wine-cvs
mailing list