- add sources.
[platform/framework/web/crosswalk.git] / src / base / win / iunknown_impl_unittest.cc
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