Home | History | Annotate | Download | only in win
      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