ReactOS 0.4.15-dev-7127-g2dd0c6c
asmname.c
Go to the documentation of this file.
1/*
2 * Copyright 2008 James Hawkins
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17 */
18
19#define COBJMACROS
20
21#include <stdio.h>
22
23#include <windows.h>
24#include <mscoree.h>
25#include <fusion.h>
26#include <corerror.h>
27#include <strsafe.h>
28
29#include "wine/test.h"
30
31/* ok-like statement which takes two unicode strings or one unicode and one ANSI string as arguments */
33
34#define ok_aw(aString, wString) \
35 WideCharToMultiByte(CP_ACP, 0, wString, -1, string1, MAX_PATH, NULL, NULL); \
36 if (lstrcmpA(string1, aString) != 0) \
37 ok(0, "Expected \"%s\", got \"%s\"\n", aString, string1);
38
39static HRESULT (WINAPI *pCreateAssemblyNameObject)(IAssemblyName **ppAssemblyNameObj,
42static HRESULT (WINAPI *pLoadLibraryShim)(LPCWSTR szDllName, LPCWSTR szVersion,
44
46{
47 HRESULT hr;
48 HMODULE hfusion;
50
51 static const WCHAR szFusion[] = {'f','u','s','i','o','n','.','d','l','l',0};
52
53 hmscoree = LoadLibraryA("mscoree.dll");
54 if (!hmscoree)
55 return FALSE;
56
57 pLoadLibraryShim = (void *)GetProcAddress(hmscoree, "LoadLibraryShim");
58 if (!pLoadLibraryShim)
59 {
61 return FALSE;
62 }
63
64 hr = pLoadLibraryShim(szFusion, NULL, NULL, &hfusion);
65 if (FAILED(hr))
66 return FALSE;
67
68 pCreateAssemblyNameObject = (void *)GetProcAddress(hfusion, "CreateAssemblyNameObject");
69 if (!pCreateAssemblyNameObject)
70 return FALSE;
71
72 return TRUE;
73}
74
75typedef struct _tagASMPROP_RES
76{
81
82static const ASMPROP_RES defaults[ASM_NAME_MAX_PARAMS] =
83{
84 {S_OK, "", 0},
85 {S_OK, "", 0},
86 {S_OK, "", 0},
87 {S_OK, "", 0},
88 {S_OK, "", 0},
89 {S_OK, "", 0},
90 {S_OK, "", 0},
91 {S_OK, "", 0},
92 {S_OK, "", 0},
93 {S_OK, "", 0},
94 {S_OK, "", 0},
95 {S_OK, "", 0},
96 {S_OK, "", 0},
97 {S_OK, "", 0},
98 {S_OK, "", 0},
99 {S_FALSE, "", MAX_PATH},
100 {S_FALSE, "", MAX_PATH},
101 {S_OK, "", 0},
102 {S_OK, "", MAX_PATH},
103 {S_OK, "", 0},
104 {S_OK, "", 0},
105 {S_OK, "", 0},
106 {S_OK, "", 0},
107 {S_OK, "", 0},
108 {S_OK, "", 0},
109 {S_OK, "", 0},
110 {S_OK, "", 0},
111 {S_OK, "", 0}
112};
113
114static const ASMPROP_RES emptyname[ASM_NAME_MAX_PARAMS] =
115{
116 {S_OK, "", 0},
117 {S_OK, "", 0},
118 {S_OK, "", 0},
119 {S_OK, "", 2},
120 {S_OK, "", 0},
121 {S_OK, "", 0},
122 {S_OK, "", 0},
123 {S_OK, "", 0},
124 {S_OK, "", 0},
125 {S_OK, "", 0},
126 {S_OK, "", 0},
127 {S_OK, "", 0},
128 {S_OK, "", 0},
129 {S_OK, "", 0},
130 {S_OK, "", 0},
131 {S_FALSE, "", MAX_PATH},
132 {S_FALSE, "", MAX_PATH},
133 {S_OK, "", 0},
134 {S_OK, "", MAX_PATH},
135 {S_OK, "", 0},
136 {S_OK, "", 0},
137 {S_OK, "", 0},
138 {S_OK, "", 0},
139 {S_OK, "", 0},
140 {S_OK, "", 0},
141 {S_OK, "", 0},
142 {S_OK, "", 0},
143 {S_OK, "", 0}
144};
145
146static const ASMPROP_RES winename[ASM_NAME_MAX_PARAMS] =
147{
148 {S_OK, "", 0},
149 {S_OK, "", 0},
150 {S_OK, "", 0},
151 {S_OK, "wine", 10},
152 {S_OK, "", 0},
153 {S_OK, "", 0},
154 {S_OK, "", 0},
155 {S_OK, "", 0},
156 {S_OK, "", 0},
157 {S_OK, "", 0},
158 {S_OK, "", 0},
159 {S_OK, "", 0},
160 {S_OK, "", 0},
161 {S_OK, "", 0},
162 {S_OK, "", 0},
163 {S_FALSE, "", MAX_PATH},
164 {S_FALSE, "", MAX_PATH},
165 {S_OK, "", 0},
166 {S_OK, "", MAX_PATH},
167 {S_OK, "", 0},
168 {S_OK, "", 0},
169 {S_OK, "", 0},
170 {S_OK, "", 0},
171 {S_OK, "", 0},
172 {S_OK, "", 0},
173 {S_OK, "", 0},
174 {S_OK, "", 0},
175 {S_OK, "", 0}
176};
177
178static const ASMPROP_RES vername[ASM_NAME_MAX_PARAMS] =
179{
180 {S_OK, "", 0},
181 {S_OK, "", 0},
182 {S_OK, "", 0},
183 {S_OK, "wine", 10},
184 {S_OK, "\x01", 2},
185 {S_OK, "\x02", 2},
186 {S_OK, "\x03", 2},
187 {S_OK, "\x04", 2},
188 {S_OK, "", 0},
189 {S_OK, "", 0},
190 {S_OK, "", 0},
191 {S_OK, "", 0},
192 {S_OK, "", 0},
193 {S_OK, "", 0},
194 {S_OK, "", 0},
195 {S_FALSE, "", MAX_PATH},
196 {S_FALSE, "", MAX_PATH},
197 {S_OK, "", 0},
198 {S_OK, "", MAX_PATH},
199 {S_OK, "", 0},
200 {S_OK, "", 0},
201 {S_OK, "", 0},
202 {S_OK, "", 0},
203 {S_OK, "", 0},
204 {S_OK, "", 0},
205 {S_OK, "", 0},
206 {S_OK, "", 0},
207 {S_OK, "", 0}
208};
209
210static const ASMPROP_RES badvername[ASM_NAME_MAX_PARAMS] =
211{
212 {S_OK, "", 0},
213 {S_OK, "", 0},
214 {S_OK, "", 0},
215 {S_OK, "wine", 10},
216 {S_OK, "\x01", 2},
217 {S_OK, "\x05", 2},
218 {S_OK, "", 0},
219 {S_OK, "", 0},
220 {S_OK, "", 0},
221 {S_OK, "", 0},
222 {S_OK, "", 0},
223 {S_OK, "", 0},
224 {S_OK, "", 0},
225 {S_OK, "", 0},
226 {S_OK, "", 0},
227 {S_FALSE, "", MAX_PATH},
228 {S_FALSE, "", MAX_PATH},
229 {S_OK, "", 0},
230 {S_OK, "", MAX_PATH},
231 {S_OK, "", 0},
232 {S_OK, "", 0},
233 {S_OK, "", 0},
234 {S_OK, "", 0},
235 {S_OK, "", 0},
236 {S_OK, "", 0},
237 {S_OK, "", 0},
238 {S_OK, "", 0},
239 {S_OK, "", 0}
240};
241
242static const ASMPROP_RES neutralname[ASM_NAME_MAX_PARAMS] =
243{
244 {S_OK, "", 0},
245 {S_OK, "", 0},
246 {S_OK, "", 0},
247 {S_OK, "wine", 10},
248 {S_OK, "", 0},
249 {S_OK, "", 0},
250 {S_OK, "", 0},
251 {S_OK, "", 0},
252 {S_OK, "", 2},
253 {S_OK, "", 0},
254 {S_OK, "", 0},
255 {S_OK, "", 0},
256 {S_OK, "", 0},
257 {S_OK, "", 0},
258 {S_OK, "", 0},
259 {S_FALSE, "", MAX_PATH},
260 {S_FALSE, "", MAX_PATH},
261 {S_OK, "", 0},
262 {S_OK, "", MAX_PATH},
263 {S_OK, "", 0},
264 {S_OK, "", 0},
265 {S_OK, "", 0},
266 {S_OK, "", 0},
267 {S_OK, "", 0},
268 {S_OK, "", 0},
269 {S_OK, "", 0},
270 {S_OK, "", 0},
271 {S_OK, "", 0}
272};
273
274static const ASMPROP_RES enname[ASM_NAME_MAX_PARAMS] =
275{
276 {S_OK, "", 0},
277 {S_OK, "", 0},
278 {S_OK, "", 0},
279 {S_OK, "wine", 10},
280 {S_OK, "", 0},
281 {S_OK, "", 0},
282 {S_OK, "", 0},
283 {S_OK, "", 0},
284 {S_OK, "en", 6},
285 {S_OK, "", 0},
286 {S_OK, "", 0},
287 {S_OK, "", 0},
288 {S_OK, "", 0},
289 {S_OK, "", 0},
290 {S_OK, "", 0},
291 {S_FALSE, "", MAX_PATH},
292 {S_FALSE, "", MAX_PATH},
293 {S_OK, "", 0},
294 {S_OK, "", MAX_PATH},
295 {S_OK, "", 0},
296 {S_OK, "", 0},
297 {S_OK, "", 0},
298 {S_OK, "", 0},
299 {S_OK, "", 0},
300 {S_OK, "", 0},
301 {S_OK, "", 0},
302 {S_OK, "", 0},
303 {S_OK, "", 0}
304};
305
306static const ASMPROP_RES pubkeyname[ASM_NAME_MAX_PARAMS] =
307{
308 {S_OK, "", 0},
309 {S_OK, "\x01\x23\x45\x67\x89\x0a\xbc\xde", 8},
310 {S_OK, "", 0},
311 {S_OK, "wine", 10},
312 {S_OK, "", 0},
313 {S_OK, "", 0},
314 {S_OK, "", 0},
315 {S_OK, "", 0},
316 {S_OK, "", 0},
317 {S_OK, "", 0},
318 {S_OK, "", 0},
319 {S_OK, "", 0},
320 {S_OK, "", 0},
321 {S_OK, "", 0},
322 {S_OK, "", 0},
323 {S_OK, "", MAX_PATH},
324 {S_OK, "", MAX_PATH},
325 {S_OK, "", 0},
326 {S_OK, "", MAX_PATH},
327 {S_OK, "", 0},
328 {S_OK, "", 0},
329 {S_OK, "", 0},
330 {S_OK, "", 0},
331 {S_OK, "", 0},
332 {S_OK, "", 0},
333 {S_OK, "", 0},
334 {S_OK, "", 0},
335 {S_OK, "", 0}
336};
337
338static inline void to_widechar(LPWSTR dest, LPCSTR src)
339{
341}
342
344 const ASMPROP_RES *vals, int line)
345{
346 HRESULT hr;
347 DWORD i, size;
350
351 for (i = 0; i < ASM_NAME_MAX_PARAMS; i++)
352 {
353 to_widechar(expect, vals[i].val);
354
355 size = MAX_PATH;
356 memset( str, 0xcc, sizeof(str) );
357 hr = IAssemblyName_GetProperty(name, i, str, &size);
358
359 ok(hr == vals[i].hr ||
360 broken(i >= ASM_NAME_CONFIG_MASK && hr == E_INVALIDARG) || /* .NET 1.1 */
361 broken(i >= ASM_NAME_FILE_MAJOR_VERSION && hr == E_INVALIDARG), /* .NET 1.0 */
362 "%d: prop %d: Expected %08x, got %08x\n", line, i, vals[i].hr, hr);
363 if (hr != E_INVALIDARG)
364 {
365 ok(size == vals[i].size, "%d: prop %d: Expected %d, got %d\n", line, i, vals[i].size, size);
366 if (!size)
367 {
368 ok(str[0] == 0xcccc, "%d: prop %d: str[0] = %x\n", line, i, str[0]);
369 }
370 else if (size != MAX_PATH)
371 {
372 if (i != ASM_NAME_NAME && i != ASM_NAME_CULTURE)
373 ok( !memcmp( vals[i].val, str, size ), "%d: prop %d: wrong value\n", line, i );
374 else
375 ok( !lstrcmpW( expect, str ), "%d: prop %d: Expected %s, got %s\n",
377 }
378
379 if (size != 0 && size != MAX_PATH)
380 {
381 size--;
382 hr = IAssemblyName_GetProperty(name, i, str, &size);
384 "%d: prop %d: Expected STRSAFE_E_INSUFFICIENT_BUFFER, got %08x\n", line, i, hr);
385 ok(size == vals[i].size, "%d: prop %d: Expected %d, got %d\n", line, i, vals[i].size, size);
386 }
387 }
388 }
389}
390
391#define test_assembly_name_props(name, vals) \
392 test_assembly_name_props_line(name, vals, __LINE__);
393
395{
398 WCHAR namestr[MAX_PATH];
399 DWORD size, hi, lo;
400 PEKIND arch;
401 HRESULT hr;
402
403 static const WCHAR empty[] = {0};
404
405 /* NULL ppAssemblyNameObj */
406 to_widechar(namestr, "wine.dll");
407 hr = pCreateAssemblyNameObject(NULL, namestr, 0, NULL);
408 ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr);
409
410 /* NULL szAssemblyName, CANOF_PARSE_DISPLAY_NAME */
411 name = (IAssemblyName *)0xdeadbeef;
412 hr = pCreateAssemblyNameObject(&name, NULL, CANOF_PARSE_DISPLAY_NAME, NULL);
413 ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr);
414 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
415
416 /* empty szAssemblyName, CANOF_PARSE_DISPLAY_NAME */
417 name = (IAssemblyName *)0xdeadbeef;
418 hr = pCreateAssemblyNameObject(&name, empty, CANOF_PARSE_DISPLAY_NAME, NULL);
419 ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %08x\n", hr);
420 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
421
422 /* check the contents of the AssemblyName for default values */
423
424 /* NULL szAssemblyName */
425 name = NULL;
426 hr = pCreateAssemblyNameObject(&name, NULL, CANOF_SET_DEFAULT_VALUES, NULL);
427 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
428 ok(name != NULL, "Expected non-NULL name\n");
429
430 size = MAX_PATH;
431 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
433 broken(hr == E_INVALIDARG), /* .NET 1.x */
434 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
435
436 str[0] = 'a';
437 size = MAX_PATH;
438 hr = IAssemblyName_GetName(name, &size, str);
439 ok(hr == S_OK, "got %08x\n", hr);
440 ok(str[0] == 'a', "got %c\n", str[0]);
441 ok(!size, "got %u\n", size);
442
443 hi = 0xbeefcace;
444 lo = 0xcafebabe;
445 hr = IAssemblyName_GetVersion(name, &hi, &lo);
447 broken(hr == S_OK), /* .NET 1.x */
448 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
449 ok(hi == 0, "Expected 0, got %08x\n", hi);
450 ok(lo == 0, "Expected 0, got %08x\n", lo);
451
452 if (hr == S_OK)
453 win_skip(".NET 1.x doesn't handle ASM_NAME_PROCESSOR_ID_ARRAY"
454 " and ASM_NAME_OSINFO_ARRAY correctly\n");
455 else
457
458 IAssemblyName_Release(name);
459
460 /* empty szAssemblyName */
461 name = NULL;
462 hr = pCreateAssemblyNameObject(&name, empty, CANOF_SET_DEFAULT_VALUES, NULL);
463 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
464 ok(name != NULL, "Expected non-NULL name\n");
465
466 size = MAX_PATH;
467 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
469 broken(hr == S_OK), /* .NET 1.x */
470 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
471
472 size = 0;
473 hr = IAssemblyName_GetName(name, &size, NULL);
474 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08x\n", hr);
475 ok(size == 1, "got %u\n", size);
476
477 if (0) /* crash */
478 {
479 str[0] = '\0';
480 hr = IAssemblyName_GetName(name, NULL, str);
481 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08x\n", hr);
482 ok(!str[0], "got %c\n", str[0]);
483 }
484
485 size = 0;
486 str[0] = '\0';
487 hr = IAssemblyName_GetName(name, &size, str);
488 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08x\n", hr);
489 ok(!str[0], "got %c\n", str[0]);
490 ok(size == 1, "got %u\n", size);
491
492 size = MAX_PATH;
493 str[0] = '\0';
494 hr = IAssemblyName_GetName(name, &size, str);
495 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
496 ok(!str[0], "Expected empty name\n");
497 ok(size == 1, "Expected 1, got %d\n", size);
498
499 hi = 0xbeefcace;
500 lo = 0xcafebabe;
501 hr = IAssemblyName_GetVersion(name, &hi, &lo);
503 broken(hr == S_OK), /* .NET 1.x */
504 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
505 ok(hi == 0, "Expected 0, got %08x\n", hi);
506 ok(lo == 0, "Expected 0, got %08x\n", lo);
507
508 if (hr == S_OK)
509 win_skip(".NET 1.x doesn't handle ASM_NAME_PROCESSOR_ID_ARRAY"
510 " and ASM_NAME_OSINFO_ARRAY correctly\n");
511 else
513
514 IAssemblyName_Release(name);
515
516 /* 'wine' */
517 to_widechar(namestr, "wine");
518 name = NULL;
519 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_SET_DEFAULT_VALUES, NULL);
520 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
521 ok(name != NULL, "Expected non-NULL name\n");
522
523 size = 0;
524 hr = IAssemblyName_GetDisplayName(name, NULL, &size, 0);
525 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08x\n", hr);
526 ok(size == 5, "got %u\n", size);
527
528 size = 3;
529 hr = IAssemblyName_GetDisplayName(name, NULL, &size, 0);
530 ok(hr == E_NOT_SUFFICIENT_BUFFER || broken(hr == E_INVALIDARG), "got %08x\n", hr);
531 ok(size == 5 || broken(size == 3), "got %u\n", size);
532
533 size = 3;
534 str[0] = 'a';
535 hr = IAssemblyName_GetDisplayName(name, str, &size, 0);
536 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08x\n", hr);
537 ok(str[0] == 'a', "got %c\n", str[0]);
538 ok(size == 5, "got %u\n", size);
539
540 size = 0;
541 str[0] = 'a';
542 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
543 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08x\n", hr);
544 ok(str[0] == 'a', "got %c\n", str[0]);
545 ok(size == 5, "Wrong size %u\n", size);
546
547 size = MAX_PATH;
548 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
549 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
550 ok_aw("wine", str);
551 ok(size == 5, "Expected 5, got %d\n", size);
552
553 size = 0;
554 str[0] = 0;
555 hr = IAssemblyName_GetName(name, &size, str);
556 ok(hr == E_NOT_SUFFICIENT_BUFFER, "got %08x\n", hr);
557 ok(!str[0], "got %c\n", str[0]);
558 ok(size == 5, "got %u\n", size);
559
560 size = MAX_PATH;
561 str[0] = '\0';
562 hr = IAssemblyName_GetName(name, &size, str);
563 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
564 ok_aw("wine", str);
565 ok(size == 5, "Expected 5, got %d\n", size);
566
567 hi = 0xbeefcace;
568 lo = 0xcafebabe;
569 hr = IAssemblyName_GetVersion(name, &hi, &lo);
571 broken(hr == S_OK), /* .NET 1.x */
572 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
573 ok(hi == 0, "Expected 0, got %08x\n", hi);
574 ok(lo == 0, "Expected 0, got %08x\n", lo);
575
576 if (hr == S_OK)
577 win_skip(".NET 1.x doesn't handle ASM_NAME_PROCESSOR_ID_ARRAY"
578 " and ASM_NAME_OSINFO_ARRAY correctly\n");
579 else
581
582 IAssemblyName_Release(name);
583
584 /* check the contents of the AssemblyName with parsing */
585
586 /* 'wine' */
587 to_widechar(namestr, "wine");
588 name = NULL;
589 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
590 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
591 ok(name != NULL, "Expected non-NULL name\n");
592
593 size = MAX_PATH;
594 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
595 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
596 ok_aw("wine", str);
597 ok(size == 5, "Expected 5, got %d\n", size);
598
599 size = MAX_PATH;
600 str[0] = '\0';
601 hr = IAssemblyName_GetName(name, &size, str);
602 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
603 ok_aw("wine", str);
604 ok(size == 5, "Expected 5, got %d\n", size);
605
606 hi = 0xbeefcace;
607 lo = 0xcafebabe;
608 hr = IAssemblyName_GetVersion(name, &hi, &lo);
610 broken(hr == S_OK), /* .NET 1.x */
611 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
612 ok(hi == 0, "Expected 0, got %08x\n", hi);
613 ok(lo == 0, "Expected 0, got %08x\n", lo);
614
616
617 IAssemblyName_Release(name);
618
619 /* 'wine, Version=1.2.3.4' */
620 to_widechar(namestr, "wine, Version=1.2.3.4");
621 name = NULL;
622 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
623 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
624 ok(name != NULL, "Expected non-NULL name\n");
625
626 size = MAX_PATH;
627 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
628 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
629 ok_aw("wine, Version=1.2.3.4", str);
630 ok(size == 22, "Expected 22, got %d\n", size);
631
632 size = MAX_PATH;
633 str[0] = '\0';
634 hr = IAssemblyName_GetName(name, &size, str);
635 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
636 ok_aw("wine", str);
637 ok(size == 5, "Expected 5, got %d\n", size);
638
639 hi = 0xbeefcace;
640 lo = 0xcafebabe;
641 hr = IAssemblyName_GetVersion(name, &hi, &lo);
642 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
643 ok(hi == 0x00010002, "Expected 0x00010002, got %08x\n", hi);
644 ok(lo == 0x00030004, "Expected 0x00030004, got %08x\n", lo);
645
647
648 IAssemblyName_Release(name);
649
650 /* Version isn't of the form 1.x.x.x */
651 to_widechar(namestr, "wine, Version=1.5");
652 name = NULL;
653 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
654 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
655 ok(name != NULL, "Expected non-NULL name\n");
656
657 size = MAX_PATH;
658 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
659 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
660 ok_aw("wine, Version=1.5", str);
661 ok(size == 18, "Expected 18, got %d\n", size);
662
663 size = MAX_PATH;
664 str[0] = '\0';
665 hr = IAssemblyName_GetName(name, &size, str);
666 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
667 ok_aw("wine", str);
668 ok(size == 5, "Expected 5, got %d\n", size);
669
670 hi = 0xbeefcace;
671 lo = 0xcafebabe;
672 hr = IAssemblyName_GetVersion(name, &hi, &lo);
674 broken(hr == S_OK), /* .NET 1.x */
675 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
676 ok(hi == 0 ||
677 broken(hi == 0x10005), /* .NET 1.x */
678 "Expected 0, got %08x\n", hi);
679 ok(lo == 0, "Expected 0, got %08x\n", lo);
680
682
683 IAssemblyName_Release(name);
684
685 /* 'wine, Culture=neutral' */
686 to_widechar(namestr, "wine, Culture=neutral");
687 name = NULL;
688 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
689 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
690 ok(name != NULL, "Expected non-NULL name\n");
691
692 size = MAX_PATH;
693 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
694 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
695 ok_aw("wine, Culture=neutral", str);
696 ok(size == 22, "Expected 22, got %d\n", size);
697
698 size = MAX_PATH;
699 str[0] = '\0';
700 hr = IAssemblyName_GetName(name, &size, str);
701 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
702 ok_aw("wine", str);
703 ok(size == 5, "Expected 5, got %d\n", size);
704
705 hi = 0xbeefcace;
706 lo = 0xcafebabe;
707 hr = IAssemblyName_GetVersion(name, &hi, &lo);
709 broken(hr == S_OK), /* .NET 1.x */
710 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
711 ok(hi == 0, "Expected 0, got %08x\n", hi);
712 ok(lo == 0, "Expected 0, got %08x\n", lo);
713
715
716 IAssemblyName_Release(name);
717
718 /* 'wine, Culture=en' */
719 to_widechar(namestr, "wine, Culture=en");
720 name = NULL;
721 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
722 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
723 ok(name != NULL, "Expected non-NULL name\n");
724
725 size = MAX_PATH;
726 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
727 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
728 ok_aw("wine, Culture=en", str);
729 ok(size == 17, "Expected 17, got %d\n", size);
730
731 size = MAX_PATH;
732 str[0] = '\0';
733 hr = IAssemblyName_GetName(name, &size, str);
734 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
735 ok_aw("wine", str);
736 ok(size == 5, "Expected 5, got %d\n", size);
737
738 hi = 0xbeefcace;
739 lo = 0xcafebabe;
740 hr = IAssemblyName_GetVersion(name, &hi, &lo);
742 broken(hr == S_OK), /* .NET 1.x */
743 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
744 ok(hi == 0, "Expected 0, got %08x\n", hi);
745 ok(lo == 0, "Expected 0, got %08x\n", lo);
746
748
749 IAssemblyName_Release(name);
750
751 /* 'wine, PublicKeyToken=01234567890abcde' */
752 to_widechar(namestr, "wine, PublicKeyToken=01234567890abcde");
753 name = NULL;
754 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
755 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
756 ok(name != NULL, "Expected non-NULL name\n");
757
758 size = MAX_PATH;
759 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
760 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
761 ok_aw("wine, PublicKeyToken=01234567890abcde", str);
762 ok(size == 38, "Expected 38, got %d\n", size);
763
764 size = MAX_PATH;
765 str[0] = '\0';
766 hr = IAssemblyName_GetName(name, &size, str);
767 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
768 ok_aw("wine", str);
769 ok(size == 5, "Expected 5, got %d\n", size);
770
771 hi = 0xbeefcace;
772 lo = 0xcafebabe;
773 hr = IAssemblyName_GetVersion(name, &hi, &lo);
775 broken(hr == S_OK), /* .NET 1.x */
776 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
777 ok(hi == 0, "Expected 0, got %08x\n", hi);
778 ok(lo == 0, "Expected 0, got %08x\n", lo);
779
781
782 IAssemblyName_Release(name);
783
784 /* Processor architecture tests */
785 to_widechar(namestr, "wine, processorArchitecture=x86");
786 name = NULL;
787 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
788 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
789
790 ok(name != NULL, "Expected non-NULL name\n");
791
792 size = MAX_PATH;
793 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_PROCESSORARCHITECTURE);
794 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
795
797
798 if (lstrcmpA(string1, "wine") == 0)
799 win_skip("processorArchitecture not supported on .NET 1.x\n");
800 else
801 {
802 ok_aw("wine, processorArchitecture=x86", str);
803 ok(size == 32, "Expected 32, got %d\n", size);
804
805 size = sizeof(arch);
806 hr = IAssemblyName_GetProperty(name, ASM_NAME_ARCHITECTURE, &arch, &size);
807 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
808 ok(arch == peI386, "Expected peI386, got %d\n", arch);
809 ok(size == sizeof(arch), "Wrong size %d\n", size);
810
811 IAssemblyName_Release(name);
812
813 /* amd64 */
814 to_widechar(namestr, "wine, processorArchitecture=AMD64");
815 name = NULL;
816 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
817 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
818
819 size = MAX_PATH;
820 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_PROCESSORARCHITECTURE);
821 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
822 ok_aw("wine, processorArchitecture=AMD64", str);
823 ok(size == 34, "Expected 34, got %d\n", size);
824
825 size = sizeof(arch);
826 hr = IAssemblyName_GetProperty(name, ASM_NAME_ARCHITECTURE, &arch, &size);
827 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
828 ok(arch == peAMD64, "Expected peAMD64, got %d\n", arch);
829 ok(size == sizeof(arch), "Wrong size %d\n", size);
830
831 IAssemblyName_Release(name);
832
833 /* ia64 */
834 to_widechar(namestr, "wine, processorArchitecture=IA64");
835 name = NULL;
836 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
837 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
838
839 size = MAX_PATH;
840 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_PROCESSORARCHITECTURE);
841 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
842 ok_aw("wine, processorArchitecture=IA64", str);
843 ok(size == 33, "Expected 33, got %d\n", size);
844
845 size = sizeof(arch);
846 hr = IAssemblyName_GetProperty(name, ASM_NAME_ARCHITECTURE, &arch, &size);
847 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
848 ok(arch == peIA64, "Expected peIA64, got %d\n", arch);
849 ok(size == sizeof(arch), "Wrong size %d\n", size);
850
851 IAssemblyName_Release(name);
852
853 /* msil */
854 to_widechar(namestr, "wine, processorArchitecture=MSIL");
855 name = NULL;
856 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
857 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
858
859 size = MAX_PATH;
860 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_PROCESSORARCHITECTURE);
861 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
862 ok_aw("wine, processorArchitecture=MSIL", str);
863 ok(size == 33, "Expected 33, got %d\n", size);
864
865 size = sizeof(arch);
866 hr = IAssemblyName_GetProperty(name, ASM_NAME_ARCHITECTURE, &arch, &size);
867 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
868 ok(arch == peMSIL, "Expected peMSIL, got %d\n", arch);
869 ok(size == sizeof(arch), "Wrong size %d\n", size);
870
871 IAssemblyName_Release(name);
872 }
873
874 /* Pulling out various different values */
875 to_widechar(namestr, "wine, Version=1.2.3.4, Culture=en, PublicKeyToken=1234567890abcdef");
876 name = NULL;
877 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
878 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
879 ok(name != NULL, "Expected non-NULL name\n");
880
881 size = MAX_PATH;
882 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_VERSION | ASM_DISPLAYF_CULTURE);
883 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
884 ok_aw("wine, Version=1.2.3.4, Culture=en", str);
885 ok(size == 34, "Expected 34, got %d\n", size);
886
887 size = MAX_PATH;
888 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_CULTURE | ASM_DISPLAYF_PUBLIC_KEY_TOKEN);
889 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
890 ok_aw("wine, Culture=en, PublicKeyToken=1234567890abcdef", str);
891 ok(size == 50, "Expected 50, got %d\n", size);
892
893 size = MAX_PATH;
894 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
895 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
896 ok_aw("wine, Version=1.2.3.4, Culture=en, PublicKeyToken=1234567890abcdef", str);
897 ok(size == 67, "Expected 67, got %d\n", size);
898
899 IAssemblyName_Release(name);
900
901 /* invalid property */
902 to_widechar(namestr, "wine, BadProp=42");
903 name = NULL;
904 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
905 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
906 ok(name != NULL, "Expected non-NULL name\n");
907
908 size = MAX_PATH;
909 str[0] = '\0';
910 hr = IAssemblyName_GetDisplayName(name, str, &size, ASM_DISPLAYF_FULL);
911 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
912 ok_aw("wine", str);
913 ok(size == 5, "Expected 5, got %d\n", size);
914
915 size = MAX_PATH;
916 str[0] = '\0';
917 hr = IAssemblyName_GetName(name, &size, str);
918 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
919 ok_aw("wine", str);
920 ok(size == 5, "Expected 5, got %d\n", size);
921
922 hi = 0xbeefcace;
923 lo = 0xcafebabe;
924 hr = IAssemblyName_GetVersion(name, &hi, &lo);
926 broken(hr == S_OK), /* .NET 1.x */
927 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
928 ok(hi == 0, "Expected 0, got %08x\n", hi);
929 ok(lo == 0, "Expected 0, got %08x\n", lo);
930
932
933 IAssemblyName_Release(name);
934
935 /* PublicKeyToken is not 16 chars long */
936 to_widechar(namestr, "wine, PublicKeyToken=567890abcdef");
937 name = (IAssemblyName *)0xdeadbeef;
938 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
939 if (hr == S_OK && name != (IAssemblyName *)0xdeadbeef)
940 {
941 win_skip(".NET 1.x doesn't check PublicKeyToken correctly\n");
942 IAssemblyName_Release(name);
943 return;
944 }
946 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
947 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
948
949 /* PublicKeyToken contains invalid chars */
950 to_widechar(namestr, "wine, PublicKeyToken=1234567890ghijkl");
951 name = (IAssemblyName *)0xdeadbeef;
952 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
954 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
955 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
956
957 /* no comma separator */
958 to_widechar(namestr, "wine PublicKeyToken=1234567890abcdef");
959 name = (IAssemblyName *)0xdeadbeef;
960 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
962 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
963 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
964 if(SUCCEEDED(hr)) IAssemblyName_Release(name);
965
966 /* no '=' */
967 to_widechar(namestr, "wine, PublicKeyToken");
968 name = (IAssemblyName *)0xdeadbeef;
969 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
971 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
972 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
973
974 /* no value */
975 to_widechar(namestr, "wine, PublicKeyToken=");
976 name = (IAssemblyName *)0xdeadbeef;
977 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
979 "Expected FUSION_E_INVALID_NAME, got %08x\n", hr);
980 ok(name == (IAssemblyName *)0xdeadbeef, "Expected 0xdeadbeef, got %p\n", name);
981
982 /* no spaces */
983 to_widechar(namestr, "wine,version=1.0.0.0");
984 name = (IAssemblyName *)0xdeadbeef;
985 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
986 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
987 ok(name != NULL, "Expected non-NULL name\n");
988 hi = lo = 0xdeadbeef;
989 hr = IAssemblyName_GetVersion(name, &hi, &lo);
990 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
991 ok(hi == 65536, "Expected 536, got %u\n", hi);
992 ok(lo == 0, "Expected 0, got %u\n", lo);
993 IAssemblyName_Release(name);
994
995 /* quoted values */
996 to_widechar(namestr, "wine, version=\"1.0.0.0\",culture=\"en\"");
997 name = (IAssemblyName *)0xdeadbeef;
998 hr = pCreateAssemblyNameObject(&name, namestr, CANOF_PARSE_DISPLAY_NAME, NULL);
999 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
1000 ok(name != NULL, "Expected non-NULL name\n");
1001 hi = lo = 0xdeadbeef;
1002 hr = IAssemblyName_GetVersion(name, &hi, &lo);
1003 ok(hr == S_OK, "Expected S_OK, got %08x\n", hr);
1004 ok(hi == 65536, "Expected 65536, got %u\n", hi);
1005 ok(lo == 0, "Expected 0, got %u\n", lo);
1006 IAssemblyName_Release(name);
1007}
1008
1010{
1011 static const WCHAR wine1[] =
1012 {'w','i','n','e',0};
1013 static const WCHAR wine2[] =
1014 {'w','i','n','e',',','v','e','r','s','i','o','n','=','1','.','0','.','0','.','0',0};
1015 static const WCHAR wine3[] =
1016 {'w','i','n','e',',','v','e','r','s','i','o','n','=','1','.','0','.','0','.','0',',',
1017 'c','u','l','t','u','r','e','=','n','e','u','t','r','a','l',0};
1018 static const WCHAR wine4[] =
1019 {'w','i','n','e',',','v','e','r','s','i','o','n','=','1','.','0','.','0','.','0',',',
1020 'c','u','l','t','u','r','e','=','e','n',0};
1021 static const WCHAR wine5[] =
1022 {'w','i','n','e',',','v','e','r','s','i','o','n','=','1','.','0','.','0','.','0',',',
1023 'p','u','b','l','i','c','K','e','y','T','o','k','e','n','=','1','2','3','4','5','6',
1024 '7','8','9','0','a','b','c','d','e','f',0};
1025 HRESULT hr;
1027
1028 hr = pCreateAssemblyNameObject( &name1, wine1, CANOF_PARSE_DISPLAY_NAME, NULL );
1029 ok( hr == S_OK, "got %08x\n", hr );
1030
1031 hr = pCreateAssemblyNameObject( &name2, wine1, CANOF_PARSE_DISPLAY_NAME, NULL );
1032 ok( hr == S_OK, "got %08x\n", hr );
1033
1034 if (0) { /* crashes on some old version */
1035 hr = IAssemblyName_IsEqual( name1, NULL, 0 );
1036 ok( hr == S_FALSE, "got %08x\n", hr );
1037
1038 hr = IAssemblyName_IsEqual( name1, NULL, ASM_CMPF_IL_ALL );
1039 ok( hr == S_FALSE, "got %08x\n", hr );
1040 }
1041
1042 hr = IAssemblyName_IsEqual( name1, name1, ASM_CMPF_IL_ALL );
1043 ok( hr == S_OK, "got %08x\n", hr );
1044
1045 hr = IAssemblyName_IsEqual( name1, name2, ASM_CMPF_IL_ALL );
1046 ok( hr == S_OK, "got %08x\n", hr );
1047
1048 IAssemblyName_Release( name2 );
1049 hr = pCreateAssemblyNameObject( &name2, wine2, CANOF_PARSE_DISPLAY_NAME, NULL );
1050 ok( hr == S_OK, "got %08x\n", hr );
1051
1052 hr = IAssemblyName_IsEqual( name1, name2, ASM_CMPF_IL_ALL );
1053 ok( hr == S_OK, "got %08x\n", hr );
1054
1055 IAssemblyName_Release( name2 );
1056 hr = pCreateAssemblyNameObject( &name2, wine3, CANOF_PARSE_DISPLAY_NAME, NULL );
1057 ok( hr == S_OK, "got %08x\n", hr );
1058
1059 hr = IAssemblyName_IsEqual( name1, name2, ASM_CMPF_IL_ALL );
1060 ok( hr == S_OK, "got %08x\n", hr );
1061
1062 IAssemblyName_Release( name1 );
1063 hr = pCreateAssemblyNameObject( &name1, wine4, CANOF_PARSE_DISPLAY_NAME, NULL );
1064 ok( hr == S_OK, "got %08x\n", hr );
1065
1066 hr = IAssemblyName_IsEqual( name1, name2, ASM_CMPF_IL_ALL );
1067 ok( hr == S_FALSE, "got %08x\n", hr );
1068
1069 IAssemblyName_Release( name1 );
1070 hr = pCreateAssemblyNameObject( &name1, wine1, CANOF_PARSE_DISPLAY_NAME, NULL );
1071 ok( hr == S_OK, "got %08x\n", hr );
1072
1073 IAssemblyName_Release( name2 );
1074 hr = pCreateAssemblyNameObject( &name2, wine5, CANOF_PARSE_DISPLAY_NAME, NULL );
1075 ok( hr == S_OK, "got %08x\n", hr );
1076
1077 hr = IAssemblyName_IsEqual( name1, name2, ASM_CMPF_IL_ALL );
1078 ok( hr == S_OK, "got %08x\n", hr );
1079
1080 IAssemblyName_Release( name1 );
1081 IAssemblyName_Release( name2 );
1082}
1083
1085{
1086 if (!init_functionpointers())
1087 {
1088 win_skip("fusion.dll not available\n");
1089 return;
1090 }
1091
1094}
#define expect(EXPECTED, GOT)
Definition: SystemMenu.c:483
#define broken(x)
Definition: _sntprintf.h:21
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
#define ok(value,...)
Definition: atltest.h:57
#define START_TEST(x)
Definition: atltest.h:75
#define FUSION_E_INVALID_NAME
Definition: corerror.h:123
#define E_INVALIDARG
Definition: ddrawi.h:101
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static const WCHAR szDllName[]
Definition: sip.c:61
static const WCHAR empty[]
Definition: main.c:47
#define CP_ACP
Definition: compat.h:109
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
#define MAX_PATH
Definition: compat.h:34
#define WideCharToMultiByte
Definition: compat.h:111
#define MultiByteToWideChar
Definition: compat.h:110
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
PEKIND
Definition: fusion.idl:36
@ peMSIL
Definition: fusion.idl:38
@ peIA64
Definition: fusion.idl:40
@ peI386
Definition: fusion.idl:39
@ peAMD64
Definition: fusion.idl:41
GLsizeiptr size
Definition: glext.h:5919
GLenum src
Definition: glext.h:6340
GLuint GLfloat * val
Definition: glext.h:7180
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define wine_dbgstr_w
Definition: kernel32.h:34
int WINAPI lstrcmpW(LPCWSTR lpString1, LPCWSTR lpString2)
Definition: lstring.c:170
int WINAPI lstrcmpA(LPCSTR lpString1, LPCSTR lpString2)
Definition: lstring.c:18
static LPCSTR DWORD void * pvReserved
Definition: str.c:196
static WCHAR name1[]
Definition: record.c:34
static WCHAR name2[]
Definition: record.c:35
static LPCWSTR szAssemblyName
Definition: asmenum.c:37
static BOOL init_functionpointers(void)
Definition: asmname.c:45
struct _tagASMPROP_RES ASMPROP_RES
static const ASMPROP_RES neutralname[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:242
static const ASMPROP_RES pubkeyname[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:306
static const ASMPROP_RES defaults[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:82
static void test_assembly_name_props_line(IAssemblyName *name, const ASMPROP_RES *vals, int line)
Definition: asmname.c:343
static LPCWSTR DWORD dwFlags
Definition: asmname.c:40
static const ASMPROP_RES vername[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:178
static CHAR string1[MAX_PATH]
Definition: asmname.c:32
static void test_IAssemblyName_IsEqual(void)
Definition: asmname.c:1009
static void test_CreateAssemblyNameObject(void)
Definition: asmname.c:394
static LPCWSTR szVersion
Definition: asmname.c:42
static const ASMPROP_RES enname[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:274
#define ok_aw(aString, wString)
Definition: asmname.c:34
static LPCWSTR LPVOID HMODULE * phModDll
Definition: asmname.c:43
static const ASMPROP_RES emptyname[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:114
static const ASMPROP_RES badvername[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:210
static const ASMPROP_RES winename[ASM_NAME_MAX_PARAMS]
Definition: asmname.c:146
#define test_assembly_name_props(name, vals)
Definition: asmname.c:391
static void to_widechar(LPWSTR dest, LPCSTR src)
Definition: asmname.c:338
static HMODULE hmscoree
Definition: fusion.c:24
static char * dest
Definition: rtl.c:135
const WCHAR * str
#define win_skip
Definition: test.h:160
#define memset(x, y, z)
Definition: compat.h:39
HRESULT hr
Definition: shlfolder.c:183
#define STRSAFE_E_INSUFFICIENT_BUFFER
Definition: strsafe.h:103
DWORD size
Definition: asmname.c:79
HRESULT hr
Definition: asmname.c:77
Definition: parser.c:49
Definition: name.c:39
#define HRESULT
Definition: msvc.h:7
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:2357
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:2345
@ CANOF_PARSE_DISPLAY_NAME
Definition: winsxs.idl:193
@ CANOF_SET_DEFAULT_VALUES
Definition: winsxs.idl:194
const char * LPCSTR
Definition: xmlstorage.h:183
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
char CHAR
Definition: xmlstorage.h:175