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 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 31 void GiveMeABstr(BSTR* ret) { 32 *ret = SysAllocString(kTestString1); 33 } 34 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 71 TEST(ScopedBstrTest, ScopedBstr) { 72 DumbBstrTests(); 73 BasicBstrTests(); 74 } 75 76 } // namespace win 77 } // namespace base 78