Lei Zhang : shlwapi: Properly handle pszExtra in IQueryAssociations_GetString.

Alexandre Julliard julliard at winehq.org
Wed Oct 15 10:08:27 CDT 2008


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

Author: Lei Zhang <thestig at google.com>
Date:   Tue Oct 14 15:06:45 2008 -0700

shlwapi: Properly handle pszExtra in IQueryAssociations_GetString.

---

 dlls/shlwapi/tests/assoc.c |   72 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 72 insertions(+), 0 deletions(-)

diff --git a/dlls/shlwapi/tests/assoc.c b/dlls/shlwapi/tests/assoc.c
index e5d40d1..2e383bb 100644
--- a/dlls/shlwapi/tests/assoc.c
+++ b/dlls/shlwapi/tests/assoc.c
@@ -32,6 +32,19 @@ 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 };
 
+/* copied from libs/wine/string.c */
+WCHAR *strstrW(const WCHAR *str, const WCHAR *sub)
+{
+    while (*str)
+    {
+        const WCHAR *p1 = str, *p2 = sub;
+        while (*p1 && *p2 && *p1 == *p2) { p1++; p2++; }
+        if (!*p2) return (WCHAR *)str;
+        str++;
+    }
+    return NULL;
+}
+
 static void test_getstring_bad(void)
 {
     HRESULT hr;
@@ -127,8 +140,67 @@ static void test_getstring_basic(void)
     HeapFree(GetProcessHeap(), 0, friendlyName);
 }
 
+static void test_getstring_no_extra(void)
+{
+    LONG ret;
+    HKEY hkey;
+    HRESULT hr;
+    static const WCHAR dotWinetest[] = {
+        '.','w','i','n','e','t','e','s','t',0
+    };
+    static const WCHAR winetestfile[] = {
+        'w','i','n','e','t','e','s','t', 'f','i','l','e',0
+    };
+    static const WCHAR winetestfileAction[] = {
+        'w','i','n','e','t','e','s','t','f','i','l','e',
+        '\\','s','h','e','l','l',
+        '\\','f','o','o',
+        '\\','c','o','m','m','a','n','d',0
+    };
+    static const WCHAR action[] = {
+        'n','o','t','e','p','a','d','.','e','x','e',0
+    };
+    WCHAR buf[MAX_PATH];
+    DWORD len = MAX_PATH;
+
+    ret = RegCreateKeyW(HKEY_CLASSES_ROOT, dotWinetest, &hkey);
+    if (ret != ERROR_SUCCESS)
+        skip("failed to create dotWinetest key\n");
+    ret = RegSetValueW(hkey, NULL, REG_SZ, winetestfile,
+                       lstrlenW(winetestfile));
+    RegCloseKey(hkey);
+    if (ret != ERROR_SUCCESS)
+    {
+        RegDeleteTreeW(HKEY_CLASSES_ROOT, dotWinetest);
+        skip("failed to set dotWinetest key\n");
+    }
+
+    ret = RegCreateKeyW(HKEY_CLASSES_ROOT, winetestfileAction, &hkey);
+    if (ret != ERROR_SUCCESS)
+    {
+        RegDeleteTreeW(HKEY_CLASSES_ROOT, dotWinetest);
+        skip("failed to create winetestfileAction key\n");
+    }
+    ret = RegSetValueW(hkey, NULL, REG_SZ, action, lstrlenW(action));
+    RegCloseKey(hkey);
+    if (ret != ERROR_SUCCESS)
+    {
+        RegDeleteTreeW(HKEY_CLASSES_ROOT, dotWinetest);
+        RegDeleteTreeW(HKEY_CLASSES_ROOT, winetestfile);
+        skip("failed to set winetestfileAction key\n");
+    }
+
+    hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, dotWinetest, NULL,
+                           buf, &len);
+    expect_hr(S_OK, hr);
+    ok(strstrW(buf, action) != NULL, "exe path does not contain notepad\n");
+    RegDeleteTreeW(HKEY_CLASSES_ROOT, dotWinetest);
+    RegDeleteTreeW(HKEY_CLASSES_ROOT, winetestfile);
+}
+
 START_TEST(assoc)
 {
     test_getstring_bad();
     test_getstring_basic();
+    test_getstring_no_extra();
 }




More information about the wine-cvs mailing list