[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