2 * PROJECT: ReactOS api tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for CComVariant
5 * PROGRAMMER: Mark Jansen
8 /* In case we are building against the MS headers, we need to disable assertions. */
10 #define _ATL_NO_VARIANT_THROW
15 void expect_bool_imp(const CComVariant
& ccv
, bool value
)
17 winetest_ok(V_VT(&ccv
) == VT_BOOL
, "Expected .vt to be BOOL, was %u\n", V_VT(&ccv
));
18 VARIANT_BOOL expected
= (value
? VARIANT_TRUE
: VARIANT_FALSE
);
19 winetest_ok(V_BOOL(&ccv
) == expected
, "Expected value to be %u, was: %u\n", expected
, V_BOOL(&ccv
));
22 void expect_int_imp(const CComVariant
& ccv
, int value
, unsigned short type
)
24 winetest_ok(V_VT(&ccv
) == type
, "Expected .vt to be %u, was %u\n", type
, V_VT(&ccv
));
25 winetest_ok(V_I4(&ccv
) == value
, "Expected value to be %d, was: %ld\n", value
, V_I4(&ccv
));
28 void expect_uint_imp(const CComVariant
& ccv
, unsigned int value
, unsigned short type
)
30 winetest_ok(V_VT(&ccv
) == type
, "Expected .vt to be %u, was %u\n", type
, V_VT(&ccv
));
31 winetest_ok(V_UI4(&ccv
) == value
, "Expected value to be %u, was: %lu\n", value
, V_UI4(&ccv
));
34 void expect_double_imp(const CComVariant
& ccv
, double value
, unsigned short type
)
36 winetest_ok(V_VT(&ccv
) == type
, "Expected .vt to be %u, was %u\n", type
, V_VT(&ccv
));
37 winetest_ok(V_R8(&ccv
) == value
, "Expected value to be %f, was: %f\n", value
, V_R8(&ccv
));
40 void expect_error_imp(const CComVariant
& ccv
, SCODE value
)
42 winetest_ok(V_VT(&ccv
) == VT_ERROR
, "Expected .vt to be VT_ERROR, was %u\n", V_VT(&ccv
));
43 winetest_ok(V_ERROR(&ccv
) == value
, "Expected value to be %lx, was: %lx\n", value
, V_ERROR(&ccv
));
46 void expect_empty_imp(const CComVariant
& ccv
)
48 winetest_ok(V_VT(&ccv
) == VT_EMPTY
, "Expected .vt to be VT_EMPTY, was %u\n", V_VT(&ccv
));
49 winetest_ok(V_I8(&ccv
) == 0ll, "Expected value to be 0, was: %I64d\n", V_I8(&ccv
));
52 #define expect_bool (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_bool_imp
53 #define expect_int (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_int_imp
54 #define expect_uint (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_uint_imp
55 #define expect_double (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_double_imp
56 #define expect_error (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_error_imp
57 #define expect_empty (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_empty_imp
60 static void test_construction()
67 CComBSTR
bstr(L
"TESTW");
68 CComVariant
olestr((LPCOLESTR
)bstr
), comstr(bstr
);
69 ok(V_VT(&olestr
) == VT_BSTR
, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&olestr
));
70 ok(!wcscmp(V_BSTR(&olestr
), L
"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&olestr
)));
71 ok(V_VT(&comstr
) == VT_BSTR
, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&comstr
));
72 ok(!wcscmp(V_BSTR(&comstr
), L
"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&comstr
)));
75 CComVariant
cstr((LPCSTR
)"TESTA");
76 ok(V_VT(&cstr
) == VT_BSTR
, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&cstr
));
77 ok(!wcscmp(V_BSTR(&cstr
), L
"TESTA"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&cstr
)));
80 CComVariant
trueVal(true), falseVal(false);
81 ok(V_VT(&trueVal
) == VT_BOOL
, "Expected .vt to be BOOL, was %u\n", V_VT(&trueVal
));
82 ok(V_BOOL(&trueVal
) == VARIANT_TRUE
, "Expected value to be VARIANT_TRUE, was: %u\n", V_BOOL(&trueVal
));
83 ok(V_VT(&falseVal
) == VT_BOOL
, "Expected .vt to be BOOL, was %u\n", V_VT(&falseVal
));
84 ok(V_BOOL(&falseVal
) == VARIANT_FALSE
, "Expected value to be VARIANT_TRUE, was: %u\n", V_BOOL(&falseVal
));
87 CComVariant
b1((BYTE
)33);
88 ok(V_VT(&b1
) == VT_UI1
, "Expected .vt to be VT_UI1, was %u\n", V_VT(&b1
));
89 ok(V_UI1(&b1
) == (BYTE
)33, "Expected value to be 33, was: %u\n", V_UI1(&b1
));
92 CComVariant
c1((char)33);
93 ok(V_VT(&c1
) == VT_I1
, "Expected .vt to be VT_I1, was %u\n", V_VT(&c1
));
94 ok(V_I1(&c1
) == (char)33, "Expected value to be 33, was: %d\n", V_I1(&c1
));
97 CComVariant
s1((short)12345);
98 ok(V_VT(&s1
) == VT_I2
, "Expected .vt to be VT_I2, was %u\n", V_VT(&s1
));
99 ok(V_I2(&s1
) == (short)12345, "Expected value to be 12345, was: %d\n", V_I1(&s1
));
102 CComVariant
us1((unsigned short)12345);
103 ok(V_VT(&us1
) == VT_UI2
, "Expected .vt to be VT_UI2, was %u\n", V_VT(&us1
));
104 ok(V_UI2(&us1
) == (unsigned short)12345, "Expected value to be 12345, was: %u\n", V_UI2(&us1
));
107 CComVariant
i1((int)4, VT_I4
), i2((int)3, VT_INT
), i3((int)2, VT_I2
), i4((int)1);
108 expect_int(i1
, 4, VT_I4
);
109 expect_int(i2
, 3, VT_INT
);
110 expect_error(i3
, E_INVALIDARG
);
111 expect_int(i4
, 1, VT_I4
);
114 CComVariant
ui1((unsigned int)4, VT_UI4
), ui2((unsigned int)3, VT_UINT
), ui3((unsigned int)2, VT_UI2
), ui4((unsigned int)1);
115 expect_uint(ui1
, 4, VT_UI4
);
116 expect_uint(ui2
, 3, VT_UINT
);
117 expect_error(ui3
, E_INVALIDARG
);
118 expect_uint(ui4
, 1, VT_UI4
);
121 CComVariant
l1((long)4, VT_I4
), l2((long)3, VT_INT
), l3((long)2, VT_ERROR
), l4((long)1);
122 expect_int(l1
, 4, VT_I4
);
123 expect_error(l2
, E_INVALIDARG
);
125 expect_int(l4
, 1, VT_I4
);
128 CComVariant
ul1((unsigned long)33);
129 expect_uint(ul1
, 33, VT_UI4
);
132 CComVariant
f1(3.4f
);
133 ok(V_VT(&f1
) == VT_R4
, "Expected .vt to be VT_R4, was %u\n", V_VT(&f1
));
134 ok(V_R4(&f1
) == 3.4f
, "Expected value to be 3.4f, was: %f\n", V_R4(&f1
));
137 CComVariant
d1(3.4, VT_R8
), d2(3.4, VT_DATE
), d3(8.8, VT_I1
), d4(1.9);
138 expect_double(d1
, 3.4, VT_R8
);
139 expect_double(d2
, 3.4, VT_DATE
);
140 expect_error(d3
, E_INVALIDARG
);
141 expect_double(d4
, 1.9, VT_R8
);
144 LONGLONG lv
= 12030912309123ll;
146 ok(V_VT(&l1
) == VT_I8
, "Expected .vt to be VT_I8, was %u\n", V_VT(&l1
));
147 ok(V_I8(&l1
) == lv
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv
), wine_dbgstr_longlong(V_I8(&l1
)));
150 ULONGLONG lv
= 12030912309123ull;
152 ok(V_VT(&l1
) == VT_UI8
, "Expected .vt to be VT_UI8, was %u\n", V_VT(&l1
));
153 ok(V_UI8(&l1
) == lv
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv
), wine_dbgstr_longlong(V_UI8(&l1
)));
157 cy
.int64
= 12030912309123ll;
159 ok(V_VT(&c1
) == VT_CY
, "Expected .vt to be VT_CY, was %u\n", V_VT(&c1
));
160 ok(V_CY(&c1
).int64
== cy
.int64
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(cy
.int64
), wine_dbgstr_longlong(V_CY(&c1
).int64
));
167 static void test_copyconstructor()
171 CComVariant
empty2(empty
);
172 expect_empty(empty2
);
175 CComBSTR
bstr(L
"TESTW");
176 CComVariant
olestr((LPCOLESTR
)bstr
);
177 CComVariant
olestr2(olestr
);
178 ok(V_VT(&olestr2
) == VT_BSTR
, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&olestr2
));
179 ok(!wcscmp(V_BSTR(&olestr2
), L
"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&olestr2
)));
182 CComVariant
trueVal(true);
183 CComVariant
trueVal2(trueVal
);
184 ok(V_VT(&trueVal2
) == VT_BOOL
, "Expected .vt to be BOOL, was %u\n", V_VT(&trueVal2
));
185 ok(V_BOOL(&trueVal2
) == VARIANT_TRUE
, "Expected value to be VARIANT_TRUE, was: %u\n", V_BOOL(&trueVal2
));
188 CComVariant
b1((BYTE
)33);
190 ok(V_VT(&b2
) == VT_UI1
, "Expected .vt to be VT_UI1, was %u\n", V_VT(&b2
));
191 ok(V_UI1(&b2
) == (BYTE
)33, "Expected value to be 33, was: %u\n", V_UI1(&b2
));
194 CComVariant
c1((char)33);
196 ok(V_VT(&c2
) == VT_I1
, "Expected .vt to be VT_I1, was %u\n", V_VT(&c2
));
197 ok(V_I1(&c2
) == (char)33, "Expected value to be 33, was: %d\n", V_I1(&c2
));
200 CComVariant
s1((short)12345);
202 ok(V_VT(&s2
) == VT_I2
, "Expected .vt to be VT_I2, was %u\n", V_VT(&s2
));
203 ok(V_I2(&s2
) == (short)12345, "Expected value to be 12345, was: %d\n", V_I1(&s2
));
206 CComVariant
us1((unsigned short)12345);
207 CComVariant
us2(us1
);
208 ok(V_VT(&us2
) == VT_UI2
, "Expected .vt to be VT_UI2, was %u\n", V_VT(&us2
));
209 ok(V_UI2(&us2
) == (unsigned short)12345, "Expected value to be 12345, was: %u\n", V_UI2(&us2
));
212 CComVariant
i1((int)4, VT_I4
);
214 expect_int(i2
, 4, VT_I4
);
217 CComVariant
ui1((unsigned int)4, VT_UI4
);
218 CComVariant
ui2(ui1
);
219 expect_uint(ui2
, 4, VT_UI4
);
222 CComVariant
l1((long)4, VT_I4
);
224 expect_uint(l2
, 4, VT_I4
);
227 CComVariant
ul1((unsigned long)33);
228 CComVariant
ul2(ul1
);
229 expect_uint(ul2
, 33, VT_UI4
);
232 CComVariant
f1(3.4f
);
234 ok(V_VT(&f2
) == VT_R4
, "Expected .vt to be VT_R4, was %u\n", V_VT(&f2
));
235 ok(V_R4(&f2
) == 3.4f
, "Expected value to be 3.4f, was: %f\n", V_R4(&f2
));
238 CComVariant
d1(3.4, VT_R8
);
240 expect_double(d2
, 3.4, VT_R8
);
243 LONGLONG lv
= 12030912309123ll;
246 ok(V_VT(&l2
) == VT_I8
, "Expected .vt to be VT_I8, was %u\n", V_VT(&l2
));
247 ok(V_I8(&l2
) == lv
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv
), wine_dbgstr_longlong(V_I8(&l2
)));
250 ULONGLONG lv
= 12030912309123ull;
253 ok(V_VT(&l2
) == VT_UI8
, "Expected .vt to be VT_UI8, was %u\n", V_VT(&l2
));
254 ok(V_UI8(&l2
) == lv
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv
), wine_dbgstr_longlong(V_UI8(&l2
)));
258 cy
.int64
= 12030912309123ll;
261 ok(V_VT(&c2
) == VT_CY
, "Expected .vt to be VT_I8, was %u\n", V_VT(&c2
));
262 ok(V_CY(&c2
).int64
== cy
.int64
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(cy
.int64
), wine_dbgstr_longlong(V_CY(&c2
).int64
));
268 static void test_assign()
272 CComVariant empty2
= empty
;
273 expect_empty(empty2
);
276 CComBSTR
bstr(L
"TESTW");
277 CComVariant olestr
= (LPCOLESTR
)bstr
;
278 ok(V_VT(&olestr
) == VT_BSTR
, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&olestr
));
279 ok(!wcscmp(V_BSTR(&olestr
), L
"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&olestr
)));
280 CComVariant olestr2
= olestr
;
281 ok(V_VT(&olestr2
) == VT_BSTR
, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&olestr2
));
282 ok(!wcscmp(V_BSTR(&olestr2
), L
"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&olestr2
)));
285 CComVariant trueVal
= true;
286 ok(V_VT(&trueVal
) == VT_BOOL
, "Expected .vt to be BOOL, was %u\n", V_VT(&trueVal
));
287 ok(V_BOOL(&trueVal
) == VARIANT_TRUE
, "Expected value to be VARIANT_TRUE, was: %u\n", V_BOOL(&trueVal
));
288 CComVariant trueVal2
= trueVal
;
289 ok(V_VT(&trueVal2
) == VT_BOOL
, "Expected .vt to be BOOL, was %u\n", V_VT(&trueVal2
));
290 ok(V_BOOL(&trueVal2
) == VARIANT_TRUE
, "Expected value to be VARIANT_TRUE, was: %u\n", V_BOOL(&trueVal2
));
293 CComVariant b1
= (BYTE
)33;
294 ok(V_VT(&b1
) == VT_UI1
, "Expected .vt to be VT_UI1, was %u\n", V_VT(&b1
));
295 ok(V_UI1(&b1
) == (BYTE
)33, "Expected value to be 33, was: %u\n", V_UI1(&b1
));
297 ok(V_VT(&b2
) == VT_UI1
, "Expected .vt to be VT_UI1, was %u\n", V_VT(&b2
));
298 ok(V_UI1(&b2
) == (BYTE
)33, "Expected value to be 33, was: %u\n", V_UI1(&b2
));
301 CComVariant c1
= (char)33;
302 ok(V_VT(&c1
) == VT_I1
, "Expected .vt to be VT_I1, was %u\n", V_VT(&c1
));
303 ok(V_I1(&c1
) == (char)33, "Expected value to be 33, was: %d\n", V_I1(&c1
));
305 ok(V_VT(&c2
) == VT_I1
, "Expected .vt to be VT_I1, was %u\n", V_VT(&c2
));
306 ok(V_I1(&c2
) == (char)33, "Expected value to be 33, was: %d\n", V_I1(&c2
));
309 CComVariant s1
= (short)12345;
310 ok(V_VT(&s1
) == VT_I2
, "Expected .vt to be VT_I2, was %u\n", V_VT(&s1
));
311 ok(V_I2(&s1
) == (short)12345, "Expected value to be 12345, was: %d\n", V_I1(&s1
));
313 ok(V_VT(&s2
) == VT_I2
, "Expected .vt to be VT_I2, was %u\n", V_VT(&s2
));
314 ok(V_I2(&s2
) == (short)12345, "Expected value to be 12345, was: %d\n", V_I1(&s2
));
317 CComVariant us1
= (unsigned short)12345;
318 ok(V_VT(&us1
) == VT_UI2
, "Expected .vt to be VT_UI2, was %u\n", V_VT(&us1
));
319 ok(V_UI2(&us1
) == (unsigned short)12345, "Expected value to be 12345, was: %u\n", V_UI2(&us1
));
320 CComVariant us2
= us1
;
321 ok(V_VT(&us2
) == VT_UI2
, "Expected .vt to be VT_UI2, was %u\n", V_VT(&us2
));
322 ok(V_UI2(&us2
) == (unsigned short)12345, "Expected value to be 12345, was: %u\n", V_UI2(&us2
));
325 CComVariant i1
= (int)4;
326 expect_int(i1
, 4, VT_I4
);
328 expect_int(i2
, 4, VT_I4
);
331 CComVariant ui1
= (unsigned int)4;
332 expect_uint(ui1
, 4, VT_UI4
);
333 CComVariant ui2
= ui1
;
334 expect_uint(ui2
, 4, VT_UI4
);
337 CComVariant l1
= (long)4;
338 expect_uint(l1
, 4, VT_I4
);
340 expect_uint(l2
, 4, VT_I4
);
343 CComVariant ul1
= (unsigned long)33;
344 expect_uint(ul1
, 33, VT_UI4
);
345 CComVariant ul2
= ul1
;
346 expect_uint(ul2
, 33, VT_UI4
);
349 CComVariant f1
= 3.4f
;
350 ok(V_VT(&f1
) == VT_R4
, "Expected .vt to be VT_R4, was %u\n", V_VT(&f1
));
351 ok(V_R4(&f1
) == 3.4f
, "Expected value to be 3.4f, was: %f\n", V_R4(&f1
));
353 ok(V_VT(&f2
) == VT_R4
, "Expected .vt to be VT_R4, was %u\n", V_VT(&f2
));
354 ok(V_R4(&f2
) == 3.4f
, "Expected value to be 3.4f, was: %f\n", V_R4(&f2
));
357 CComVariant d1
= 3.4;
358 expect_double(d1
, 3.4, VT_R8
);
360 expect_double(d2
, 3.4, VT_R8
);
363 LONGLONG lv
= 12030912309123ll;
365 ok(V_VT(&l1
) == VT_I8
, "Expected .vt to be VT_I8, was %u\n", V_VT(&l1
));
366 ok(V_I8(&l1
) == lv
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv
), wine_dbgstr_longlong(V_I8(&l1
)));
368 ok(V_VT(&l2
) == VT_I8
, "Expected .vt to be VT_I8, was %u\n", V_VT(&l2
));
369 ok(V_I8(&l2
) == lv
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv
), wine_dbgstr_longlong(V_I8(&l2
)));
372 ULONGLONG lv
= 12030912309123ull;
374 ok(V_VT(&l1
) == VT_UI8
, "Expected .vt to be VT_UI8, was %u\n", V_VT(&l1
));
375 ok(V_UI8(&l1
) == lv
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv
), wine_dbgstr_longlong(V_UI8(&l1
)));
377 ok(V_VT(&l2
) == VT_UI8
, "Expected .vt to be VT_UI8, was %u\n", V_VT(&l2
));
378 ok(V_UI8(&l2
) == lv
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv
), wine_dbgstr_longlong(V_UI8(&l2
)));
382 cy
.int64
= 12030912309123ll;
384 ok(V_VT(&c1
) == VT_CY
, "Expected .vt to be VT_I8, was %u\n", V_VT(&c1
));
385 ok(V_CY(&c1
).int64
== cy
.int64
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(cy
.int64
), wine_dbgstr_longlong(V_CY(&c1
).int64
));
387 ok(V_VT(&c2
) == VT_CY
, "Expected .vt to be VT_I8, was %u\n", V_VT(&c2
));
388 ok(V_CY(&c2
).int64
== cy
.int64
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(cy
.int64
), wine_dbgstr_longlong(V_CY(&c2
).int64
));
394 static void test_misc()
400 ok(SUCCEEDED(hr
), "Expected .Clear() to succeed, but it failed: 0x%lx\n", hr
);
405 CComBSTR
bstr(L
"TESTW");
406 CComVariant
olestr((LPCOLESTR
)bstr
), empty
;
408 hr
= empty
.Copy(&olestr
); // VARIANT*
409 ok(SUCCEEDED(hr
), "Expected .Copy() to succeed, but it failed: 0x%lx\n", hr
);
410 ok(V_VT(&empty
) == VT_BSTR
, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&empty
));
411 ok(!wcscmp(V_BSTR(&empty
), L
"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&empty
)));
413 /* Clear does not null out the rest, it just sets .vt! */
415 ok(SUCCEEDED(hr
), "Expected .Clear() to succeed, but it failed: 0x%lx\n", hr
);
416 ok(V_VT(&olestr
) == VT_EMPTY
, "Expected .vt to be VT_EMPTY, was %u\n", V_VT(&olestr
));
420 CComVariant
d1(3.4, VT_R8
), empty
;
421 hr
= empty
.Copy(&d1
);
422 ok(SUCCEEDED(hr
), "Expected .Copy() to succeed, but it failed: 0x%lx\n", hr
);
423 expect_double(empty
, 3.4, VT_R8
);
427 LONGLONG lv
= 12030912309123ll;
430 hr
= empty
.Copy(&l1
);
431 ok(SUCCEEDED(hr
), "Expected .Copy() to succeed, but it failed: 0x%lx\n", hr
);
432 ok(V_VT(&empty
) == VT_I8
, "Expected .vt to be VT_I8, was %u\n", V_VT(&empty
));
433 ok(V_I8(&empty
) == lv
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv
), wine_dbgstr_longlong(V_I8(&empty
)));
438 cy
.int64
= 12030912309123ll;
441 hr
= empty
.Copy(&c1
);
442 ok(SUCCEEDED(hr
), "Expected .Copy() to succeed, but it failed: 0x%lx\n", hr
);
443 ok(V_VT(&empty
) == VT_CY
, "Expected .vt to be VT_I8, was %u\n", V_VT(&empty
));
444 ok(V_CY(&empty
).int64
== cy
.int64
, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(cy
.int64
), wine_dbgstr_longlong(V_CY(&empty
).int64
));
447 CComVariant var
= (int)333;
449 // var2 = var changed to bstr
450 HRESULT hr
= var2
.ChangeType(VT_BSTR
, &var
);
451 ok(SUCCEEDED(hr
), "Expected .ChangeType() to succeed, but it failed: 0x%lx\n", hr
);
452 expect_int(var
, 333, VT_I4
);
453 ok(V_VT(&var2
) == VT_BSTR
, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&var2
));
454 ok(!wcscmp(V_BSTR(&var2
), L
"333"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&var2
)));
457 hr
= var
.ChangeType(VT_BSTR
);
458 ok(SUCCEEDED(hr
), "Expected .ChangeType() to succeed, but it failed: 0x%lx\n", hr
);
459 ok(V_VT(&var
) == VT_BSTR
, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&var
));
460 ok(!wcscmp(V_BSTR(&var
), L
"333"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&var
)));
465 START_TEST(CComVariant
)
468 test_copyconstructor();