Implement ldap_create_vlv_control{A,W},
[wine] / dlls / urlmon / tests / misc.c
1 /*
2  * Copyright 2005 Jacek Caban
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  */
18
19 #define COBJMACROS
20
21 #include <wine/test.h>
22 #include <stdarg.h>
23
24 #include "windef.h"
25 #include "winbase.h"
26 #include "ole2.h"
27 #include "urlmon.h"
28
29 static void test_CreateFormatEnum(void)
30 {
31     IEnumFORMATETC *fenum = NULL, *fenum2 = NULL;
32     FORMATETC fetc[5];
33     ULONG ul;
34     HRESULT hres;
35
36     static DVTARGETDEVICE dev = {sizeof(dev),0,0,0,0,{0}};
37     static FORMATETC formatetc[] = {
38         {0,&dev,0,0,0},
39         {0,&dev,0,1,0},
40         {0,NULL,0,2,0},
41         {0,NULL,0,3,0},
42         {0,NULL,0,4,0}
43     };
44
45     hres = CreateFormatEnumerator(0, formatetc, &fenum);
46     ok(hres == E_FAIL, "CreateFormatEnumerator failed: %08lx, expected E_FAIL\n", hres);
47     hres = CreateFormatEnumerator(0, formatetc, NULL);
48     ok(hres == E_INVALIDARG, "CreateFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
49     hres = CreateFormatEnumerator(5, formatetc, NULL);
50     ok(hres == E_INVALIDARG, "CreateFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
51
52
53     hres = CreateFormatEnumerator(5, formatetc, &fenum);
54     ok(hres == S_OK, "CreateFormatEnumerator failed: %08lx\n", hres);
55     if(FAILED(hres))
56         return;
57
58     hres = IEnumFORMATETC_Next(fenum, 2, NULL, &ul);
59     ok(hres == E_INVALIDARG, "Next failed: %08lx, expected E_INVALIDARG\n", hres);
60     ul = 100;
61     hres = IEnumFORMATETC_Next(fenum, 0, fetc, &ul);
62     ok(hres == S_OK, "Next failed: %08lx\n", hres);
63     ok(ul == 0, "ul=%ld, expected 0\n", ul);
64
65     hres = IEnumFORMATETC_Next(fenum, 2, fetc, &ul);
66     ok(hres == S_OK, "Next failed: %08lx\n", hres);
67     ok(fetc[0].lindex == 0, "fetc[0].lindex=%ld, expected 0\n", fetc[0].lindex);
68     ok(fetc[1].lindex == 1, "fetc[1].lindex=%ld, expected 1\n", fetc[1].lindex);
69     ok(fetc[0].ptd == &dev, "fetc[0].ptd=%p, expected %p\n", fetc[0].ptd, &dev);
70     ok(ul == 2, "ul=%ld, expected 2\n", ul);
71
72     hres = IEnumFORMATETC_Skip(fenum, 1);
73     ok(hres == S_OK, "Skip failed: %08lx\n", hres);
74
75     hres = IEnumFORMATETC_Next(fenum, 4, fetc, &ul);
76     ok(hres == S_FALSE, "Next failed: %08lx, expected S_FALSE\n", hres);
77     ok(fetc[0].lindex == 3, "fetc[0].lindex=%ld, expected 3\n", fetc[0].lindex);
78     ok(fetc[1].lindex == 4, "fetc[1].lindex=%ld, expected 4\n", fetc[1].lindex);
79     ok(fetc[0].ptd == NULL, "fetc[0].ptd=%p, expected NULL\n", fetc[0].ptd);
80     ok(ul == 2, "ul=%ld, expected 2\n", ul);
81
82     hres = IEnumFORMATETC_Next(fenum, 4, fetc, &ul);
83     ok(hres == S_FALSE, "Next failed: %08lx, expected S_FALSE\n", hres);
84     ok(ul == 0, "ul=%ld, expected 0\n", ul);
85     ul = 100;
86     hres = IEnumFORMATETC_Next(fenum, 0, fetc, &ul);
87     ok(hres == S_OK, "Next failed: %08lx\n", hres);
88     ok(ul == 0, "ul=%ld, expected 0\n", ul);
89
90     hres = IEnumFORMATETC_Skip(fenum, 3);
91     ok(hres == S_FALSE, "Skip failed: %08lx, expected S_FALSE\n", hres);
92
93     hres = IEnumFORMATETC_Reset(fenum);
94     ok(hres == S_OK, "Reset failed: %08lx\n", hres);
95
96     hres = IEnumFORMATETC_Next(fenum, 5, fetc, NULL);
97     ok(hres == S_OK, "Next failed: %08lx\n", hres);
98     ok(fetc[0].lindex == 0, "fetc[0].lindex=%ld, expected 0\n", fetc[0].lindex);
99
100     hres = IEnumFORMATETC_Reset(fenum);
101     ok(hres == S_OK, "Reset failed: %08lx\n", hres);
102
103     hres = IEnumFORMATETC_Skip(fenum, 2);
104     ok(hres == S_OK, "Skip failed: %08lx\n", hres);
105
106     hres = IEnumFORMATETC_Clone(fenum, NULL);
107     ok(hres == E_INVALIDARG, "Clone failed: %08lx, expected E_INVALIDARG\n", hres);
108
109     hres = IEnumFORMATETC_Clone(fenum, &fenum2);
110     ok(hres == S_OK, "Clone failed: %08lx\n", hres);
111
112     if(SUCCEEDED(hres)) {
113         ok(fenum != fenum2, "fenum == fenum2\n");
114
115         hres = IEnumFORMATETC_Next(fenum2, 2, fetc, &ul);
116         ok(hres == S_OK, "Next failed: %08lx\n", hres);
117         ok(fetc[0].lindex == 2, "fetc[0].lindex=%ld, expected 2\n", fetc[0].lindex);
118
119         IEnumFORMATETC_Release(fenum2);
120     }
121
122     hres = IEnumFORMATETC_Next(fenum, 2, fetc, &ul);
123     ok(hres == S_OK, "Next failed: %08lx\n", hres);
124     ok(fetc[0].lindex == 2, "fetc[0].lindex=%ld, expected 2\n", fetc[0].lindex);
125
126     hres = IEnumFORMATETC_Skip(fenum, 1);
127     ok(hres == S_OK, "Skip failed: %08lx\n", hres);
128     
129     IEnumFORMATETC_Release(fenum);
130 }
131
132 static void test_RegisterFormatEnumerator(void)
133 {
134     IBindCtx *bctx = NULL;
135     IEnumFORMATETC *format = NULL, *format2 = NULL;
136     IUnknown *unk = NULL;
137     HRESULT hres;
138
139     static FORMATETC formatetc = {0,NULL,0,0,0};
140     static WCHAR wszEnumFORMATETC[] =
141         {'_','E','n','u','m','F','O','R','M','A','T','E','T','C','_',0};
142
143     CreateBindCtx(0, &bctx);
144
145     hres = CreateFormatEnumerator(1, &formatetc, &format);
146     ok(hres == S_OK, "CreateFormatEnumerator failed: %08lx\n", hres);
147     if(FAILED(hres))
148         return;
149
150     hres = RegisterFormatEnumerator(NULL, format, 0);
151     ok(hres == E_INVALIDARG,
152             "RegisterFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
153     hres = RegisterFormatEnumerator(bctx, NULL, 0);
154     ok(hres == E_INVALIDARG,
155             "RegisterFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
156
157     hres = RegisterFormatEnumerator(bctx, format, 0);
158     ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
159
160     hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
161     ok(hres == S_OK, "GetObjectParam failed: %08lx\n", hres);
162     ok(unk == (IUnknown*)format, "unk != format\n");
163
164     hres = RevokeFormatEnumerator(NULL, format);
165     ok(hres == E_INVALIDARG,
166             "RevokeFormatEnumerator failed: %08lx, expected E_INVALIDARG\n", hres);
167
168     hres = RevokeFormatEnumerator(bctx, format);
169     ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
170
171     hres = RevokeFormatEnumerator(bctx, format);
172     ok(hres == E_FAIL, "RevokeFormatEnumerator failed: %08lx, expected E_FAIL\n", hres);
173
174     hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
175     ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
176
177     hres = RegisterFormatEnumerator(bctx, format, 0);
178     ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
179
180     hres = CreateFormatEnumerator(1, &formatetc, &format2);
181     ok(hres == S_OK, "CreateFormatEnumerator failed: %08lx\n", hres);
182
183     if(SUCCEEDED(hres)) {
184         hres = RevokeFormatEnumerator(bctx, format);
185         ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
186
187         IEnumFORMATETC_Release(format2);
188     }
189
190     hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
191     ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
192
193     IEnumFORMATETC_Release(format);
194
195     hres = RegisterFormatEnumerator(bctx, format, 0);
196     ok(hres == S_OK, "RegisterFormatEnumerator failed: %08lx\n", hres);
197     hres = RevokeFormatEnumerator(bctx, NULL);
198     ok(hres == S_OK, "RevokeFormatEnumerator failed: %08lx\n", hres);
199     hres = IBindCtx_GetObjectParam(bctx, wszEnumFORMATETC, &unk);
200     ok(hres == E_FAIL, "GetObjectParam failed: %08lx, expected E_FAIL\n", hres);
201
202     IBindCtx_Release(bctx);
203 }
204
205 static const WCHAR url1[] = {'r','e','s',':','/','/','m','s','h','t','m','l','.','d','l','l',
206         '/','b','l','a','n','k','.','h','t','m',0};
207 static const WCHAR url2[] = {'i','n','d','e','x','.','h','t','m',0};
208 static const WCHAR url3[] = {'f','i','l','e',':','c',':','\\','I','n','d','e','x','.','h','t','m',0};
209 static const WCHAR url4[] = {'f','i','l','e',':','s','o','m','e','%','2','0','f','i','l','e',
210         '%','2','e','j','p','g',0};
211 static const WCHAR url5[] = {'h','t','t','p',':','/','/','w','w','w','.','w','i','n','e','h','q',
212         '.','o','r','g',0};
213 static const WCHAR url6[] = {'a','b','o','u','t',':','b','l','a','n','k',0};
214 static const WCHAR url7[] = {'f','t','p',':','/','/','w','i','n','e','h','q','.','o','r','g','/',
215         'f','i','l','e','.','t','e','s','t',0};
216
217 static const WCHAR url4e[] = {'f','i','l','e',':','s','o','m','e',' ','f','i','l','e',
218         '.','j','p','g',0};
219
220 static const WCHAR path3[] = {'c',':','\\','I','n','d','e','x','.','h','t','m',0};
221 static const WCHAR path4[] = {'s','o','m','e',' ','f','i','l','e','.','j','p','g',0};
222
223 static const WCHAR wszRes[] = {'r','e','s',0};
224 static const WCHAR wszFile[] = {'f','i','l','e',0};
225 static const WCHAR wszHttp[] = {'h','t','t','p',0};
226 static const WCHAR wszAbout[] = {'a','b','o','u','t',0};
227 static const WCHAR wszEmpty[] = {0};
228
229 struct parse_test {
230     LPCWSTR url;
231     HRESULT secur_hres;
232     LPCWSTR encoded_url;
233     HRESULT path_hres;
234     LPCWSTR path;
235     LPCWSTR schema;
236 };
237
238 static const struct parse_test parse_tests[] = {
239     {url1, S_OK,   url1,  E_INVALIDARG, NULL, wszRes},
240     {url2, E_FAIL, url2,  E_INVALIDARG, NULL, wszEmpty},
241     {url3, E_FAIL, url3,  S_OK, path3,        wszFile},
242     {url4, E_FAIL, url4e, S_OK, path4,        wszFile},
243     {url5, E_FAIL, url5,  E_INVALIDARG, NULL, wszHttp},
244     {url6, S_OK,   url6,  E_INVALIDARG, NULL, wszAbout}
245 };
246
247 static void test_CoInternetParseUrl(void)
248 {
249     HRESULT hres;
250     DWORD size;
251     int i;
252
253     static WCHAR buf[4096];
254
255     memset(buf, 0xf0, sizeof(buf));
256     hres = CoInternetParseUrl(parse_tests[0].url, PARSE_SCHEMA, 0, buf,
257             3, &size, 0);
258     ok(hres == E_POINTER, "schema failed: %08lx, expected E_POINTER\n", hres);
259
260     for(i=0; i < sizeof(parse_tests)/sizeof(parse_tests[0]); i++) {
261         memset(buf, 0xf0, sizeof(buf));
262         hres = CoInternetParseUrl(parse_tests[i].url, PARSE_SECURITY_URL, 0, buf,
263                 sizeof(buf)/sizeof(WCHAR), &size, 0);
264         ok(hres == parse_tests[i].secur_hres, "[%d] security url failed: %08lx, expected %08lx\n",
265                 i, hres, parse_tests[i].secur_hres);
266
267         memset(buf, 0xf0, sizeof(buf));
268         hres = CoInternetParseUrl(parse_tests[i].url, PARSE_ENCODE, 0, buf,
269                 sizeof(buf)/sizeof(WCHAR), &size, 0);
270         ok(hres == S_OK, "[%d] encoding failed: %08lx\n", i, hres);
271         ok(size == lstrlenW(parse_tests[i].encoded_url), "[%d] wrong size\n", i);
272         ok(!lstrcmpW(parse_tests[i].encoded_url, buf), "[%d] wrong encoded url\n", i);
273
274         memset(buf, 0xf0, sizeof(buf));
275         hres = CoInternetParseUrl(parse_tests[i].url, PARSE_PATH_FROM_URL, 0, buf,
276                 sizeof(buf)/sizeof(WCHAR), &size, 0);
277         ok(hres == parse_tests[i].path_hres, "[%d] path failed: %08lx, expected %08lx\n",
278                 i, hres, parse_tests[i].path_hres);
279         if(parse_tests[i].path) {
280             ok(size == lstrlenW(parse_tests[i].path), "[%d] wrong size\n", i);
281             ok(!lstrcmpW(parse_tests[i].path, buf), "[%d] wrong path\n", i);
282         }
283
284         memset(buf, 0xf0, sizeof(buf));
285         hres = CoInternetParseUrl(parse_tests[i].url, PARSE_SCHEMA, 0, buf,
286                 sizeof(buf)/sizeof(WCHAR), &size, 0);
287         ok(hres == S_OK, "[%d] schema failed: %08lx\n", i, hres);
288         ok(size == lstrlenW(parse_tests[i].schema), "[%d] wrong size\n", i);
289         ok(!lstrcmpW(parse_tests[i].schema, buf), "[%d] wrong schema\n", i);
290     }
291 }
292
293 static const WCHAR mimeTextHtml[] = {'t','e','x','t','/','h','t','m','l',0};
294 static const WCHAR mimeTextPlain[] = {'t','e','x','t','/','p','l','a','i','n',0};
295 static const WCHAR mimeAppOctetStream[] = {'a','p','p','l','i','c','a','t','i','o','n','/',
296     'o','c','t','e','t','-','s','t','r','e','a','m',0};
297
298 static const struct {
299     LPCWSTR url;
300     LPCWSTR mime;
301 } mime_tests[] = {
302     {url1, mimeTextHtml},
303     {url2, mimeTextHtml},
304     {url3, mimeTextHtml},
305     {url4, NULL},
306     {url5, NULL},
307     {url6, NULL},
308     {url7, NULL}
309 };
310
311 static BYTE data1[] = "test data\n";
312 static BYTE data2[] = {31,'t','e','s',0xfa,'t',' ','d','a','t','a','\n',0};
313 static BYTE data3[] = {0,0,0};
314 static BYTE data4[] = {'t','e','s',0xfa,'t',' ','d','a','t','a','\n',0,0};
315 static BYTE data5[] = {0xa,0xa,0xa,'x',32,'x',0};
316 static BYTE data6[] = {0xfa,0xfa,0xfa,0xfa,'\n','\r','\t','x','x','x',1};
317
318 static const struct {
319     BYTE *data;
320     DWORD size;
321     LPCWSTR mime;
322 } mime_tests2[] = {
323     {data1, sizeof(data1), mimeTextPlain},
324     {data2, sizeof(data2), mimeAppOctetStream},
325     {data3, sizeof(data3), mimeAppOctetStream},
326     {data4, sizeof(data4), mimeAppOctetStream},
327     {data5, sizeof(data5), mimeTextPlain},
328     {data6, sizeof(data6), mimeTextPlain}
329 };
330
331 static void test_FindMimeFromData(void)
332 {
333     HRESULT hres;
334     LPWSTR mime;
335     int i;
336
337     for(i=0; i<sizeof(mime_tests)/sizeof(mime_tests[0]); i++) {
338         mime = (LPWSTR)0xf0f0f0f0;
339         hres = FindMimeFromData(NULL, mime_tests[i].url, NULL, 0, NULL, 0, &mime, 0);
340         if(mime_tests[i].mime) {
341             ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
342             ok(!lstrcmpW(mime, mime_tests[i].mime), "[%d] wrong mime\n", i);
343             CoTaskMemFree(mime);
344         }else {
345             ok(hres == E_FAIL, "FindMimeFromData failed: %08lx, expected E_FAIL\n", hres);
346             ok(mime == (LPWSTR)0xf0f0f0f0, "[%d] mime != 0xf0f0f0f0\n", i);
347         }
348
349         mime = (LPWSTR)0xf0f0f0f0;
350         hres = FindMimeFromData(NULL, mime_tests[i].url, NULL, 0, mimeTextPlain, 0, &mime, 0);
351         ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
352         ok(!lstrcmpW(mime, mimeTextPlain), "[%d] wrong mime\n", i);
353         CoTaskMemFree(mime);
354
355         mime = (LPWSTR)0xf0f0f0f0;
356         hres = FindMimeFromData(NULL, mime_tests[i].url, NULL, 0, mimeAppOctetStream, 0, &mime, 0);
357         ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
358         ok(!lstrcmpW(mime, mimeAppOctetStream), "[%d] wrong mime\n", i);
359         CoTaskMemFree(mime);
360     }
361
362     for(i=0; i < sizeof(mime_tests2)/sizeof(mime_tests2[0]); i++) {
363         hres = FindMimeFromData(NULL, NULL, mime_tests2[i].data, mime_tests2[i].size,
364                 NULL, 0, &mime, 0);
365         ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
366         ok(!lstrcmpW(mime, mime_tests2[i].mime), "[%d] wrong mime\n", i);
367         CoTaskMemFree(mime);
368
369         hres = FindMimeFromData(NULL, NULL, mime_tests2[i].data, mime_tests2[i].size,
370                 mimeTextHtml, 0, &mime, 0);
371         ok(hres == S_OK, "[%d] FindMimeFromData failed: %08lx\n", i, hres);
372         ok(!lstrcmpW(mime, mimeTextHtml), "[%d] wrong mime\n", i);
373         CoTaskMemFree(mime);
374     }
375
376     hres = FindMimeFromData(NULL, url1, data1, sizeof(data1), NULL, 0, &mime, 0);
377     ok(hres == S_OK, "FindMimeFromData failed: %08lx\n", hres);
378     ok(!lstrcmpW(mime, mimeTextPlain), "wrong mime\n");
379     CoTaskMemFree(mime);
380
381     hres = FindMimeFromData(NULL, url1, data1, sizeof(data1), mimeAppOctetStream, 0, &mime, 0);
382     ok(hres == S_OK, "FindMimeFromData failed: %08lx\n", hres);
383     ok(!lstrcmpW(mime, mimeTextPlain), "wrong mime\n");
384     CoTaskMemFree(mime);
385
386     hres = FindMimeFromData(NULL, url4, data1, sizeof(data1), mimeAppOctetStream, 0, &mime, 0);
387     ok(hres == S_OK, "FindMimeFromData failed: %08lx\n", hres);
388     ok(!lstrcmpW(mime, mimeTextPlain), "wrong mime\n");
389     CoTaskMemFree(mime);
390
391     hres = FindMimeFromData(NULL, NULL, NULL, 0, NULL, 0, &mime, 0);
392     ok(hres == E_INVALIDARG, "FindMimeFromData failed: %08lx, excepted E_INVALIDARG\n", hres);
393
394     hres = FindMimeFromData(NULL, NULL, NULL, 0, mimeTextPlain, 0, &mime, 0);
395     ok(hres == E_INVALIDARG, "FindMimeFromData failed: %08lx, expected E_INVALIDARG\n", hres);
396
397     hres = FindMimeFromData(NULL, NULL, data1, 0, NULL, 0, &mime, 0);
398     ok(hres == E_FAIL, "FindMimeFromData failed: %08lx, expected E_FAIL\n", hres);
399
400     hres = FindMimeFromData(NULL, url1, data1, 0, NULL, 0, &mime, 0);
401     ok(hres == E_FAIL, "FindMimeFromData failed: %08lx, expected E_FAIL\n", hres);
402
403     hres = FindMimeFromData(NULL, NULL, data1, 0, mimeTextPlain, 0, &mime, 0);
404     ok(hres == S_OK, "FindMimeFromData failed: %08lx\n", hres);
405     ok(!lstrcmpW(mime, mimeTextPlain), "wrong mime\n");
406     CoTaskMemFree(mime);
407
408     hres = FindMimeFromData(NULL, NULL, data1, 0, mimeTextPlain, 0, NULL, 0);
409     ok(hres == E_INVALIDARG, "FindMimeFromData failed: %08lx, expected E_INVALIDARG\n", hres);
410 }
411
412 static struct secmgr_test {
413     LPCWSTR url;
414     DWORD zone;
415     HRESULT zone_hres;
416 } secmgr_tests[] = {
417     {url1, 0,   S_OK},
418     {url2, 100, 0x80041001},
419     {url3, 0,   S_OK},
420     {url4, 3,   S_OK},
421     {url5, 3,   S_OK},
422     {url6, 3,   S_OK},
423     {url7, 3,   S_OK}
424 };
425
426 static void test_SecurityManager(void)
427 {
428     int i;
429     IInternetSecurityManager *secmgr = NULL;
430     DWORD zone;
431     HRESULT hres;
432
433     hres = CoInternetCreateSecurityManager(NULL, &secmgr, 0);
434     ok(hres == S_OK, "CoInternetCreateSecurityManager failed: %08lx\n", hres);
435     if(FAILED(hres))
436         return;
437
438     for(i=0; i < sizeof(secmgr_tests)/sizeof(secmgr_tests[0]); i++) {
439         zone = 100;
440         hres = IInternetSecurityManager_MapUrlToZone(secmgr, secmgr_tests[i].url, &zone, 0);
441         ok(hres == secmgr_tests[i].zone_hres, "[%d] MapUrlToZone failed: %08lx, expected %08lx\n",
442                 i, hres, secmgr_tests[i].zone_hres);
443         ok(zone == secmgr_tests[i].zone, "[%d] zone=%ld, expected %ld\n", i, zone,
444                 secmgr_tests[i].zone);
445     }
446
447     zone = 100;
448     hres = IInternetSecurityManager_MapUrlToZone(secmgr, NULL, &zone, 0);
449     ok(hres == E_INVALIDARG, "MapUrlToZone failed: %08lx, expected E_INVALIDARG\n", hres);
450
451     IInternetSecurityManager_Release(secmgr);
452 }
453
454 static void test_ZoneManager(void)
455 {
456     IInternetZoneManager *zonemgr = NULL;
457     BYTE buf[32];
458     HRESULT hres;
459
460     hres = CoInternetCreateZoneManager(NULL, &zonemgr, 0);
461     ok(hres == S_OK, "CoInternetCreateZoneManager failed: %08lx\n", hres);
462     if(FAILED(hres))
463         return;
464
465     hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 3, 0x1a10, buf,
466             sizeof(DWORD), URLZONEREG_DEFAULT);
467     ok(hres == S_OK, "GetZoneActionPolicy failed: %08lx\n", hres);
468     ok(*(DWORD*)buf == 1, "policy=%ld, expected 1\n", *(DWORD*)buf);
469
470     hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 3, 0x1a10, NULL,
471             sizeof(DWORD), URLZONEREG_DEFAULT);
472     ok(hres == E_INVALIDARG, "GetZoneActionPolicy failed: %08lx, expected E_INVALIDARG\n", hres);
473
474     hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 3, 0x1a10, buf,
475             2, URLZONEREG_DEFAULT);
476     ok(hres == E_INVALIDARG, "GetZoneActionPolicy failed: %08lx, expected E_INVALIDARG\n", hres);
477
478     hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 3, 0x1fff, buf,
479             sizeof(DWORD), URLZONEREG_DEFAULT);
480     ok(hres == E_FAIL, "GetZoneActionPolicy failed: %08lx, expected E_FAIL\n", hres);
481
482     hres = IInternetZoneManager_GetZoneActionPolicy(zonemgr, 13, 0x1a10, buf,
483             sizeof(DWORD), URLZONEREG_DEFAULT);
484     ok(hres == E_INVALIDARG, "GetZoneActionPolicy failed: %08lx, expected E_INVALIDARG\n", hres);
485
486     IInternetZoneManager_Release(zonemgr);
487 }
488
489 START_TEST(misc)
490 {
491     test_CreateFormatEnum();
492     test_RegisterFormatEnumerator();
493     test_CoInternetParseUrl();
494     test_FindMimeFromData();
495     test_SecurityManager();
496     test_ZoneManager();
497 }