Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475/* * PROJECT: ReactOS api tests * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory * PURPOSE: Test for CComVariant * PROGRAMMER: Mark Jansen */
/* In case we are building against the MS headers, we need to disable assertions. */#undef ATLASSERT#define ATLASSERT(x)#define _ATL_NO_VARIANT_THROW
#include <apitest.h>#include <atlbase.h>#include <versionhelpers.h>
void expect_bool_imp(const CComVariant& ccv, bool value){ winetest_ok(V_VT(&ccv) == VT_BOOL, "Expected .vt to be BOOL, was %u\n", V_VT(&ccv)); VARIANT_BOOL expected = (value ? VARIANT_TRUE : VARIANT_FALSE); winetest_ok(V_BOOL(&ccv) == expected, "Expected value to be %u, was: %u\n", expected, V_BOOL(&ccv));}
void expect_int_imp(const CComVariant& ccv, int value, unsigned short type){ winetest_ok(V_VT(&ccv) == type, "Expected .vt to be %u, was %u\n", type, V_VT(&ccv)); winetest_ok(V_I4(&ccv) == value, "Expected value to be %d, was: %ld\n", value, V_I4(&ccv));}
void expect_uint_imp(const CComVariant& ccv, unsigned int value, unsigned short type){ winetest_ok(V_VT(&ccv) == type, "Expected .vt to be %u, was %u\n", type, V_VT(&ccv)); winetest_ok(V_UI4(&ccv) == value, "Expected value to be %u, was: %lu\n", value, V_UI4(&ccv));}
void expect_double_imp(const CComVariant& ccv, double value, unsigned short type){ winetest_ok(V_VT(&ccv) == type, "Expected .vt to be %u, was %u\n", type, V_VT(&ccv)); winetest_ok(V_R8(&ccv) == value, "Expected value to be %f, was: %f\n", value, V_R8(&ccv));}
void expect_error_imp(const CComVariant& ccv, SCODE value){ winetest_ok(V_VT(&ccv) == VT_ERROR, "Expected .vt to be VT_ERROR, was %u\n", V_VT(&ccv)); winetest_ok(V_ERROR(&ccv) == value, "Expected value to be %lx, was: %lx\n", value, V_ERROR(&ccv));}
void expect_empty_imp(const CComVariant& ccv){ winetest_ok(V_VT(&ccv) == VT_EMPTY, "Expected .vt to be VT_EMPTY, was %u\n", V_VT(&ccv)); if (IsWindows8OrGreater()) winetest_ok(V_I8(&ccv) == 0ll, "Expected value to be 0, was: %I64d\n", V_I8(&ccv));}
#define expect_bool (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_bool_imp#define expect_int (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_int_imp#define expect_uint (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_uint_imp#define expect_double (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_double_imp#define expect_error (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_error_imp#define expect_empty (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : expect_empty_imp
static void test_construction(){ { CComVariant empty; expect_empty(empty); } { CComBSTR bstr(L"TESTW"); CComVariant olestr((LPCOLESTR)bstr), comstr(bstr); ok(V_VT(&olestr) == VT_BSTR, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&olestr)); ok(!wcscmp(V_BSTR(&olestr), L"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&olestr))); ok(V_VT(&comstr) == VT_BSTR, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&comstr)); ok(!wcscmp(V_BSTR(&comstr), L"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&comstr))); } { CComVariant cstr((LPCSTR)"TESTA"); ok(V_VT(&cstr) == VT_BSTR, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&cstr)); ok(!wcscmp(V_BSTR(&cstr), L"TESTA"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&cstr))); } { CComVariant trueVal(true), falseVal(false); ok(V_VT(&trueVal) == VT_BOOL, "Expected .vt to be BOOL, was %u\n", V_VT(&trueVal)); ok(V_BOOL(&trueVal) == VARIANT_TRUE, "Expected value to be VARIANT_TRUE, was: %u\n", V_BOOL(&trueVal)); ok(V_VT(&falseVal) == VT_BOOL, "Expected .vt to be BOOL, was %u\n", V_VT(&falseVal)); ok(V_BOOL(&falseVal) == VARIANT_FALSE, "Expected value to be VARIANT_TRUE, was: %u\n", V_BOOL(&falseVal)); } { CComVariant b1((BYTE)33); ok(V_VT(&b1) == VT_UI1, "Expected .vt to be VT_UI1, was %u\n", V_VT(&b1)); ok(V_UI1(&b1) == (BYTE)33, "Expected value to be 33, was: %u\n", V_UI1(&b1)); } { CComVariant c1((char)33); ok(V_VT(&c1) == VT_I1, "Expected .vt to be VT_I1, was %u\n", V_VT(&c1)); ok(V_I1(&c1) == (char)33, "Expected value to be 33, was: %d\n", V_I1(&c1)); } { CComVariant s1((short)12345); ok(V_VT(&s1) == VT_I2, "Expected .vt to be VT_I2, was %u\n", V_VT(&s1)); ok(V_I2(&s1) == (short)12345, "Expected value to be 12345, was: %d\n", V_I1(&s1)); } { CComVariant us1((unsigned short)12345); ok(V_VT(&us1) == VT_UI2, "Expected .vt to be VT_UI2, was %u\n", V_VT(&us1)); ok(V_UI2(&us1) == (unsigned short)12345, "Expected value to be 12345, was: %u\n", V_UI2(&us1)); } { CComVariant i1((int)4, VT_I4), i2((int)3, VT_INT), i3((int)2, VT_I2), i4((int)1); expect_int(i1, 4, VT_I4); expect_int(i2, 3, VT_INT); expect_error(i3, E_INVALIDARG); expect_int(i4, 1, VT_I4); } { CComVariant ui1((unsigned int)4, VT_UI4), ui2((unsigned int)3, VT_UINT), ui3((unsigned int)2, VT_UI2), ui4((unsigned int)1); expect_uint(ui1, 4, VT_UI4); expect_uint(ui2, 3, VT_UINT); expect_error(ui3, E_INVALIDARG); expect_uint(ui4, 1, VT_UI4); } { CComVariant l1((long)4, VT_I4), l2((long)3, VT_INT), l3((long)2, VT_ERROR), l4((long)1); expect_int(l1, 4, VT_I4); expect_error(l2, E_INVALIDARG); expect_error(l3, 2); expect_int(l4, 1, VT_I4); } { CComVariant ul1((unsigned long)33); expect_uint(ul1, 33, VT_UI4); } { CComVariant f1(3.4f); ok(V_VT(&f1) == VT_R4, "Expected .vt to be VT_R4, was %u\n", V_VT(&f1)); ok(V_R4(&f1) == 3.4f, "Expected value to be 3.4f, was: %f\n", V_R4(&f1)); } { CComVariant d1(3.4, VT_R8), d2(3.4, VT_DATE), d3(8.8, VT_I1), d4(1.9); expect_double(d1, 3.4, VT_R8); expect_double(d2, 3.4, VT_DATE); expect_error(d3, E_INVALIDARG); expect_double(d4, 1.9, VT_R8); } { LONGLONG lv = 12030912309123ll; CComVariant l1(lv); ok(V_VT(&l1) == VT_I8, "Expected .vt to be VT_I8, was %u\n", V_VT(&l1)); ok(V_I8(&l1) == lv, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv), wine_dbgstr_longlong(V_I8(&l1))); } { ULONGLONG lv = 12030912309123ull; CComVariant l1(lv); ok(V_VT(&l1) == VT_UI8, "Expected .vt to be VT_UI8, was %u\n", V_VT(&l1)); ok(V_UI8(&l1) == lv, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv), wine_dbgstr_longlong(V_UI8(&l1))); } { CY cy; cy.int64 = 12030912309123ll; CComVariant c1(cy); ok(V_VT(&c1) == VT_CY, "Expected .vt to be VT_CY, was %u\n", V_VT(&c1)); 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)); } // IDispatch // IUnknown}
static void test_copyconstructor(){ { CComVariant empty; CComVariant empty2(empty); expect_empty(empty2); } { CComBSTR bstr(L"TESTW"); CComVariant olestr((LPCOLESTR)bstr); CComVariant olestr2(olestr); ok(V_VT(&olestr2) == VT_BSTR, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&olestr2)); ok(!wcscmp(V_BSTR(&olestr2), L"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&olestr2))); } { CComVariant trueVal(true); CComVariant trueVal2(trueVal); ok(V_VT(&trueVal2) == VT_BOOL, "Expected .vt to be BOOL, was %u\n", V_VT(&trueVal2)); ok(V_BOOL(&trueVal2) == VARIANT_TRUE, "Expected value to be VARIANT_TRUE, was: %u\n", V_BOOL(&trueVal2)); } { CComVariant b1((BYTE)33); CComVariant b2(b1); ok(V_VT(&b2) == VT_UI1, "Expected .vt to be VT_UI1, was %u\n", V_VT(&b2)); ok(V_UI1(&b2) == (BYTE)33, "Expected value to be 33, was: %u\n", V_UI1(&b2)); } { CComVariant c1((char)33); CComVariant c2(c1); ok(V_VT(&c2) == VT_I1, "Expected .vt to be VT_I1, was %u\n", V_VT(&c2)); ok(V_I1(&c2) == (char)33, "Expected value to be 33, was: %d\n", V_I1(&c2)); } { CComVariant s1((short)12345); CComVariant s2(s1); ok(V_VT(&s2) == VT_I2, "Expected .vt to be VT_I2, was %u\n", V_VT(&s2)); ok(V_I2(&s2) == (short)12345, "Expected value to be 12345, was: %d\n", V_I1(&s2)); } { CComVariant us1((unsigned short)12345); CComVariant us2(us1); ok(V_VT(&us2) == VT_UI2, "Expected .vt to be VT_UI2, was %u\n", V_VT(&us2)); ok(V_UI2(&us2) == (unsigned short)12345, "Expected value to be 12345, was: %u\n", V_UI2(&us2)); } { CComVariant i1((int)4, VT_I4); CComVariant i2(i1); expect_int(i2, 4, VT_I4); } { CComVariant ui1((unsigned int)4, VT_UI4); CComVariant ui2(ui1); expect_uint(ui2, 4, VT_UI4); } { CComVariant l1((long)4, VT_I4); CComVariant l2(l1); expect_uint(l2, 4, VT_I4); } { CComVariant ul1((unsigned long)33); CComVariant ul2(ul1); expect_uint(ul2, 33, VT_UI4); } { CComVariant f1(3.4f); CComVariant f2(f1); ok(V_VT(&f2) == VT_R4, "Expected .vt to be VT_R4, was %u\n", V_VT(&f2)); ok(V_R4(&f2) == 3.4f, "Expected value to be 3.4f, was: %f\n", V_R4(&f2)); } { CComVariant d1(3.4, VT_R8); CComVariant d2(d1); expect_double(d2, 3.4, VT_R8); } { LONGLONG lv = 12030912309123ll; CComVariant l1(lv); CComVariant l2(l1); ok(V_VT(&l2) == VT_I8, "Expected .vt to be VT_I8, was %u\n", V_VT(&l2)); ok(V_I8(&l2) == lv, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv), wine_dbgstr_longlong(V_I8(&l2))); } { ULONGLONG lv = 12030912309123ull; CComVariant l1(lv); CComVariant l2(l1); ok(V_VT(&l2) == VT_UI8, "Expected .vt to be VT_UI8, was %u\n", V_VT(&l2)); ok(V_UI8(&l2) == lv, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv), wine_dbgstr_longlong(V_UI8(&l2))); } { CY cy; cy.int64 = 12030912309123ll; CComVariant c1(cy); CComVariant c2(c1); ok(V_VT(&c2) == VT_CY, "Expected .vt to be VT_I8, was %u\n", V_VT(&c2)); 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)); } // IDispatch // IUnknown}
static void test_assign(){ { CComVariant empty; CComVariant empty2 = empty; expect_empty(empty2); } { CComBSTR bstr(L"TESTW"); CComVariant olestr = (LPCOLESTR)bstr; ok(V_VT(&olestr) == VT_BSTR, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&olestr)); ok(!wcscmp(V_BSTR(&olestr), L"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&olestr))); CComVariant olestr2 = olestr; ok(V_VT(&olestr2) == VT_BSTR, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&olestr2)); ok(!wcscmp(V_BSTR(&olestr2), L"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&olestr2))); } { CComVariant trueVal = true; ok(V_VT(&trueVal) == VT_BOOL, "Expected .vt to be BOOL, was %u\n", V_VT(&trueVal)); ok(V_BOOL(&trueVal) == VARIANT_TRUE, "Expected value to be VARIANT_TRUE, was: %u\n", V_BOOL(&trueVal)); CComVariant trueVal2 = trueVal; ok(V_VT(&trueVal2) == VT_BOOL, "Expected .vt to be BOOL, was %u\n", V_VT(&trueVal2)); ok(V_BOOL(&trueVal2) == VARIANT_TRUE, "Expected value to be VARIANT_TRUE, was: %u\n", V_BOOL(&trueVal2)); } { CComVariant b1 = (BYTE)33; ok(V_VT(&b1) == VT_UI1, "Expected .vt to be VT_UI1, was %u\n", V_VT(&b1)); ok(V_UI1(&b1) == (BYTE)33, "Expected value to be 33, was: %u\n", V_UI1(&b1)); CComVariant b2 = b1; ok(V_VT(&b2) == VT_UI1, "Expected .vt to be VT_UI1, was %u\n", V_VT(&b2)); ok(V_UI1(&b2) == (BYTE)33, "Expected value to be 33, was: %u\n", V_UI1(&b2)); } { CComVariant c1 = (char)33; ok(V_VT(&c1) == VT_I1, "Expected .vt to be VT_I1, was %u\n", V_VT(&c1)); ok(V_I1(&c1) == (char)33, "Expected value to be 33, was: %d\n", V_I1(&c1)); CComVariant c2 = c1; ok(V_VT(&c2) == VT_I1, "Expected .vt to be VT_I1, was %u\n", V_VT(&c2)); ok(V_I1(&c2) == (char)33, "Expected value to be 33, was: %d\n", V_I1(&c2)); } { CComVariant s1 = (short)12345; ok(V_VT(&s1) == VT_I2, "Expected .vt to be VT_I2, was %u\n", V_VT(&s1)); ok(V_I2(&s1) == (short)12345, "Expected value to be 12345, was: %d\n", V_I1(&s1)); CComVariant s2 = s1; ok(V_VT(&s2) == VT_I2, "Expected .vt to be VT_I2, was %u\n", V_VT(&s2)); ok(V_I2(&s2) == (short)12345, "Expected value to be 12345, was: %d\n", V_I1(&s2)); } { CComVariant us1 = (unsigned short)12345; ok(V_VT(&us1) == VT_UI2, "Expected .vt to be VT_UI2, was %u\n", V_VT(&us1)); ok(V_UI2(&us1) == (unsigned short)12345, "Expected value to be 12345, was: %u\n", V_UI2(&us1)); CComVariant us2 = us1; ok(V_VT(&us2) == VT_UI2, "Expected .vt to be VT_UI2, was %u\n", V_VT(&us2)); ok(V_UI2(&us2) == (unsigned short)12345, "Expected value to be 12345, was: %u\n", V_UI2(&us2)); } { CComVariant i1 = (int)4; expect_int(i1, 4, VT_I4); CComVariant i2 = i1; expect_int(i2, 4, VT_I4); } { CComVariant ui1 = (unsigned int)4; expect_uint(ui1, 4, VT_UI4); CComVariant ui2 = ui1; expect_uint(ui2, 4, VT_UI4); } { CComVariant l1 = (long)4; expect_uint(l1, 4, VT_I4); CComVariant l2 = l1; expect_uint(l2, 4, VT_I4); } { CComVariant ul1 = (unsigned long)33; expect_uint(ul1, 33, VT_UI4); CComVariant ul2 = ul1; expect_uint(ul2, 33, VT_UI4); } { CComVariant f1 = 3.4f; ok(V_VT(&f1) == VT_R4, "Expected .vt to be VT_R4, was %u\n", V_VT(&f1)); ok(V_R4(&f1) == 3.4f, "Expected value to be 3.4f, was: %f\n", V_R4(&f1)); CComVariant f2 = f1; ok(V_VT(&f2) == VT_R4, "Expected .vt to be VT_R4, was %u\n", V_VT(&f2)); ok(V_R4(&f2) == 3.4f, "Expected value to be 3.4f, was: %f\n", V_R4(&f2)); } { CComVariant d1 = 3.4; expect_double(d1, 3.4, VT_R8); CComVariant d2 = d1; expect_double(d2, 3.4, VT_R8); } { LONGLONG lv = 12030912309123ll; CComVariant l1 = lv; ok(V_VT(&l1) == VT_I8, "Expected .vt to be VT_I8, was %u\n", V_VT(&l1)); ok(V_I8(&l1) == lv, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv), wine_dbgstr_longlong(V_I8(&l1))); CComVariant l2 = l1; ok(V_VT(&l2) == VT_I8, "Expected .vt to be VT_I8, was %u\n", V_VT(&l2)); ok(V_I8(&l2) == lv, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv), wine_dbgstr_longlong(V_I8(&l2))); } { ULONGLONG lv = 12030912309123ull; CComVariant l1 = lv; ok(V_VT(&l1) == VT_UI8, "Expected .vt to be VT_UI8, was %u\n", V_VT(&l1)); ok(V_UI8(&l1) == lv, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv), wine_dbgstr_longlong(V_UI8(&l1))); CComVariant l2 = l1; ok(V_VT(&l2) == VT_UI8, "Expected .vt to be VT_UI8, was %u\n", V_VT(&l2)); ok(V_UI8(&l2) == lv, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv), wine_dbgstr_longlong(V_UI8(&l2))); } { CY cy; cy.int64 = 12030912309123ll; CComVariant c1 = cy; ok(V_VT(&c1) == VT_CY, "Expected .vt to be VT_I8, was %u\n", V_VT(&c1)); 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)); CComVariant c2 = c1; ok(V_VT(&c2) == VT_CY, "Expected .vt to be VT_I8, was %u\n", V_VT(&c2)); 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)); } // IDispatch // IUnknown}
static void test_misc(){ HRESULT hr; { CComVariant empty; hr = empty.Clear(); ok(SUCCEEDED(hr), "Expected .Clear() to succeed, but it failed: 0x%lx\n", hr); expect_empty(empty); }
{ CComBSTR bstr(L"TESTW"); CComVariant olestr((LPCOLESTR)bstr), empty;
hr = empty.Copy(&olestr); // VARIANT* ok(SUCCEEDED(hr), "Expected .Copy() to succeed, but it failed: 0x%lx\n", hr); ok(V_VT(&empty) == VT_BSTR, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&empty)); ok(!wcscmp(V_BSTR(&empty), L"TESTW"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&empty)));
/* Clear does not null out the rest, it just sets .vt! */ hr = olestr.Clear(); ok(SUCCEEDED(hr), "Expected .Clear() to succeed, but it failed: 0x%lx\n", hr); ok(V_VT(&olestr) == VT_EMPTY, "Expected .vt to be VT_EMPTY, was %u\n", V_VT(&olestr)); }
{ CComVariant d1(3.4, VT_R8), empty; hr = empty.Copy(&d1); ok(SUCCEEDED(hr), "Expected .Copy() to succeed, but it failed: 0x%lx\n", hr); expect_double(empty, 3.4, VT_R8); }
{ LONGLONG lv = 12030912309123ll; CComVariant l1(lv); CComVariant empty; hr = empty.Copy(&l1); ok(SUCCEEDED(hr), "Expected .Copy() to succeed, but it failed: 0x%lx\n", hr); ok(V_VT(&empty) == VT_I8, "Expected .vt to be VT_I8, was %u\n", V_VT(&empty)); ok(V_I8(&empty) == lv, "Expected value to be %s, was: %s\n", wine_dbgstr_longlong(lv), wine_dbgstr_longlong(V_I8(&empty))); }
{ CY cy; cy.int64 = 12030912309123ll; CComVariant c1(cy); CComVariant empty; hr = empty.Copy(&c1); ok(SUCCEEDED(hr), "Expected .Copy() to succeed, but it failed: 0x%lx\n", hr); ok(V_VT(&empty) == VT_CY, "Expected .vt to be VT_I8, was %u\n", V_VT(&empty)); 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)); } { CComVariant var = (int)333; CComVariant var2; // var2 = var changed to bstr HRESULT hr = var2.ChangeType(VT_BSTR, &var); ok(SUCCEEDED(hr), "Expected .ChangeType() to succeed, but it failed: 0x%lx\n", hr); expect_int(var, 333, VT_I4); ok(V_VT(&var2) == VT_BSTR, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&var2)); ok(!wcscmp(V_BSTR(&var2), L"333"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&var2)));
// change in place hr = var.ChangeType(VT_BSTR); ok(SUCCEEDED(hr), "Expected .ChangeType() to succeed, but it failed: 0x%lx\n", hr); ok(V_VT(&var) == VT_BSTR, "Expected .vt to be VT_LPWSTR, was %u\n", V_VT(&var)); ok(!wcscmp(V_BSTR(&var), L"333"), "Expected value to be L\"TESTW\", was: %s\n", wine_dbgstr_w(V_BSTR(&var))); }}
START_TEST(CComVariant){ test_construction(); test_copyconstructor(); test_assign(); test_misc();}