1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "base/win/scoped_bstr.h"
6 #include "testing/gtest/include/gtest/gtest.h"
13 static const wchar_t kTestString1
[] = L
"123";
14 static const wchar_t kTestString2
[] = L
"456789";
15 size_t test1_len
= arraysize(kTestString1
) - 1;
16 size_t test2_len
= arraysize(kTestString2
) - 1;
18 void DumbBstrTests() {
20 EXPECT_TRUE(b
== NULL
);
21 EXPECT_EQ(0, b
.Length());
22 EXPECT_EQ(0, b
.ByteLength());
24 EXPECT_TRUE(b
== NULL
);
25 EXPECT_TRUE(b
.Release() == NULL
);
28 EXPECT_TRUE(b2
== NULL
);
31 void GiveMeABstr(BSTR
* ret
) {
32 *ret
= SysAllocString(kTestString1
);
35 void BasicBstrTests() {
36 ScopedBstr
b1(kTestString1
);
37 EXPECT_EQ(test1_len
, b1
.Length());
38 EXPECT_EQ(test1_len
* sizeof(kTestString1
[0]), b1
.ByteLength());
42 EXPECT_EQ(test1_len
, b2
.Length());
43 EXPECT_EQ(0, b1
.Length());
44 EXPECT_EQ(0, lstrcmp(b2
, kTestString1
));
45 BSTR tmp
= b2
.Release();
46 EXPECT_TRUE(tmp
!= NULL
);
47 EXPECT_EQ(0, lstrcmp(tmp
, kTestString1
));
48 EXPECT_TRUE(b2
== NULL
);
51 GiveMeABstr(b2
.Receive());
52 EXPECT_TRUE(b2
!= NULL
);
54 EXPECT_TRUE(b2
.AllocateBytes(100) != NULL
);
55 EXPECT_EQ(100, b2
.ByteLength());
56 EXPECT_EQ(100 / sizeof(kTestString1
[0]), b2
.Length());
57 lstrcpy(static_cast<BSTR
>(b2
), kTestString1
);
58 EXPECT_EQ(test1_len
, lstrlen(b2
));
59 EXPECT_EQ(100 / sizeof(kTestString1
[0]), b2
.Length());
60 b2
.SetByteLen(lstrlen(b2
) * sizeof(kTestString2
[0]));
61 EXPECT_EQ(b2
.Length(), lstrlen(b2
));
63 EXPECT_TRUE(b1
.Allocate(kTestString2
) != NULL
);
64 EXPECT_EQ(test2_len
, b1
.Length());
65 b1
.SetByteLen((test2_len
- 1) * sizeof(kTestString2
[0]));
66 EXPECT_EQ(test2_len
- 1, b1
.Length());
71 TEST(ScopedBstrTest
, ScopedBstr
) {