[PATCH 2/2] shell32: additional tests for IQueryAssociations
Theodore Dubois
tblodt at icloud.com
Wed Mar 16 15:19:51 CDT 2016
Tests that IQueryAssociations::GetString works
correctly for ASSOCSTR_DEFAULTICON and
ASSOCSTR_FRIENDLYDOCNAME when passing both a
progid and a file extension.
Signed-off-by: Theodore Dubois <tblodt at icloud.com>
---
dlls/shell32/tests/assoc.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
diff --git a/dlls/shell32/tests/assoc.c b/dlls/shell32/tests/assoc.c
index 8aa2535..450167b 100644
--- a/dlls/shell32/tests/assoc.c
+++ b/dlls/shell32/tests/assoc.c
@@ -100,13 +100,80 @@ static struct assoc_getstring_test getstring_tests[] =
{ NULL }
};
+static void getstring_test(LPCWSTR assocName, HKEY progIdKey, ASSOCSTR str, LPCWSTR expected_string, int line_num)
+{
+ IQueryAssociations *assoc;
+ HRESULT hr;
+ WCHAR *buffer;
+ DWORD len;
+
+ /* I would like to #define gs_ok to call ok and return false if !condition, but varargs macros are C99. */
+ hr = CoCreateInstance(&CLSID_QueryAssociations, NULL, CLSCTX_INPROC_SERVER, &IID_IQueryAssociations, (void*)&assoc);
+ ok(hr == S_OK, "line %d: failed to create IQueryAssociations, 0x%x\n", line_num, hr);
+ hr = IQueryAssociations_Init(assoc, 0, assocName, progIdKey, NULL);
+ ok(hr == S_OK, "line %d: IQueryAssociations::Init failed, 0x%x\n", line_num, hr);
+
+ hr = IQueryAssociations_GetString(assoc, 0, str, NULL, NULL, &len);
+ if (hr != S_FALSE) {
+ if (expected_string) {
+ ok(SUCCEEDED(hr), "line %d: GetString returned 0x%x, expected success\n", line_num, hr);
+ } else {
+ ok(FAILED(hr), "line %d: GetString returned 0x%x, expected failure\n", line_num, hr);
+ }
+ }
+
+ buffer = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
+ ok(buffer != NULL, "line %d: out of memory\n", line_num);
+ hr = IQueryAssociations_GetString(assoc, 0, str, NULL, buffer, &len);
+
+ if (expected_string) {
+ ok(lstrcmpW(buffer, expected_string) == 0, "line %d: GetString returned %s, expected %s\n", line_num,
+ wine_dbgstr_w(buffer), wine_dbgstr_w(expected_string));
+ }
+}
+
static void test_IQueryAssociations_GetString(void)
{
+ static WCHAR test_extensionW[] = {'.','t','e','s','t',0};
+ static WCHAR test_progidW[] = {'t','e','s','t','f','i','l','e',0};
+ static WCHAR DefaultIconW[] = {'D','e','f','a','u','l','t','I','c','o','n',0};
+ /* folder.ico, why not */
+ static WCHAR test_iconW[] = {'s','h','e','l','l','3','2','.','d','l','l',',','1',0};
+ HKEY test_extension_key;
+ HKEY test_progid_key;
+ HKEY test_defaulticon_key;
+ LRESULT r;
+
struct assoc_getstring_test *ptr = getstring_tests;
IQueryAssociations *assoc;
HRESULT hr;
DWORD len;
int i = 0;
+ BOOL getstring_test_result;
+
+ r = RegCreateKeyExW(HKEY_CLASSES_ROOT, test_extensionW, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &test_extension_key, NULL);
+ ok(r == ERROR_SUCCESS, "RegCreateKeyExW(HKCR, \".test\") failed: 0x%lx\n", r);
+ r = RegSetValueExW(test_extension_key, NULL, 0, REG_SZ, (PBYTE)test_progidW, sizeof(test_progidW));
+ ok(r == ERROR_SUCCESS, "RegSetValueExW(HKCR\\.test, NULL, \"testfile\") failed: 0x%lx\n", r);
+
+ /* adding progid key with no information shuld fail to return information */
+ r = RegCreateKeyExW(HKEY_CLASSES_ROOT, test_progidW, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &test_progid_key, NULL);
+ ok(r == ERROR_SUCCESS, "RegCreateKeyExW(HKCR, \"testfile\") failed: 0x%lx\n", r);
+ getstring_test(test_extensionW, NULL, ASSOCSTR_DEFAULTICON, NULL, __LINE__);
+ getstring_test(test_progidW, NULL, ASSOCSTR_DEFAULTICON, NULL, __LINE__);
+ getstring_test(NULL, test_progid_key, ASSOCSTR_DEFAULTICON, NULL, __LINE__);
+
+ /* adding information to the progid should return that information */
+ r = RegCreateKeyExW(test_progid_key, DefaultIconW, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &test_defaulticon_key, NULL);
+ ok(r == ERROR_SUCCESS, "RegCreateKeyExW(HKCR\\testfile\\DefaultIcon) failed: 0x%lx\n", r);
+ r = RegSetValueExW(test_defaulticon_key, NULL, 0, REG_SZ, (PBYTE)test_iconW, sizeof(test_iconW));
+ ok(r == ERROR_SUCCESS, "RegSetValueExW(HKCR\\testfile\\DefaultIcon, NULL, \"folder.ico\") failed: 0x%lx\n", r);
+ getstring_test(test_extensionW, NULL, ASSOCSTR_DEFAULTICON, test_iconW, __LINE__);
+ getstring_test(test_progidW, NULL, ASSOCSTR_DEFAULTICON, test_iconW, __LINE__);
+ getstring_test(NULL, test_progid_key, ASSOCSTR_DEFAULTICON, test_iconW, __LINE__);
+
+ RegDeleteKeyW(HKEY_CLASSES_ROOT, test_extensionW);
+ RegDeleteKeyW(HKEY_CLASSES_ROOT, test_progidW);
hr = CoCreateInstance(&CLSID_QueryAssociations, NULL, CLSCTX_INPROC_SERVER, &IID_IQueryAssociations, (void*)&assoc);
ok(hr == S_OK, "failed to create object, 0x%x\n", hr);
--
2.5.4 (Apple Git-61)
More information about the wine-patches
mailing list