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.
5 #include "base/win/iunknown_impl.h"
7 #include "base/win/scoped_com_initializer.h"
8 #include "testing/gtest/include/gtest/gtest.h"
13 class TestIUnknownImplSubclass
: public IUnknownImpl
{
15 TestIUnknownImplSubclass() {
18 ~TestIUnknownImplSubclass() override
{ --instance_count
; }
19 static int instance_count
;
23 int TestIUnknownImplSubclass::instance_count
= 0;
25 TEST(IUnknownImplTest
, IUnknownImpl
) {
26 ScopedCOMInitializer com_initializer
;
28 EXPECT_EQ(0, TestIUnknownImplSubclass::instance_count
);
29 IUnknown
* u
= new TestIUnknownImplSubclass();
31 EXPECT_EQ(1, TestIUnknownImplSubclass::instance_count
);
33 EXPECT_EQ(1, u
->AddRef());
34 EXPECT_EQ(1, u
->AddRef());
36 IUnknown
* other
= NULL
;
37 EXPECT_EQ(E_NOINTERFACE
, u
->QueryInterface(
38 IID_IDispatch
, reinterpret_cast<void**>(&other
)));
39 EXPECT_EQ(S_OK
, u
->QueryInterface(
40 IID_IUnknown
, reinterpret_cast<void**>(&other
)));
43 EXPECT_EQ(1, u
->Release());
44 EXPECT_EQ(0, u
->Release());
45 EXPECT_EQ(0, TestIUnknownImplSubclass::instance_count
);