2 * PROJECT: ReactOS API tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for SHParseDisplayName
5 * PROGRAMMERS: Thomas Faber <thomas.faber@reactos.org>
10 #include <ndk/umtypes.h>
13 START_TEST(SHParseDisplayName
)
16 PIDLIST_ABSOLUTE pidl
;
17 WCHAR systemDir
[MAX_PATH
];
19 WCHAR resultPath
[MAX_PATH
];
20 BOOL winv6
= LOBYTE(LOWORD(GetVersion())) >= 6;
22 CoInitializeEx(NULL
, COINIT_APARTMENTTHREADED
);
24 GetSystemDirectoryW(systemDir
, RTL_NUMBER_OF(systemDir
));
25 SetCurrentDirectoryW(systemDir
);
27 /* The code below relies on these properties */
28 ok(systemDir
[1] == L
':', "systemDir = %ls\n", systemDir
);
29 ok(systemDir
[2] == L
'\\', "systemDir = %ls\n", systemDir
);
30 ok(systemDir
[wcslen(systemDir
) - 1] != L
'\\', "systemDir = %ls\n", systemDir
);
31 ok(wcschr(systemDir
+ 3, L
'\\') != NULL
, "systemDir = %ls\n", systemDir
);
36 hr
= SHParseDisplayName(NULL
, NULL
, &pidl
, 0, NULL
);
37 EndSeh(STATUS_SUCCESS
);
38 ok(hr
== E_OUTOFMEMORY
|| hr
== E_INVALIDARG
, "hr = %lx\n", hr
);
39 ok(pidl
== NULL
, "pidl = %p\n", pidl
);
40 if (pidl
) CoTaskMemFree(pidl
);
44 hr
= SHParseDisplayName(L
"", NULL
, &pidl
, 0, NULL
);
45 ok(hr
== S_OK
, "hr = %lx\n", hr
);
46 ok(pidl
!= NULL
, "pidl = %p\n", pidl
);
47 resultPath
[0] = UNICODE_NULL
;
48 SHGetPathFromIDListW(pidl
, resultPath
);
49 ok_wstr(resultPath
, L
"");
50 if (pidl
) CoTaskMemFree(pidl
);
53 path
[0] = systemDir
[0];
55 path
[2] = UNICODE_NULL
;
57 hr
= SHParseDisplayName(path
, NULL
, &pidl
, 0, NULL
);
60 /* Win7 accepts this and returns C:\ */
61 ok(hr
== S_OK
, "hr = %lx\n", hr
);
62 ok(pidl
!= NULL
, "pidl = %p\n", pidl
);
63 resultPath
[0] = UNICODE_NULL
;
64 SHGetPathFromIDListW(pidl
, resultPath
);
66 path
[3] = UNICODE_NULL
;
67 ok(!wcsicmp(resultPath
, path
), "Got %ls, expected %ls\n", resultPath
, path
);
71 /* Win2003 fails this */
72 ok(hr
== E_INVALIDARG
, "hr = %lx\n", hr
);
73 ok(pidl
== NULL
, "pidl = %p\n", pidl
);
75 if (pidl
) CoTaskMemFree(pidl
);
78 path
[0] = systemDir
[0];
81 path
[3] = UNICODE_NULL
;
83 hr
= SHParseDisplayName(path
, NULL
, &pidl
, 0, NULL
);
84 ok(hr
== S_OK
, "hr = %lx\n", hr
);
85 ok(pidl
!= NULL
, "pidl = %p\n", pidl
);
86 resultPath
[0] = UNICODE_NULL
;
87 SHGetPathFromIDListW(pidl
, resultPath
);
88 ok(!wcsicmp(resultPath
, path
), "Got %ls, expected %ls\n", resultPath
, path
);
89 if (pidl
) CoTaskMemFree(pidl
);
92 path
[0] = systemDir
[0];
96 path
[4] = UNICODE_NULL
;
98 hr
= SHParseDisplayName(path
, NULL
, &pidl
, 0, NULL
);
99 ok(hr
== E_INVALIDARG
, "hr = %lx\n", hr
);
100 ok(pidl
== NULL
, "pidl = %p\n", pidl
);
101 if (pidl
) CoTaskMemFree(pidl
);
104 StringCbCopyW(path
, sizeof(path
), systemDir
);
105 wcschr(path
+ 3, L
'\\')[0] = UNICODE_NULL
;
107 hr
= SHParseDisplayName(path
, NULL
, &pidl
, 0, NULL
);
108 ok(hr
== S_OK
, "hr = %lx\n", hr
);
109 ok(pidl
!= NULL
, "pidl = %p\n", pidl
);
110 resultPath
[0] = UNICODE_NULL
;
111 SHGetPathFromIDListW(pidl
, resultPath
);
112 ok(!wcsicmp(resultPath
, path
), "Got %ls, expected %ls\n", resultPath
, path
);
113 if (pidl
) CoTaskMemFree(pidl
);
116 StringCbCopyW(path
, sizeof(path
), systemDir
);
117 wcschr(path
+ 3, L
'\\')[1] = UNICODE_NULL
;
119 hr
= SHParseDisplayName(path
, NULL
, &pidl
, 0, NULL
);
120 ok(hr
== S_OK
, "hr = %lx\n", hr
);
121 ok(pidl
!= NULL
, "pidl = %p\n", pidl
);
122 resultPath
[0] = UNICODE_NULL
;
123 SHGetPathFromIDListW(pidl
, resultPath
);
124 path
[wcslen(path
) - 1] = UNICODE_NULL
;
125 ok(!wcsicmp(resultPath
, path
), "Got %ls, expected %ls\n", resultPath
, path
);
126 if (pidl
) CoTaskMemFree(pidl
);
128 /* C:\ReactOS\system32 */
129 StringCbCopyW(path
, sizeof(path
), systemDir
);
131 hr
= SHParseDisplayName(path
, NULL
, &pidl
, 0, NULL
);
132 ok(hr
== S_OK
, "hr = %lx\n", hr
);
133 ok(pidl
!= NULL
, "pidl = %p\n", pidl
);
134 resultPath
[0] = UNICODE_NULL
;
135 SHGetPathFromIDListW(pidl
, resultPath
);
136 ok(!wcsicmp(resultPath
, path
), "Got %ls, expected %ls\n", resultPath
, path
);
137 if (pidl
) CoTaskMemFree(pidl
);
140 path
[0] = systemDir
[0];
142 path
[2] = UNICODE_NULL
;
143 StringCbCatW(path
, sizeof(path
), L
"ntoskrnl.exe");
145 hr
= SHParseDisplayName(path
, NULL
, &pidl
, 0, NULL
);
146 ok(hr
== E_INVALIDARG
, "hr = %lx\n", hr
);
147 ok(pidl
== NULL
, "pidl = %p\n", pidl
);
148 if (pidl
) CoTaskMemFree(pidl
);
151 StringCbCopyW(path
, sizeof(path
), L
"ntoskrnl.exe");
153 hr
= SHParseDisplayName(path
, NULL
, &pidl
, 0, NULL
);
154 ok(hr
== HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND
), "hr = %lx\n", hr
);
155 ok(pidl
== NULL
, "pidl = %p\n", pidl
);
156 if (pidl
) CoTaskMemFree(pidl
);