• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #include "base/win/scoped_bstr.h"
6 #include "testing/gtest/include/gtest/gtest.h"
7 
8 namespace base {
9 namespace win {
10 
11 namespace {
12 
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;
17 
DumbBstrTests()18 void DumbBstrTests() {
19   ScopedBstr b;
20   EXPECT_TRUE(b == NULL);
21   EXPECT_EQ(0, b.Length());
22   EXPECT_EQ(0, b.ByteLength());
23   b.Reset(NULL);
24   EXPECT_TRUE(b == NULL);
25   EXPECT_TRUE(b.Release() == NULL);
26   ScopedBstr b2;
27   b.Swap(b2);
28   EXPECT_TRUE(b2 == NULL);
29 }
30 
GiveMeABstr(BSTR * ret)31 void GiveMeABstr(BSTR* ret) {
32   *ret = SysAllocString(kTestString1);
33 }
34 
BasicBstrTests()35 void BasicBstrTests() {
36   ScopedBstr b1(kTestString1);
37   EXPECT_EQ(test1_len, b1.Length());
38   EXPECT_EQ(test1_len * sizeof(kTestString1[0]), b1.ByteLength());
39 
40   ScopedBstr b2;
41   b1.Swap(b2);
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);
49   SysFreeString(tmp);
50 
51   GiveMeABstr(b2.Receive());
52   EXPECT_TRUE(b2 != NULL);
53   b2.Reset();
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));
62 
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());
67 }
68 
69 }  // namespace
70 
TEST(ScopedBstrTest,ScopedBstr)71 TEST(ScopedBstrTest, ScopedBstr) {
72   DumbBstrTests();
73   BasicBstrTests();
74 }
75 
76 }  // namespace win
77 }  // namespace base
78