1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be
3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file.
4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
5731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "base/win/scoped_bstr.h"
6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "testing/gtest/include/gtest/gtest.h"
7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
8731df977c0511bca2206b5f333555b1205ff1f43Iain Merricknamespace base {
9731df977c0511bca2206b5f333555b1205ff1f43Iain Merricknamespace win {
10731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace {
12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstatic const wchar_t kTestString1[] = L"123";
14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottstatic const wchar_t kTestString2[] = L"456789";
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochsize_t test1_len = arraysize(kTestString1) - 1;
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochsize_t test2_len = arraysize(kTestString2) - 1;
17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid DumbBstrTests() {
19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  ScopedBstr b;
20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_TRUE(b == NULL);
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, b.Length());
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, b.ByteLength());
23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  b.Reset(NULL);
24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_TRUE(b == NULL);
25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_TRUE(b.Release() == NULL);
26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  ScopedBstr b2;
27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  b.Swap(b2);
28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_TRUE(b2 == NULL);
29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid GiveMeABstr(BSTR* ret) {
32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  *ret = SysAllocString(kTestString1);
33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid BasicBstrTests() {
36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  ScopedBstr b1(kTestString1);
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(test1_len, b1.Length());
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(test1_len * sizeof(kTestString1[0]), b1.ByteLength());
39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  ScopedBstr b2;
41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  b1.Swap(b2);
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(test1_len, b2.Length());
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, b1.Length());
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, lstrcmp(b2, kTestString1));
45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  BSTR tmp = b2.Release();
46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_TRUE(tmp != NULL);
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, lstrcmp(tmp, kTestString1));
48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_TRUE(b2 == NULL);
49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  SysFreeString(tmp);
50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  GiveMeABstr(b2.Receive());
52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_TRUE(b2 != NULL);
53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  b2.Reset();
54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_TRUE(b2.AllocateBytes(100) != NULL);
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(100, b2.ByteLength());
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(100 / sizeof(kTestString1[0]), b2.Length());
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  lstrcpy(static_cast<BSTR>(b2), kTestString1);
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(test1_len, lstrlen(b2));
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(100 / sizeof(kTestString1[0]), b2.Length());
60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  b2.SetByteLen(lstrlen(b2) * sizeof(kTestString2[0]));
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(b2.Length(), lstrlen(b2));
62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  EXPECT_TRUE(b1.Allocate(kTestString2) != NULL);
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(test2_len, b1.Length());
65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  b1.SetByteLen((test2_len - 1) * sizeof(kTestString2[0]));
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(test2_len - 1, b1.Length());
67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}  // namespace
70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottTEST(ScopedBstrTest, ScopedBstr) {
72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  DumbBstrTests();
73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott  BasicBstrTests();
74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}
75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott
76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}  // namespace win
77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}  // namespace base
78