2 * PROJECT: ReactOS api tests
3 * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory
4 * PURPOSE: Test for CComBSTR
5 * PROGRAMMER: Mark Jansen
13 #define verify_str (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : verify_str_imp
14 #define verify_str2 (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : verify_str_imp2
17 static void verify_str_imp2(const CComBSTR
& comstr
, PCWSTR expected
, size_t ExpectedLength
)
19 BSTR str
= (BSTR
)comstr
;
20 if (expected
|| ExpectedLength
)
22 winetest_ok(str
!= NULL
, "Expected str to be a valid pointer\n");
27 winetest_ok(!wcscmp(str
, expected
), "Expected the string to be '%s', was '%s'\n", wine_dbgstr_w(expected
), wine_dbgstr_w(str
));
29 size_t Length
= comstr
.Length();
30 winetest_ok(Length
== ExpectedLength
, "Expected Length to be %u, was: %u\n", ExpectedLength
, Length
);
31 Length
= comstr
.ByteLength();
32 ExpectedLength
*= sizeof(WCHAR
);
33 winetest_ok(Length
== ExpectedLength
, "Expected ByteLength to be %u, was: %u\n", ExpectedLength
, Length
);
38 winetest_ok(str
== NULL
|| str
[0] == '\0', "Expected str to be empty, was: '%s'\n", wine_dbgstr_w(str
));
42 static void verify_str_imp(const CComBSTR
& comstr
, PCWSTR expected
)
44 verify_str_imp2(comstr
, expected
, expected
? wcslen(expected
) : 0);
47 void test_construction()
49 CComBSTR empty1
, empty2
;
50 CComBSTR
happyW(L
"I am a happy BSTR");
51 CComBSTR
happyA("I am a happy BSTR");
52 CComBSTR
happyW4(4, L
"I am a happy BSTR");
53 CComBSTR
fromlen1(1), fromlen10(10);
54 CComBSTR
fromBSTRW(happyW
), fromBSTRA(happyA
), fromBSTRW4(happyW4
);
55 CComBSTR
fromBSTRlen1(fromlen1
), fromBSTRlen10(fromlen10
);
57 verify_str(empty1
, NULL
);
58 verify_str(empty2
, NULL
);
59 verify_str(happyW
, L
"I am a happy BSTR");
60 verify_str(happyA
, L
"I am a happy BSTR");
61 verify_str(happyW4
, L
"I am");
62 verify_str2(fromlen1
, NULL
, 1);
63 verify_str2(fromlen10
, NULL
, 10);
64 verify_str(fromBSTRW
, L
"I am a happy BSTR");
65 verify_str(fromBSTRA
, L
"I am a happy BSTR");
66 verify_str(fromBSTRW4
, L
"I am");
67 verify_str2(fromBSTRlen1
, NULL
, 1);
68 verify_str2(fromBSTRlen10
, NULL
, 10);
71 void test_copyassignment()
73 CComBSTR
happy(L
"I am a happy BSTR"), empty
, odd
;
74 CComBSTR happyCopy1
, happyCopy2
, emptyCopy
, oddCopy
;
76 odd
= ::SysAllocStringByteLen("aaaaa", 3);
78 happyCopy1
= happy
.Copy();
79 happyCopy2
= happy
; // Calls happyW.Copy()
80 emptyCopy
= empty
.Copy();
83 verify_str(happy
, L
"I am a happy BSTR");
84 verify_str(empty
, NULL
);
85 verify_str2(odd
, L
"\u6161a", 2);
86 verify_str(happyCopy1
, L
"I am a happy BSTR");
87 verify_str(happyCopy2
, L
"I am a happy BSTR");
88 verify_str(emptyCopy
, NULL
);
89 verify_str2(oddCopy
, L
"\u6161a", 2);
90 ok((BSTR
)happy
!= (BSTR
)happyCopy1
, "Expected pointers to be different\n");
91 ok((BSTR
)happy
!= (BSTR
)happyCopy2
, "Expected pointers to be different\n");
94 happyCopy1
= (LPCOLESTR
)NULL
;
95 happyCopy2
= (LPCSTR
)NULL
;
97 verify_str(happyCopy1
, NULL
);
98 verify_str(happyCopy2
, NULL
);
100 HRESULT hr
= happy
.CopyTo(&happyCopy1
);
101 ok(hr
== S_OK
, "Expected hr to be E_POINTER, was: %08lx\n", hr
);
105 hr
= happy
.CopyTo((BSTR
*)NULL
);
106 ok(hr
== E_POINTER
, "Expected hr to be E_POINTER, was: %u\n");
112 GUID guid
= { 0x12345678, 0x9abc, 0xdef0, { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0} };
113 CComBSTR
fromGuid(guid
), empty
;
114 verify_str(fromGuid
, L
"{12345678-9ABC-DEF0-1234-56789ABCDEF0}");
115 verify_str(empty
, NULL
);
117 verify_str(empty
, L
"{12345678-9ABC-DEF0-1234-56789ABCDEF0}");
122 CComBSTR test1
, test2
, test3
;
123 HMODULE mod
= GetModuleHandle(NULL
);
125 ok(true == test1
.LoadString(mod
, IDS_TEST1
), "Expected LoadString to succeed\n");
126 ok(true == test2
.LoadString(mod
, IDS_TEST2
), "Expected LoadString to succeed\n");
127 ok(false == test3
.LoadString(mod
, IDS_TEST2
+ 1), "Expected LoadString to fail\n");
129 verify_str(test1
, L
"Test string one.");
130 verify_str(test2
, L
"I am a happy BSTR");
131 verify_str(test3
, NULL
);
137 test_copyassignment();