2 * PROJECT: ReactOS api tests
3 * LICENSE: GPLv2+ - See COPYING in the top level directory
4 * PURPOSE: Test for SHExplorerParseCmdLine
5 * PROGRAMMER: Thomas Faber <thomas.faber@reactos.org
14 #define PADDING_SIZE 0x100
16 typedef struct _EXPLORER_INFO
19 PIDLIST_ABSOLUTE pidl
;
22 PIDLIST_ABSOLUTE pidlRoot
;
25 ULONG Padding
[PADDING_SIZE
];
26 } EXPLORER_INFO
, *PEXPLORER_INFO
;
30 SHExplorerParseCmdLine(
31 _Out_ PEXPLORER_INFO Info
);
33 #define PIDL_IS_UNTOUCHED -1
34 #define PIDL_IS_NULL -2
35 #define PIDL_IS_PATH -3
36 #define PIDL_IS_EMPTY -4
37 #define PIDL_PATH_EQUALS_PATH -5
39 #define InvalidPointer ((PVOID)0x5555555555555555ULL)
45 _In_ INT ExpectedCsidl
,
46 _In_ DWORD ExpectedFlags
,
47 _In_ PCWSTR ExpectedFileName
,
49 _Out_opt_ PUINT PWriteEnd
)
54 PDWORD InfoWords
= (PDWORD
) &Info
;
56 FillMemory(&Info
, sizeof(Info
), 0x55);
57 Info
.dwFlags
= 0x00000000;
58 Ret
= SHExplorerParseCmdLine(&Info
);
60 // Special case for empty cmdline: Ret is the PIDL for the selected folder.
61 if (ExpectedRet
== -1)
62 ok((LPITEMIDLIST
) Ret
== Info
.pidl
, "Ret = %x, expected %p\n", Ret
, Info
.pidl
);
64 ok(Ret
== ExpectedRet
, "Ret = %x, expected %p\n", Ret
, (PVOID
) ExpectedRet
);
66 if (ExpectedFileName
== NULL
)
67 ok(Info
.FileName
== InvalidPointer
, "FileName = %p\n", Info
.FileName
);
70 ok(Info
.FileName
!= NULL
&& Info
.FileName
!= InvalidPointer
, "FileName = %p\n", Info
.FileName
);
71 if (Info
.FileName
!= NULL
&& Info
.FileName
!= InvalidPointer
)
73 ok(!wcscmp(Info
.FileName
, ExpectedFileName
), "FileName = %ls, expected %ls\n", Info
.FileName
, ExpectedFileName
);
74 LocalFree(Info
.FileName
);
78 if (ExpectedCsidl
== PIDL_IS_UNTOUCHED
)
79 ok(Info
.pidl
== InvalidPointer
, "pidl = %p\n", Info
.pidl
);
80 else if (ExpectedCsidl
== PIDL_IS_NULL
)
81 ok(Info
.pidl
== NULL
, "pidl = %p\n", Info
.pidl
);
84 PIDLIST_ABSOLUTE ExpectedPidl
;
87 ok(Info
.pidl
!= NULL
, "pidl = %p\n", Info
.pidl
);
88 if (Info
.pidl
!= NULL
&& Info
.pidl
!= InvalidPointer
)
90 WCHAR pidlPathName
[MAX_PATH
] = L
"";
92 if (Info
.pidl
!= NULL
&& Info
.pidl
!= (LPITEMIDLIST
) 0x55555555)
94 SHGetPathFromIDListW(Info
.pidl
, pidlPathName
);
97 if (ExpectedCsidl
== PIDL_PATH_EQUALS_PATH
)
99 ok(wcsicmp(pidlPathName
, PidlPath
) == 0, "Path from pidl does not match; pidlPathName=%S\n", pidlPathName
);
101 else if (ExpectedCsidl
== PIDL_IS_EMPTY
)
103 ok(wcslen(pidlPathName
) == 0, "Unexpected non-empty path from pidl; pidlPathName=%S\n", pidlPathName
);
107 if (ExpectedCsidl
== PIDL_IS_PATH
)
109 ExpectedPidl
= SHSimpleIDListFromPath(PidlPath
);
110 hr
= ExpectedPidl
== NULL
? E_FAIL
: S_OK
;
111 ok(ExpectedPidl
!= NULL
, "SHSimpleIDListFromPath(%S) failed. pidlPathName=%S\n", PidlPath
, pidlPathName
);
114 ok(ILIsEqual(Info
.pidl
, ExpectedPidl
), "Unexpected pidl value %p; pidlPathName=%S PidlPath=%S\n", Info
.pidl
, pidlPathName
, PidlPath
);
115 ILFree(ExpectedPidl
);
120 hr
= SHGetFolderLocation(NULL
, ExpectedCsidl
, NULL
, 0, &ExpectedPidl
);
121 ok(hr
== S_OK
, "SHGetFolderLocation returned %08lx\n", hr
);
124 BOOL eq
= ILIsEqual(Info
.pidl
, ExpectedPidl
);
125 ILFree(ExpectedPidl
);
127 ok(eq
, "Unexpected pidl value %p; pidlPathName=%S CSIDL=%d\n", Info
.pidl
, pidlPathName
, ExpectedCsidl
);
135 ok(Info
.dwFlags
== ExpectedFlags
, "dwFlags = %08lx, expected %08lx\n", Info
.dwFlags
, ExpectedFlags
);
136 for (i
= 0; i
< sizeof(Info
) / sizeof(DWORD
); i
++)
140 case 0x00: // FileName
142 case 0x08: // dwFlags
143 case 0x20: // pidlRoot
144 case 0x34: // guidInproc (1/4)
145 case 0x38: // guidInproc (2/4)
146 case 0x3C: // guidInproc (3/4)
147 case 0x40: // guidInproc (4/4)
150 ok(InfoWords
[i
] == 0x55555555, "Word 0x%02lx has been set to 0x%08lx\n", i
* 4, InfoWords
[i
]);
156 PBYTE data
= (PBYTE
)&Info
;
160 for (i
= sizeof(Info
); i
> 0; i
--)
162 if (data
[i
- 1] != 0x55)
171 START_TEST(SHExplorerParseCmdLine
)
180 PCWSTR ExpectedFileName
;
184 { __LINE__
, L
"", -1, CSIDL_MYDOCUMENTS
, 0x00000009 },
185 { __LINE__
, L
"/e", TRUE
, PIDL_IS_UNTOUCHED
, 0x00000008 },
186 { __LINE__
, L
"/n", TRUE
, PIDL_IS_UNTOUCHED
, 0x00004001 },
187 { __LINE__
, L
"/x", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"/x" },
188 { __LINE__
, L
"-e", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"-e" },
189 { __LINE__
, L
"C:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
190 { __LINE__
, L
"/e,C:\\", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"C:\\" },
191 { __LINE__
, L
"/select,C:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
192 { __LINE__
, L
"/e,::{20d04fe0-3aea-1069-a2d8-08002b30309d}", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"::{20d04fe0-3aea-1069-a2d8-08002b30309d}" },
193 { __LINE__
, L
"::{645ff040-5081-101b-9f08-00aa002f954e}", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"::{645ff040-5081-101b-9f08-00aa002f954e}" },
194 { __LINE__
, L
"/select,::{450d8fba-ad25-11d0-98a8-0800361b1103}", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"::{450d8fba-ad25-11d0-98a8-0800361b1103}" },
195 { __LINE__
, L
"=", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"::{20d04fe0-3aea-1069-a2d8-08002b30309d}" },
196 { __LINE__
, L
".", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Documents and Settings\\gigaherz\\Desktop" },
197 { __LINE__
, L
"..", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Documents and Settings\\gigaherz" },
198 { __LINE__
, L
"wrongpath", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"wrongpath"},
199 { __LINE__
, L
"%wrongdir%", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"%wrongdir%"},
200 { __LINE__
, L
"%programfiles#", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"%programfiles#"},
201 { __LINE__
, L
",", TRUE
, PIDL_IS_EMPTY
, 0x00000200},
202 { __LINE__
, L
"c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
203 { __LINE__
, L
"c:", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
204 { __LINE__
, L
"c", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c"},
205 { __LINE__
, L
"c:\\Program Files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
206 { __LINE__
, L
"c:\\Program Files\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
207 { __LINE__
, L
"c:\\Program Files/", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\Program Files/"},
208 { __LINE__
, L
"c:/Program Files/", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:/Program Files/"},
209 { __LINE__
, L
"c:\\ntldr", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\ntldr" },
210 { __LINE__
, L
"\"c:\\\"\"program files\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\\"program files"},
211 { __LINE__
, L
"\"c:\\\"program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
212 { __LINE__
, L
"\"c:\\ \"program files", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\ program files"},
213 { __LINE__
, L
"\"c:\\\" program files", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\ program files"},
214 { __LINE__
, L
"\"c:\\\", \"c:\\program files\"", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
215 { __LINE__
, L
"c:\\,c:\\program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
216 { __LINE__
, L
"/root", 0, CSIDL_MYDOCUMENTS
, 0x00000000},
217 { __LINE__
, L
"\"/root\"", 0, CSIDL_MYDOCUMENTS
, 0x00000000},
218 { __LINE__
, L
"/root,", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
219 { __LINE__
, L
"/root,c", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
220 { __LINE__
, L
"/root,\"\"", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
221 { __LINE__
, L
"/root,wrong", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
222 { __LINE__
, L
"/root,0", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
223 { __LINE__
, L
"/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\" },
224 { __LINE__
, L
"/root,\"c:\\\"", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\" },
225 { __LINE__
, L
"/root \"c:\\\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"/root c:\\"},
226 { __LINE__
, L
"/root,\"c:\\\"\"program files\"", TRUE
, PIDL_IS_PATH
, 0x00000000},
227 { __LINE__
, L
"/root,\"c:\\\"program files", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\Program Files" },
228 { __LINE__
, L
"/root,c:\\,c:\\Program Files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
229 { __LINE__
, L
"/root,c:\\,Program Files", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"Program Files"},
230 { __LINE__
, L
"/root,\"c:\\\"", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\" },
231 { __LINE__
, L
"c:\\Program Files,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000200, NULL
, L
"c:\\" },
232 { __LINE__
, L
"a:\\,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000200, NULL
, L
"c:\\" },
233 { __LINE__
, L
"a:\\,/root,c", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"A:\\" },
234 { __LINE__
, L
"c:\\,/root,c", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
235 { __LINE__
, L
"/select", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000040},
236 { __LINE__
, L
"/select,", TRUE
, CSIDL_DRIVES
, 0x00000240 },
237 { __LINE__
, L
"/select,c", TRUE
, PIDL_IS_NULL
, 0x02000040, L
"c"},
238 { __LINE__
, L
"/select,0", TRUE
, PIDL_IS_NULL
, 0x02000040, L
"0"},
239 { __LINE__
, L
"/select,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
240 { __LINE__
, L
"c:\\,/select", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
241 { __LINE__
, L
"/select,c:\\ntldr", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\ntldr" },
242 { __LINE__
, L
"/select,c:\\Program Files,c:\\Documents and settings", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\Documents and Settings" },
243 { __LINE__
, L
"c:\\,/select,ntldr", TRUE
, PIDL_IS_NULL
, 0x02000240, L
"ntldr"},
244 { __LINE__
, L
"c:\\,/select,c:\\ntldr", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\ntldr" },
245 { __LINE__
, L
"a:\\,/select,c:\\ntldr", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\ntldr" },
246 { __LINE__
, L
"z:\\,/select,c:\\ntldr", TRUE
, PIDL_IS_PATH
, 0x02000240, L
"z:\\", L
"C:\\ntldr" },
247 { __LINE__
, L
"select,c:\\ ", TRUE
, PIDL_IS_PATH
, 0x02000200, L
"select", L
"C:\\" },
248 { __LINE__
, L
"/select c:\\ ", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"/select c:\\"},
249 { __LINE__
, L
"a:\\,/select,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
250 { __LINE__
, L
"a:\\,/select,c", TRUE
, PIDL_IS_NULL
, 0x02000240, L
"c"},
251 { __LINE__
, L
"c:\\,/select,c", TRUE
, PIDL_IS_NULL
, 0x02000240, L
"c"},
252 { __LINE__
, L
"/e", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000008},
253 { __LINE__
, L
"/e,", TRUE
, CSIDL_DRIVES
, 0x00000208 },
254 { __LINE__
, L
"/e,\"", TRUE
, CSIDL_DRIVES
, 0x00000208 },
255 { __LINE__
, L
"/e,\"\"", TRUE
, CSIDL_DRIVES
, 0x00000208 },
256 { __LINE__
, L
"/e,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"C:\\" },
257 { __LINE__
, L
"c:\\,/e", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"C:\\" },
258 { __LINE__
, L
"/e,c", TRUE
, PIDL_IS_NULL
, 0x02000008, L
"c"},
259 { __LINE__
, L
"/root,c:\\,/select,ntldr", TRUE
, PIDL_IS_NULL
, 0x02000040, L
"ntldr"},
260 { __LINE__
, L
"/select,ntldr,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x02000040, L
"ntldr", L
"c:\\" },
261 { __LINE__
, L
"/root,c:\\,/select,c:\\ntldr", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\ntldr" },
262 { __LINE__
, L
"/select,c:\\ntldr,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000240, NULL
, L
"c:\\" },
263 { __LINE__
, L
"/e,/select,ntldr,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x02000048, L
"ntldr", L
"c:\\" },
264 { __LINE__
, L
"/e,/root,c:\\,/select,ntldr", TRUE
, PIDL_IS_NULL
, 0x02000048, L
"ntldr"},
265 { __LINE__
, L
"/e,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000008, NULL
, L
"c:\\" },
266 { __LINE__
, L
"/e,c:\\,/select,ntldr", TRUE
, PIDL_IS_NULL
, 0x02000248, L
"ntldr"},
267 { __LINE__
, L
"c:\\,/e,/select,ntldr", TRUE
, PIDL_IS_NULL
, 0x02000248, L
"ntldr"},
268 { __LINE__
, L
"c:\\,/select,ntldr,/e", TRUE
, PIDL_IS_NULL
, 0x02000248, L
"ntldr"},
269 { __LINE__
, L
"http:\\\\www.reactos.org", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"http:\\\\www.reactos.org"},
270 { __LINE__
, L
"/e,http:\\\\www.reactos.org", TRUE
, PIDL_IS_NULL
, 0x02000008, L
"http:\\\\www.reactos.org"},
271 { __LINE__
, L
"/root,c:\\,http:\\\\www.reactos.org", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"http:\\\\www.reactos.org"},
272 { __LINE__
, L
"/separate ", TRUE
, CSIDL_MYDOCUMENTS
, 0x00020000},
273 { __LINE__
, L
"/separate,c:\\ program files", TRUE
, PIDL_IS_NULL
, 0x02020000, L
"c:\\ program files"},
274 { __LINE__
, L
"/separate, c:\\program files", TRUE
, PIDL_IS_PATH
, 0x00020200, NULL
, L
"C:\\Program Files" },
275 { __LINE__
, L
"/separate, c:\\program files ,/e", TRUE
, PIDL_IS_PATH
, 0x00020208, NULL
, L
"C:\\Program Files" },
276 { __LINE__
, L
"/separate, c:\\program files ,\\e", TRUE
, PIDL_IS_NULL
, 0x02020200, L
"\\e"},
277 { __LINE__
, L
"c:\\Documents and settings,/separate,/n,/e,/root,c:\\,/select,c:\\Program files,", TRUE
, CSIDL_DRIVES
, 0x00024249 },
278 { __LINE__
, L
"c:\\Documents and settings,/separate,/n,/e,/root,{450D8FBA-AD25-11D0-98A8-0800361B1103, 0},test,/select,c:\\Program files,", TRUE
, CSIDL_DRIVES
, 0x02024249, L
"test" },
279 { __LINE__
, L
"c:\\Documents and settings,/inproc,/noui,/s,/separate,/n,/e,/root,{450D8FBA-AD25-11D0-98A8-0800361B1103, 0},test,/select,c:\\Program files,", FALSE
, PIDL_PATH_EQUALS_PATH
, 0x00000200, NULL
, L
"C:\\Documents and Settings" },
280 { __LINE__
, L
"=", TRUE
, CSIDL_DRIVES
, 0x00000200 },
281 { __LINE__
, L
"=c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
282 { __LINE__
, L
"=c:\\ntldr", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\ntldr" },
283 { __LINE__
, L
"/root,=", TRUE
, CSIDL_DRIVES
, 0x00000200 },
284 { __LINE__
, L
"/root=c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
285 { __LINE__
, L
"/root=c:\\Program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
286 { __LINE__
, L
"/root=\"c:\\Program files\"", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
287 { __LINE__
, L
"/root=\"\"c:\\Program files\"\"", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
288 { __LINE__
, L
"c:\\=/root=\"c:\\Program files\"", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"C:\\Program Files" },
289 { __LINE__
, L
"/select=c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
290 { __LINE__
, L
"/select=c:\\Program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
291 { __LINE__
, L
"=,/select,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
292 { __LINE__
, L
"/select,c:\\,=", TRUE
, CSIDL_DRIVES
, 0x00000240 },
293 { __LINE__
, L
"c:\\=/select=c:\\windows\\system32", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\WINDOWS\\system32" },
294 { __LINE__
, L
"/select=c:\\windows\\system32", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\WINDOWS\\system32" },
295 { __LINE__
, L
"=/select=c:\\windows\\system32", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\WINDOWS\\system32" },
296 { __LINE__
, L
"/e,=", TRUE
, CSIDL_DRIVES
, 0x00000208 },
297 { __LINE__
, L
"/e=", TRUE
, CSIDL_DRIVES
, 0x00000200 },
298 { __LINE__
, L
"/e=\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
299 { __LINE__
, L
"/e=\"\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
300 { __LINE__
, L
"=\"=\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"="},
301 { __LINE__
, L
"==\"=\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"="},
302 { __LINE__
, L
"===\"=\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"="},
303 { __LINE__
, L
"=\"=\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"="},
304 { __LINE__
, L
"==\"==\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"=="},
305 { __LINE__
, L
"===\"===\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"==="},
306 { __LINE__
, L
"=\"=a\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"=a"},
307 { __LINE__
, L
"==\"=a=\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"=a="},
308 { __LINE__
, L
"===\"=a=a=\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"=a=a="},
309 { __LINE__
, L
"=\"=a\"==", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a" },
310 { __LINE__
, L
"==\"=a=\"=", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a=" },
311 { __LINE__
, L
"===\"=a=a=\"===", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a=a=" },
312 { __LINE__
, L
"=,=,=,\"=a=a=\",=,=,=", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a=a=" },
313 { __LINE__
, L
"\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
314 { __LINE__
, L
"\"\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
315 { __LINE__
, L
"\"\"\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"\""},
316 { __LINE__
, L
"\"\"\"\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"\""},
317 { __LINE__
, L
"\"\"\"\"\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"\"\""},
318 { __LINE__
, L
"/s", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000002},
319 { __LINE__
, L
"/noui", TRUE
, CSIDL_MYDOCUMENTS
, 0x00001000},
320 { __LINE__
, L
"/idlist", TRUE
, PIDL_IS_UNTOUCHED
, 0x00000000},
321 { __LINE__
, L
"-embedding", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000080 },
322 { __LINE__
, L
"/inproc", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
323 { __LINE__
, L
"/inproc,1", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
324 { __LINE__
, L
"/inproc,a", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
325 { __LINE__
, L
"/inproc,c:\\", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
326 { __LINE__
, L
"/inproc,\"c:\\\"", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
327 { __LINE__
, L
"/inproc,{20d04fe0-3aea-1069-a2d8-08002b30309d}", TRUE
, PIDL_IS_UNTOUCHED
, 0x00000400 },
329 const int TestCount
= sizeof(Tests
) / sizeof(Tests
[0]);
331 WCHAR OriginalCommandLine
[1024];
335 CommandLine
= GetCommandLineW();
336 StringCbCopyW(OriginalCommandLine
, sizeof(OriginalCommandLine
), CommandLine
);
338 for (i
= 0; i
< TestCount
; i
++)
342 wcscpy(CommandLine
, L
"browseui_apitest.exe ");
343 wcscat(CommandLine
, Tests
[i
].CommandLine
);
344 trace("Command line (%d): %ls\n", Tests
[i
].TestLine
, CommandLine
);
345 TestCommandLine(Tests
[i
].ExpectedRet
,
346 Tests
[i
].ExpectedCsidl
,
347 Tests
[i
].ExpectedFlags
,
348 Tests
[i
].ExpectedFileName
,
352 if (cWrite
> maxWrite
)
356 trace("Writes reached the byte right before 0x%08x\n", maxWrite
);
358 wcscpy(CommandLine
, OriginalCommandLine
);