Home | History | Annotate | Download | only in win
      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