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 // Macro parameters are only expanded in the second nesting...
15 #define _WIDEN(x) L##x
16 #define WIDEN(x) _WIDEN(x)
18 #define TEST_FILENAMEA "SHExplorerParseCmdLine.test"
19 #define TEST_FILENAMEW WIDEN(TEST_FILENAMEA)
21 #define TEST_PATHA "C:\\SHExplorerParseCmdLine.test"
22 #define TEST_PATHW WIDEN(TEST_PATHA)
24 #define PADDING_SIZE 0x100
26 typedef struct _EXPLORER_INFO
29 PIDLIST_ABSOLUTE pidl
;
32 PIDLIST_ABSOLUTE pidlRoot
;
35 ULONG Padding
[PADDING_SIZE
];
36 } EXPLORER_INFO
, *PEXPLORER_INFO
;
38 UINT (WINAPI
*SHExplorerParseCmdLine
)(_Out_ PEXPLORER_INFO Info
);
40 #define PIDL_IS_UNTOUCHED -1
41 #define PIDL_IS_NULL -2
42 #define PIDL_IS_PATH -3
43 #define PIDL_IS_EMPTY -4
44 #define PIDL_PATH_EQUALS_PATH -5
46 #define InvalidPointer ((PVOID)0x5555555555555555ULL)
52 _In_ INT ExpectedCsidl
,
53 _In_ DWORD ExpectedFlags
,
54 _In_ PCWSTR ExpectedFileName
,
56 _Out_opt_ PUINT PWriteEnd
)
61 PDWORD InfoWords
= (PDWORD
) &Info
;
63 FillMemory(&Info
, sizeof(Info
), 0x55);
64 Info
.dwFlags
= 0x00000000;
65 Ret
= SHExplorerParseCmdLine(&Info
);
67 // Special case for empty cmdline: Ret is the PIDL for the selected folder.
68 if (ExpectedRet
== -1)
69 ok((LPITEMIDLIST
) Ret
== Info
.pidl
, "Ret = %x, expected %p\n", Ret
, Info
.pidl
);
71 ok(Ret
== ExpectedRet
, "Ret = %x, expected %p\n", Ret
, (PVOID
) ExpectedRet
);
73 if (ExpectedFileName
== NULL
)
74 ok(Info
.FileName
== InvalidPointer
, "FileName = %p\n", Info
.FileName
);
77 ok(Info
.FileName
!= NULL
&& Info
.FileName
!= InvalidPointer
, "FileName = %p\n", Info
.FileName
);
78 if (Info
.FileName
!= NULL
&& Info
.FileName
!= InvalidPointer
)
80 ok(!wcscmp(Info
.FileName
, ExpectedFileName
), "FileName = %ls, expected %ls\n", Info
.FileName
, ExpectedFileName
);
81 LocalFree(Info
.FileName
);
85 ok(Info
.dwFlags
== ExpectedFlags
, "dwFlags = %08lx, expected %08lx\n", Info
.dwFlags
, ExpectedFlags
);
87 if (ExpectedCsidl
== PIDL_IS_UNTOUCHED
)
88 ok(Info
.pidl
== InvalidPointer
, "pidl = %p\n", Info
.pidl
);
89 else if (ExpectedCsidl
== PIDL_IS_NULL
)
90 ok(Info
.pidl
== NULL
, "pidl = %p\n", Info
.pidl
);
93 PIDLIST_ABSOLUTE ExpectedPidl
;
96 ok(Info
.pidl
!= NULL
, "pidl = %p\n", Info
.pidl
);
97 if (Info
.pidl
!= NULL
&& Info
.pidl
!= InvalidPointer
)
99 WCHAR pidlPathName
[MAX_PATH
] = L
"";
101 if (Info
.pidl
!= NULL
&& Info
.pidl
!= (LPITEMIDLIST
) 0x55555555)
103 SHGetPathFromIDListW(Info
.pidl
, pidlPathName
);
106 if (ExpectedCsidl
== PIDL_PATH_EQUALS_PATH
)
108 ok(wcsicmp(pidlPathName
, PidlPath
) == 0, "Path from pidl does not match; pidlPathName=%S\n", pidlPathName
);
110 else if (ExpectedCsidl
== PIDL_IS_EMPTY
)
112 ok(wcslen(pidlPathName
) == 0, "Unexpected non-empty path from pidl; pidlPathName=%S\n", pidlPathName
);
116 if (ExpectedCsidl
== PIDL_IS_PATH
)
118 ExpectedPidl
= SHSimpleIDListFromPath(PidlPath
);
119 hr
= ExpectedPidl
== NULL
? E_FAIL
: S_OK
;
120 ok(ExpectedPidl
!= NULL
, "SHSimpleIDListFromPath(%S) failed. pidlPathName=%S\n", PidlPath
, pidlPathName
);
123 ok(ILIsEqual(Info
.pidl
, ExpectedPidl
), "Unexpected pidl value %p; pidlPathName=%S PidlPath=%S\n", Info
.pidl
, pidlPathName
, PidlPath
);
124 ILFree(ExpectedPidl
);
129 hr
= SHGetFolderLocation(NULL
, ExpectedCsidl
, NULL
, 0, &ExpectedPidl
);
130 ok(hr
== S_OK
, "SHGetFolderLocation returned %08lx\n", hr
);
133 BOOL eq
= ILIsEqual(Info
.pidl
, ExpectedPidl
);
134 ILFree(ExpectedPidl
);
136 ok(eq
, "Unexpected pidl value %p; pidlPathName=%S CSIDL=%d\n", Info
.pidl
, pidlPathName
, ExpectedCsidl
);
141 if (Info
.pidl
!= NULL
&& Info
.pidl
!= (LPITEMIDLIST
) 0x55555555)
146 for (i
= 0; i
< sizeof(Info
) / sizeof(DWORD
); i
++)
150 case 0x00: // FileName
152 case 0x08: // dwFlags
153 case 0x20: // pidlRoot
154 case 0x34: // guidInproc (1/4)
155 case 0x38: // guidInproc (2/4)
156 case 0x3C: // guidInproc (3/4)
157 case 0x40: // guidInproc (4/4)
160 ok(InfoWords
[i
] == 0x55555555, "Word 0x%02lx has been set to 0x%08lx\n", i
* 4, InfoWords
[i
]);
166 PBYTE data
= (PBYTE
)&Info
;
170 for (i
= sizeof(Info
); i
> 0; i
--)
172 if (data
[i
- 1] != 0x55)
181 START_TEST(SHExplorerParseCmdLine
)
190 PCWSTR ExpectedFileName
;
194 { __LINE__
, L
"", -1, CSIDL_MYDOCUMENTS
, 0x00000009 },
195 { __LINE__
, L
"/e", TRUE
, PIDL_IS_UNTOUCHED
, 0x00000008 },
196 { __LINE__
, L
"/n", TRUE
, PIDL_IS_UNTOUCHED
, 0x00004001 },
197 { __LINE__
, L
"/x", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"/x" },
198 { __LINE__
, L
"-e", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"-e" },
199 { __LINE__
, L
"C:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
200 { __LINE__
, L
"/e,C:\\", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"C:\\" },
201 { __LINE__
, L
"/select,C:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
202 { __LINE__
, L
"/e,::{20d04fe0-3aea-1069-a2d8-08002b30309d}", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"::{20d04fe0-3aea-1069-a2d8-08002b30309d}" },
203 { __LINE__
, L
"::{645ff040-5081-101b-9f08-00aa002f954e}", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"::{645ff040-5081-101b-9f08-00aa002f954e}" },
204 { __LINE__
, L
"/select,::{450d8fba-ad25-11d0-98a8-0800361b1103}", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"::{450d8fba-ad25-11d0-98a8-0800361b1103}" },
205 { __LINE__
, L
"=", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"::{20d04fe0-3aea-1069-a2d8-08002b30309d}" },
206 { __LINE__
, L
".", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Documents and Settings\\gigaherz\\Desktop" },
207 { __LINE__
, L
"..", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Documents and Settings\\gigaherz" },
208 { __LINE__
, L
"wrongpath", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"wrongpath"},
209 { __LINE__
, L
"%wrongdir%", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"%wrongdir%"},
210 { __LINE__
, L
"%programfiles#", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"%programfiles#"},
211 { __LINE__
, L
",", TRUE
, PIDL_IS_EMPTY
, 0x00000200},
212 { __LINE__
, L
"c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
213 { __LINE__
, L
"c:", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
214 { __LINE__
, L
"c", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c"},
215 { __LINE__
, L
"c:\\Program Files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
216 { __LINE__
, L
"c:\\Program Files\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
217 { __LINE__
, L
"c:\\Program Files/", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\Program Files/"},
218 { __LINE__
, L
"c:/Program Files/", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:/Program Files/"},
219 { __LINE__
, TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, TEST_PATHW
},
220 { __LINE__
, L
"\"c:\\\"\"program files\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\\"program files"},
221 { __LINE__
, L
"\"c:\\\"program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
222 { __LINE__
, L
"\"c:\\ \"program files", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\ program files"},
223 { __LINE__
, L
"\"c:\\\" program files", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\ program files"},
224 { __LINE__
, L
"\"c:\\\", \"c:\\program files\"", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
225 { __LINE__
, L
"c:\\,c:\\program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
226 { __LINE__
, L
"/root", 0, CSIDL_MYDOCUMENTS
, 0x00000000},
227 { __LINE__
, L
"\"/root\"", 0, CSIDL_MYDOCUMENTS
, 0x00000000},
228 { __LINE__
, L
"/root,", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
229 { __LINE__
, L
"/root,c", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
230 { __LINE__
, L
"/root,\"\"", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
231 { __LINE__
, L
"/root,wrong", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
232 { __LINE__
, L
"/root,0", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
233 { __LINE__
, L
"/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\" },
234 { __LINE__
, L
"/root,\"c:\\\"", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\" },
235 { __LINE__
, L
"/root \"c:\\\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"/root c:\\"},
236 { __LINE__
, L
"/root,\"c:\\\"\"program files\"", TRUE
, PIDL_IS_PATH
, 0x00000000},
237 { __LINE__
, L
"/root,\"c:\\\"program files", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\Program Files" },
238 { __LINE__
, L
"/root,c:\\,c:\\Program Files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
239 { __LINE__
, L
"/root,c:\\,Program Files", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"Program Files"},
240 { __LINE__
, L
"/root,\"c:\\\"", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\" },
241 { __LINE__
, L
"c:\\Program Files,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000200, NULL
, L
"c:\\" },
242 { __LINE__
, L
"a:\\,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000200, NULL
, L
"c:\\" },
243 { __LINE__
, L
"a:\\,/root,c", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"A:\\" },
244 { __LINE__
, L
"c:\\,/root,c", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
245 { __LINE__
, L
"/select", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000040},
246 { __LINE__
, L
"/select,", TRUE
, CSIDL_DRIVES
, 0x00000240 },
247 { __LINE__
, L
"/select,c", TRUE
, PIDL_IS_NULL
, 0x02000040, L
"c"},
248 { __LINE__
, L
"/select,0", TRUE
, PIDL_IS_NULL
, 0x02000040, L
"0"},
249 { __LINE__
, L
"/select,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
250 { __LINE__
, L
"c:\\,/select", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
251 { __LINE__
, L
"/select," TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, TEST_PATHW
},
252 { __LINE__
, L
"/select,c:\\Program Files,c:\\Documents and settings", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\Documents and Settings" },
253 { __LINE__
, L
"c:\\,/select," TEST_FILENAMEW
, TRUE
, PIDL_IS_NULL
, 0x02000240, TEST_FILENAMEW
},
254 { __LINE__
, L
"c:\\,/select," TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, TEST_PATHW
},
255 { __LINE__
, L
"a:\\,/select," TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, TEST_PATHW
},
256 { __LINE__
, L
"z:\\,/select," TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x02000240, L
"z:\\", TEST_PATHW
},
257 { __LINE__
, L
"select,c:\\ ", TRUE
, PIDL_IS_PATH
, 0x02000200, L
"select", L
"C:\\" },
258 { __LINE__
, L
"/select c:\\ ", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"/select c:\\"},
259 { __LINE__
, L
"a:\\,/select,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
260 { __LINE__
, L
"a:\\,/select,c", TRUE
, PIDL_IS_NULL
, 0x02000240, L
"c"},
261 { __LINE__
, L
"c:\\,/select,c", TRUE
, PIDL_IS_NULL
, 0x02000240, L
"c"},
262 { __LINE__
, L
"/e", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000008},
263 { __LINE__
, L
"/e,", TRUE
, CSIDL_DRIVES
, 0x00000208 },
264 { __LINE__
, L
"/e,\"", TRUE
, CSIDL_DRIVES
, 0x00000208 },
265 { __LINE__
, L
"/e,\"\"", TRUE
, CSIDL_DRIVES
, 0x00000208 },
266 { __LINE__
, L
"/e,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"C:\\" },
267 { __LINE__
, L
"c:\\,/e", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"C:\\" },
268 { __LINE__
, L
"/e,c", TRUE
, PIDL_IS_NULL
, 0x02000008, L
"c"},
269 { __LINE__
, L
"/root,c:\\,/select," TEST_FILENAMEW
, TRUE
, PIDL_IS_NULL
, 0x02000040, TEST_FILENAMEW
},
270 { __LINE__
, L
"/select," TEST_FILENAMEW L
",/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x02000040, TEST_FILENAMEW
, L
"c:\\" },
271 { __LINE__
, L
"/root,c:\\,/select," TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, TEST_PATHW
},
272 { __LINE__
, L
"/select," TEST_PATHW L
",/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000240, NULL
, L
"c:\\" },
273 { __LINE__
, L
"/e,/select," TEST_FILENAMEW L
",/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x02000048, TEST_FILENAMEW
, L
"c:\\" },
274 { __LINE__
, L
"/e,/root,c:\\,/select," TEST_FILENAMEW
, TRUE
, PIDL_IS_NULL
, 0x02000048, TEST_FILENAMEW
},
275 { __LINE__
, L
"/e,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000008, NULL
, L
"c:\\" },
276 { __LINE__
, L
"/e,c:\\,/select," TEST_FILENAMEW
, TRUE
, PIDL_IS_NULL
, 0x02000248, TEST_FILENAMEW
},
277 { __LINE__
, L
"c:\\,/e,/select," TEST_FILENAMEW
, TRUE
, PIDL_IS_NULL
, 0x02000248, TEST_FILENAMEW
},
278 { __LINE__
, L
"c:\\,/select," TEST_FILENAMEW L
",/e", TRUE
, PIDL_IS_NULL
, 0x02000248, TEST_FILENAMEW
},
279 { __LINE__
, L
"http:\\\\www.reactos.org", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"http:\\\\www.reactos.org"},
280 { __LINE__
, L
"/e,http:\\\\www.reactos.org", TRUE
, PIDL_IS_NULL
, 0x02000008, L
"http:\\\\www.reactos.org"},
281 { __LINE__
, L
"/root,c:\\,http:\\\\www.reactos.org", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"http:\\\\www.reactos.org"},
282 { __LINE__
, L
"/separate ", TRUE
, CSIDL_MYDOCUMENTS
, 0x00020000},
283 { __LINE__
, L
"/separate,c:\\ program files", TRUE
, PIDL_IS_NULL
, 0x02020000, L
"c:\\ program files"},
284 { __LINE__
, L
"/separate, c:\\program files", TRUE
, PIDL_IS_PATH
, 0x00020200, NULL
, L
"C:\\Program Files" },
285 { __LINE__
, L
"/separate, c:\\program files ,/e", TRUE
, PIDL_IS_PATH
, 0x00020208, NULL
, L
"C:\\Program Files" },
286 { __LINE__
, L
"/separate, c:\\program files ,\\e", TRUE
, PIDL_IS_NULL
, 0x02020200, L
"\\e"},
287 { __LINE__
, L
"c:\\Documents and settings,/separate,/n,/e,/root,c:\\,/select,c:\\Program files,", TRUE
, CSIDL_DRIVES
, 0x00024249 },
288 { __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" },
289 { __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" },
290 { __LINE__
, L
"=", TRUE
, CSIDL_DRIVES
, 0x00000200 },
291 { __LINE__
, L
"=c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
292 { __LINE__
, L
"=" TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, TEST_PATHW
},
293 { __LINE__
, L
"/root,=", TRUE
, CSIDL_DRIVES
, 0x00000200 },
294 { __LINE__
, L
"/root=c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
295 { __LINE__
, L
"/root=c:\\Program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
296 { __LINE__
, L
"/root=\"c:\\Program files\"", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
297 { __LINE__
, L
"/root=\"\"c:\\Program files\"\"", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
298 { __LINE__
, L
"c:\\=/root=\"c:\\Program files\"", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"C:\\Program Files" },
299 { __LINE__
, L
"/select=c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
300 { __LINE__
, L
"/select=c:\\Program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
301 { __LINE__
, L
"=,/select,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
302 { __LINE__
, L
"/select,c:\\,=", TRUE
, CSIDL_DRIVES
, 0x00000240 },
303 { __LINE__
, L
"c:\\=/select=c:\\windows\\system32", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\WINDOWS\\system32" },
304 { __LINE__
, L
"/select=c:\\windows\\system32", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\WINDOWS\\system32" },
305 { __LINE__
, L
"=/select=c:\\windows\\system32", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\WINDOWS\\system32" },
306 { __LINE__
, L
"/e,=", TRUE
, CSIDL_DRIVES
, 0x00000208 },
307 { __LINE__
, L
"/e=", TRUE
, CSIDL_DRIVES
, 0x00000200 },
308 { __LINE__
, L
"/e=\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
309 { __LINE__
, L
"/e=\"\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
310 { __LINE__
, L
"=\"=\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"="},
311 { __LINE__
, L
"==\"=\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"="},
312 { __LINE__
, L
"===\"=\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"="},
313 { __LINE__
, L
"=\"=\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"="},
314 { __LINE__
, L
"==\"==\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"=="},
315 { __LINE__
, L
"===\"===\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"==="},
316 { __LINE__
, L
"=\"=a\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"=a"},
317 { __LINE__
, L
"==\"=a=\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"=a="},
318 { __LINE__
, L
"===\"=a=a=\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"=a=a="},
319 { __LINE__
, L
"=\"=a\"==", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a" },
320 { __LINE__
, L
"==\"=a=\"=", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a=" },
321 { __LINE__
, L
"===\"=a=a=\"===", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a=a=" },
322 { __LINE__
, L
"=,=,=,\"=a=a=\",=,=,=", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a=a=" },
323 { __LINE__
, L
"\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
324 { __LINE__
, L
"\"\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
325 { __LINE__
, L
"\"\"\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"\""},
326 { __LINE__
, L
"\"\"\"\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"\""},
327 { __LINE__
, L
"\"\"\"\"\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"\"\""},
328 { __LINE__
, L
"/s", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000002},
329 { __LINE__
, L
"/noui", TRUE
, CSIDL_MYDOCUMENTS
, 0x00001000},
330 { __LINE__
, L
"/idlist", TRUE
, PIDL_IS_UNTOUCHED
, 0x00000000},
331 { __LINE__
, L
"-embedding", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000080 },
332 { __LINE__
, L
"/inproc", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
333 { __LINE__
, L
"/inproc,1", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
334 { __LINE__
, L
"/inproc,a", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
335 { __LINE__
, L
"/inproc,c:\\", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
336 { __LINE__
, L
"/inproc,\"c:\\\"", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
337 { __LINE__
, L
"/inproc,{20d04fe0-3aea-1069-a2d8-08002b30309d}", TRUE
, PIDL_IS_UNTOUCHED
, 0x00000400 },
339 const int TestCount
= sizeof(Tests
) / sizeof(Tests
[0]);
341 WCHAR OriginalCommandLine
[1024];
346 HMODULE browseui
= LoadLibraryA("browseui.dll");
347 SHExplorerParseCmdLine
= (UINT (__stdcall
*)(PEXPLORER_INFO
))GetProcAddress(browseui
, MAKEINTRESOURCEA(107));
348 if (!SHExplorerParseCmdLine
)
350 skip("SHExplorerParseCmdLine not found, NT 6.0?\n");
354 CommandLine
= GetCommandLineW();
355 StringCbCopyW(OriginalCommandLine
, sizeof(OriginalCommandLine
), CommandLine
);
357 ff
= fopen(TEST_PATHA
, "wb");
360 for (i
= 0; i
< TestCount
; i
++)
364 wcscpy(CommandLine
, L
"browseui_apitest.exe ");
365 wcscat(CommandLine
, Tests
[i
].CommandLine
);
366 trace("Command line (%d): %ls\n", Tests
[i
].TestLine
, CommandLine
);
367 TestCommandLine(Tests
[i
].ExpectedRet
,
368 Tests
[i
].ExpectedCsidl
,
369 Tests
[i
].ExpectedFlags
,
370 Tests
[i
].ExpectedFileName
,
374 if (cWrite
> maxWrite
)
378 trace("Writes reached the byte right before 0x%08x\n", maxWrite
);
380 wcscpy(CommandLine
, OriginalCommandLine
);