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