1 // Copyright (c) 2011 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/iunknown_impl.h" 6 7 #include "base/win/scoped_com_initializer.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 10 namespace base { 11 namespace win { 12 13 class TestIUnknownImplSubclass : public IUnknownImpl { 14 public: 15 TestIUnknownImplSubclass() { 16 ++instance_count; 17 } 18 virtual ~TestIUnknownImplSubclass() { 19 --instance_count; 20 } 21 static int instance_count; 22 }; 23 24 // static 25 int TestIUnknownImplSubclass::instance_count = 0; 26 27 TEST(IUnknownImplTest, IUnknownImpl) { 28 ScopedCOMInitializer com_initializer; 29 30 EXPECT_EQ(0, TestIUnknownImplSubclass::instance_count); 31 IUnknown* u = new TestIUnknownImplSubclass(); 32 33 EXPECT_EQ(1, TestIUnknownImplSubclass::instance_count); 34 35 EXPECT_EQ(1, u->AddRef()); 36 EXPECT_EQ(1, u->AddRef()); 37 38 IUnknown* other = NULL; 39 EXPECT_EQ(E_NOINTERFACE, u->QueryInterface( 40 IID_IDispatch, reinterpret_cast<void**>(&other))); 41 EXPECT_EQ(S_OK, u->QueryInterface( 42 IID_IUnknown, reinterpret_cast<void**>(&other))); 43 other->Release(); 44 45 EXPECT_EQ(1, u->Release()); 46 EXPECT_EQ(0, u->Release()); 47 EXPECT_EQ(0, TestIUnknownImplSubclass::instance_count); 48 } 49 50 } // namespace win 51 } // namespace base 52