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
;
40 SHExplorerParseCmdLine(
41 _Out_ PEXPLORER_INFO Info
);
43 #define PIDL_IS_UNTOUCHED -1
44 #define PIDL_IS_NULL -2
45 #define PIDL_IS_PATH -3
46 #define PIDL_IS_EMPTY -4
47 #define PIDL_PATH_EQUALS_PATH -5
49 #define InvalidPointer ((PVOID)0x5555555555555555ULL)
55 _In_ INT ExpectedCsidl
,
56 _In_ DWORD ExpectedFlags
,
57 _In_ PCWSTR ExpectedFileName
,
59 _Out_opt_ PUINT PWriteEnd
)
64 PDWORD InfoWords
= (PDWORD
) &Info
;
66 FillMemory(&Info
, sizeof(Info
), 0x55);
67 Info
.dwFlags
= 0x00000000;
68 Ret
= SHExplorerParseCmdLine(&Info
);
70 // Special case for empty cmdline: Ret is the PIDL for the selected folder.
71 if (ExpectedRet
== -1)
72 ok((LPITEMIDLIST
) Ret
== Info
.pidl
, "Ret = %x, expected %p\n", Ret
, Info
.pidl
);
74 ok(Ret
== ExpectedRet
, "Ret = %x, expected %p\n", Ret
, (PVOID
) ExpectedRet
);
76 if (ExpectedFileName
== NULL
)
77 ok(Info
.FileName
== InvalidPointer
, "FileName = %p\n", Info
.FileName
);
80 ok(Info
.FileName
!= NULL
&& Info
.FileName
!= InvalidPointer
, "FileName = %p\n", Info
.FileName
);
81 if (Info
.FileName
!= NULL
&& Info
.FileName
!= InvalidPointer
)
83 ok(!wcscmp(Info
.FileName
, ExpectedFileName
), "FileName = %ls, expected %ls\n", Info
.FileName
, ExpectedFileName
);
84 LocalFree(Info
.FileName
);
88 ok(Info
.dwFlags
== ExpectedFlags
, "dwFlags = %08lx, expected %08lx\n", Info
.dwFlags
, ExpectedFlags
);
90 if (ExpectedCsidl
== PIDL_IS_UNTOUCHED
)
91 ok(Info
.pidl
== InvalidPointer
, "pidl = %p\n", Info
.pidl
);
92 else if (ExpectedCsidl
== PIDL_IS_NULL
)
93 ok(Info
.pidl
== NULL
, "pidl = %p\n", Info
.pidl
);
96 PIDLIST_ABSOLUTE ExpectedPidl
;
99 ok(Info
.pidl
!= NULL
, "pidl = %p\n", Info
.pidl
);
100 if (Info
.pidl
!= NULL
&& Info
.pidl
!= InvalidPointer
)
102 WCHAR pidlPathName
[MAX_PATH
] = L
"";
104 if (Info
.pidl
!= NULL
&& Info
.pidl
!= (LPITEMIDLIST
) 0x55555555)
106 SHGetPathFromIDListW(Info
.pidl
, pidlPathName
);
109 if (ExpectedCsidl
== PIDL_PATH_EQUALS_PATH
)
111 ok(wcsicmp(pidlPathName
, PidlPath
) == 0, "Path from pidl does not match; pidlPathName=%S\n", pidlPathName
);
113 else if (ExpectedCsidl
== PIDL_IS_EMPTY
)
115 ok(wcslen(pidlPathName
) == 0, "Unexpected non-empty path from pidl; pidlPathName=%S\n", pidlPathName
);
119 if (ExpectedCsidl
== PIDL_IS_PATH
)
121 ExpectedPidl
= SHSimpleIDListFromPath(PidlPath
);
122 hr
= ExpectedPidl
== NULL
? E_FAIL
: S_OK
;
123 ok(ExpectedPidl
!= NULL
, "SHSimpleIDListFromPath(%S) failed. pidlPathName=%S\n", PidlPath
, pidlPathName
);
126 ok(ILIsEqual(Info
.pidl
, ExpectedPidl
), "Unexpected pidl value %p; pidlPathName=%S PidlPath=%S\n", Info
.pidl
, pidlPathName
, PidlPath
);
127 ILFree(ExpectedPidl
);
132 hr
= SHGetFolderLocation(NULL
, ExpectedCsidl
, NULL
, 0, &ExpectedPidl
);
133 ok(hr
== S_OK
, "SHGetFolderLocation returned %08lx\n", hr
);
136 BOOL eq
= ILIsEqual(Info
.pidl
, ExpectedPidl
);
137 ILFree(ExpectedPidl
);
139 ok(eq
, "Unexpected pidl value %p; pidlPathName=%S CSIDL=%d\n", Info
.pidl
, pidlPathName
, ExpectedCsidl
);
144 if (Info
.pidl
!= NULL
&& Info
.pidl
!= (LPITEMIDLIST
) 0x55555555)
149 for (i
= 0; i
< sizeof(Info
) / sizeof(DWORD
); i
++)
153 case 0x00: // FileName
155 case 0x08: // dwFlags
156 case 0x20: // pidlRoot
157 case 0x34: // guidInproc (1/4)
158 case 0x38: // guidInproc (2/4)
159 case 0x3C: // guidInproc (3/4)
160 case 0x40: // guidInproc (4/4)
163 ok(InfoWords
[i
] == 0x55555555, "Word 0x%02lx has been set to 0x%08lx\n", i
* 4, InfoWords
[i
]);
169 PBYTE data
= (PBYTE
)&Info
;
173 for (i
= sizeof(Info
); i
> 0; i
--)
175 if (data
[i
- 1] != 0x55)
184 START_TEST(SHExplorerParseCmdLine
)
193 PCWSTR ExpectedFileName
;
197 { __LINE__
, L
"", -1, CSIDL_MYDOCUMENTS
, 0x00000009 },
198 { __LINE__
, L
"/e", TRUE
, PIDL_IS_UNTOUCHED
, 0x00000008 },
199 { __LINE__
, L
"/n", TRUE
, PIDL_IS_UNTOUCHED
, 0x00004001 },
200 { __LINE__
, L
"/x", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"/x" },
201 { __LINE__
, L
"-e", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"-e" },
202 { __LINE__
, L
"C:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
203 { __LINE__
, L
"/e,C:\\", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"C:\\" },
204 { __LINE__
, L
"/select,C:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
205 { __LINE__
, L
"/e,::{20d04fe0-3aea-1069-a2d8-08002b30309d}", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"::{20d04fe0-3aea-1069-a2d8-08002b30309d}" },
206 { __LINE__
, L
"::{645ff040-5081-101b-9f08-00aa002f954e}", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"::{645ff040-5081-101b-9f08-00aa002f954e}" },
207 { __LINE__
, L
"/select,::{450d8fba-ad25-11d0-98a8-0800361b1103}", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"::{450d8fba-ad25-11d0-98a8-0800361b1103}" },
208 { __LINE__
, L
"=", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"::{20d04fe0-3aea-1069-a2d8-08002b30309d}" },
209 { __LINE__
, L
".", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Documents and Settings\\gigaherz\\Desktop" },
210 { __LINE__
, L
"..", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Documents and Settings\\gigaherz" },
211 { __LINE__
, L
"wrongpath", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"wrongpath"},
212 { __LINE__
, L
"%wrongdir%", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"%wrongdir%"},
213 { __LINE__
, L
"%programfiles#", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"%programfiles#"},
214 { __LINE__
, L
",", TRUE
, PIDL_IS_EMPTY
, 0x00000200},
215 { __LINE__
, L
"c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
216 { __LINE__
, L
"c:", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
217 { __LINE__
, L
"c", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c"},
218 { __LINE__
, L
"c:\\Program Files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
219 { __LINE__
, L
"c:\\Program Files\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
220 { __LINE__
, L
"c:\\Program Files/", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\Program Files/"},
221 { __LINE__
, L
"c:/Program Files/", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:/Program Files/"},
222 { __LINE__
, TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, TEST_PATHW
},
223 { __LINE__
, L
"\"c:\\\"\"program files\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\\"program files"},
224 { __LINE__
, L
"\"c:\\\"program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
225 { __LINE__
, L
"\"c:\\ \"program files", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\ program files"},
226 { __LINE__
, L
"\"c:\\\" program files", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"c:\\ program files"},
227 { __LINE__
, L
"\"c:\\\", \"c:\\program files\"", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
228 { __LINE__
, L
"c:\\,c:\\program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
229 { __LINE__
, L
"/root", 0, CSIDL_MYDOCUMENTS
, 0x00000000},
230 { __LINE__
, L
"\"/root\"", 0, CSIDL_MYDOCUMENTS
, 0x00000000},
231 { __LINE__
, L
"/root,", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
232 { __LINE__
, L
"/root,c", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
233 { __LINE__
, L
"/root,\"\"", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
234 { __LINE__
, L
"/root,wrong", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
235 { __LINE__
, L
"/root,0", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000000},
236 { __LINE__
, L
"/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\" },
237 { __LINE__
, L
"/root,\"c:\\\"", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\" },
238 { __LINE__
, L
"/root \"c:\\\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"/root c:\\"},
239 { __LINE__
, L
"/root,\"c:\\\"\"program files\"", TRUE
, PIDL_IS_PATH
, 0x00000000},
240 { __LINE__
, L
"/root,\"c:\\\"program files", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\Program Files" },
241 { __LINE__
, L
"/root,c:\\,c:\\Program Files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
242 { __LINE__
, L
"/root,c:\\,Program Files", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"Program Files"},
243 { __LINE__
, L
"/root,\"c:\\\"", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"c:\\" },
244 { __LINE__
, L
"c:\\Program Files,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000200, NULL
, L
"c:\\" },
245 { __LINE__
, L
"a:\\,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000200, NULL
, L
"c:\\" },
246 { __LINE__
, L
"a:\\,/root,c", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"A:\\" },
247 { __LINE__
, L
"c:\\,/root,c", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
248 { __LINE__
, L
"/select", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000040},
249 { __LINE__
, L
"/select,", TRUE
, CSIDL_DRIVES
, 0x00000240 },
250 { __LINE__
, L
"/select,c", TRUE
, PIDL_IS_NULL
, 0x02000040, L
"c"},
251 { __LINE__
, L
"/select,0", TRUE
, PIDL_IS_NULL
, 0x02000040, L
"0"},
252 { __LINE__
, L
"/select,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
253 { __LINE__
, L
"c:\\,/select", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
254 { __LINE__
, L
"/select," TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, TEST_PATHW
},
255 { __LINE__
, L
"/select,c:\\Program Files,c:\\Documents and settings", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\Documents and Settings" },
256 { __LINE__
, L
"c:\\,/select," TEST_FILENAMEW
, TRUE
, PIDL_IS_NULL
, 0x02000240, TEST_FILENAMEW
},
257 { __LINE__
, L
"c:\\,/select," TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, TEST_PATHW
},
258 { __LINE__
, L
"a:\\,/select," TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, TEST_PATHW
},
259 { __LINE__
, L
"z:\\,/select," TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x02000240, L
"z:\\", TEST_PATHW
},
260 { __LINE__
, L
"select,c:\\ ", TRUE
, PIDL_IS_PATH
, 0x02000200, L
"select", L
"C:\\" },
261 { __LINE__
, L
"/select c:\\ ", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"/select c:\\"},
262 { __LINE__
, L
"a:\\,/select,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
263 { __LINE__
, L
"a:\\,/select,c", TRUE
, PIDL_IS_NULL
, 0x02000240, L
"c"},
264 { __LINE__
, L
"c:\\,/select,c", TRUE
, PIDL_IS_NULL
, 0x02000240, L
"c"},
265 { __LINE__
, L
"/e", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000008},
266 { __LINE__
, L
"/e,", TRUE
, CSIDL_DRIVES
, 0x00000208 },
267 { __LINE__
, L
"/e,\"", TRUE
, CSIDL_DRIVES
, 0x00000208 },
268 { __LINE__
, L
"/e,\"\"", TRUE
, CSIDL_DRIVES
, 0x00000208 },
269 { __LINE__
, L
"/e,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"C:\\" },
270 { __LINE__
, L
"c:\\,/e", TRUE
, PIDL_IS_PATH
, 0x00000208, NULL
, L
"C:\\" },
271 { __LINE__
, L
"/e,c", TRUE
, PIDL_IS_NULL
, 0x02000008, L
"c"},
272 { __LINE__
, L
"/root,c:\\,/select," TEST_FILENAMEW
, TRUE
, PIDL_IS_NULL
, 0x02000040, TEST_FILENAMEW
},
273 { __LINE__
, L
"/select," TEST_FILENAMEW L
",/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x02000040, TEST_FILENAMEW
, L
"c:\\" },
274 { __LINE__
, L
"/root,c:\\,/select," TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, TEST_PATHW
},
275 { __LINE__
, L
"/select," TEST_PATHW L
",/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000240, NULL
, L
"c:\\" },
276 { __LINE__
, L
"/e,/select," TEST_FILENAMEW L
",/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x02000048, TEST_FILENAMEW
, L
"c:\\" },
277 { __LINE__
, L
"/e,/root,c:\\,/select," TEST_FILENAMEW
, TRUE
, PIDL_IS_NULL
, 0x02000048, TEST_FILENAMEW
},
278 { __LINE__
, L
"/e,/root,c:\\", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000008, NULL
, L
"c:\\" },
279 { __LINE__
, L
"/e,c:\\,/select," TEST_FILENAMEW
, TRUE
, PIDL_IS_NULL
, 0x02000248, TEST_FILENAMEW
},
280 { __LINE__
, L
"c:\\,/e,/select," TEST_FILENAMEW
, TRUE
, PIDL_IS_NULL
, 0x02000248, TEST_FILENAMEW
},
281 { __LINE__
, L
"c:\\,/select," TEST_FILENAMEW L
",/e", TRUE
, PIDL_IS_NULL
, 0x02000248, TEST_FILENAMEW
},
282 { __LINE__
, L
"http:\\\\www.reactos.org", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"http:\\\\www.reactos.org"},
283 { __LINE__
, L
"/e,http:\\\\www.reactos.org", TRUE
, PIDL_IS_NULL
, 0x02000008, L
"http:\\\\www.reactos.org"},
284 { __LINE__
, L
"/root,c:\\,http:\\\\www.reactos.org", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"http:\\\\www.reactos.org"},
285 { __LINE__
, L
"/separate ", TRUE
, CSIDL_MYDOCUMENTS
, 0x00020000},
286 { __LINE__
, L
"/separate,c:\\ program files", TRUE
, PIDL_IS_NULL
, 0x02020000, L
"c:\\ program files"},
287 { __LINE__
, L
"/separate, c:\\program files", TRUE
, PIDL_IS_PATH
, 0x00020200, NULL
, L
"C:\\Program Files" },
288 { __LINE__
, L
"/separate, c:\\program files ,/e", TRUE
, PIDL_IS_PATH
, 0x00020208, NULL
, L
"C:\\Program Files" },
289 { __LINE__
, L
"/separate, c:\\program files ,\\e", TRUE
, PIDL_IS_NULL
, 0x02020200, L
"\\e"},
290 { __LINE__
, L
"c:\\Documents and settings,/separate,/n,/e,/root,c:\\,/select,c:\\Program files,", TRUE
, CSIDL_DRIVES
, 0x00024249 },
291 { __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" },
292 { __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" },
293 { __LINE__
, L
"=", TRUE
, CSIDL_DRIVES
, 0x00000200 },
294 { __LINE__
, L
"=c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
295 { __LINE__
, L
"=" TEST_PATHW
, TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, TEST_PATHW
},
296 { __LINE__
, L
"/root,=", TRUE
, CSIDL_DRIVES
, 0x00000200 },
297 { __LINE__
, L
"/root=c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
298 { __LINE__
, L
"/root=c:\\Program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
299 { __LINE__
, L
"/root=\"c:\\Program files\"", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
300 { __LINE__
, L
"/root=\"\"c:\\Program files\"\"", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
301 { __LINE__
, L
"c:\\=/root=\"c:\\Program files\"", TRUE
, PIDL_PATH_EQUALS_PATH
, 0x00000000, NULL
, L
"C:\\Program Files" },
302 { __LINE__
, L
"/select=c:\\", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\" },
303 { __LINE__
, L
"/select=c:\\Program files", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\Program Files" },
304 { __LINE__
, L
"=,/select,c:\\", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\" },
305 { __LINE__
, L
"/select,c:\\,=", TRUE
, CSIDL_DRIVES
, 0x00000240 },
306 { __LINE__
, L
"c:\\=/select=c:\\windows\\system32", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\WINDOWS\\system32" },
307 { __LINE__
, L
"/select=c:\\windows\\system32", TRUE
, PIDL_IS_PATH
, 0x00000200, NULL
, L
"C:\\WINDOWS\\system32" },
308 { __LINE__
, L
"=/select=c:\\windows\\system32", TRUE
, PIDL_IS_PATH
, 0x00000240, NULL
, L
"C:\\WINDOWS\\system32" },
309 { __LINE__
, L
"/e,=", TRUE
, CSIDL_DRIVES
, 0x00000208 },
310 { __LINE__
, L
"/e=", TRUE
, CSIDL_DRIVES
, 0x00000200 },
311 { __LINE__
, L
"/e=\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
312 { __LINE__
, L
"/e=\"\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
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
"=\"=\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"="},
317 { __LINE__
, L
"==\"==\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"=="},
318 { __LINE__
, L
"===\"===\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"==="},
319 { __LINE__
, L
"=\"=a\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"=a"},
320 { __LINE__
, L
"==\"=a=\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"=a="},
321 { __LINE__
, L
"===\"=a=a=\"", TRUE
, PIDL_IS_NULL
, 0x02000200, L
"=a=a="},
322 { __LINE__
, L
"=\"=a\"==", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a" },
323 { __LINE__
, L
"==\"=a=\"=", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a=" },
324 { __LINE__
, L
"===\"=a=a=\"===", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a=a=" },
325 { __LINE__
, L
"=,=,=,\"=a=a=\",=,=,=", TRUE
, CSIDL_DRIVES
, 0x02000200, L
"=a=a=" },
326 { __LINE__
, L
"\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
327 { __LINE__
, L
"\"\"", TRUE
, CSIDL_DRIVES
, 0x00000200 },
328 { __LINE__
, L
"\"\"\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"\""},
329 { __LINE__
, L
"\"\"\"\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"\""},
330 { __LINE__
, L
"\"\"\"\"\"", TRUE
, PIDL_IS_NULL
, 0x02000000, L
"\"\""},
331 { __LINE__
, L
"/s", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000002},
332 { __LINE__
, L
"/noui", TRUE
, CSIDL_MYDOCUMENTS
, 0x00001000},
333 { __LINE__
, L
"/idlist", TRUE
, PIDL_IS_UNTOUCHED
, 0x00000000},
334 { __LINE__
, L
"-embedding", TRUE
, CSIDL_MYDOCUMENTS
, 0x00000080 },
335 { __LINE__
, L
"/inproc", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
336 { __LINE__
, L
"/inproc,1", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
337 { __LINE__
, L
"/inproc,a", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
338 { __LINE__
, L
"/inproc,c:\\", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
339 { __LINE__
, L
"/inproc,\"c:\\\"", FALSE
, PIDL_IS_UNTOUCHED
, 0x00000000 },
340 { __LINE__
, L
"/inproc,{20d04fe0-3aea-1069-a2d8-08002b30309d}", TRUE
, PIDL_IS_UNTOUCHED
, 0x00000400 },
342 const int TestCount
= sizeof(Tests
) / sizeof(Tests
[0]);
344 WCHAR OriginalCommandLine
[1024];
349 CommandLine
= GetCommandLineW();
350 StringCbCopyW(OriginalCommandLine
, sizeof(OriginalCommandLine
), CommandLine
);
352 ff
= fopen(TEST_PATHA
, "wb");
355 for (i
= 0; i
< TestCount
; i
++)
359 wcscpy(CommandLine
, L
"browseui_apitest.exe ");
360 wcscat(CommandLine
, Tests
[i
].CommandLine
);
361 trace("Command line (%d): %ls\n", Tests
[i
].TestLine
, CommandLine
);
362 TestCommandLine(Tests
[i
].ExpectedRet
,
363 Tests
[i
].ExpectedCsidl
,
364 Tests
[i
].ExpectedFlags
,
365 Tests
[i
].ExpectedFileName
,
369 if (cWrite
> maxWrite
)
373 trace("Writes reached the byte right before 0x%08x\n", maxWrite
);
375 wcscpy(CommandLine
, OriginalCommandLine
);