Make sure the global toggle always updates for location.
[chromium-blink-merge.git] / base / win / iunknown_impl_unittest.cc
blob874a43a39a99a24c4fae13fdf7e7cf6b261cf4af
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"
10 namespace base {
11 namespace win {
13 class TestIUnknownImplSubclass : public IUnknownImpl {
14 public:
15 TestIUnknownImplSubclass() {
16 ++instance_count;
18 ~TestIUnknownImplSubclass() override { --instance_count; }
19 static int instance_count;
22 // static
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)));
41 other->Release();
43 EXPECT_EQ(1, u->Release());
44 EXPECT_EQ(0, u->Release());
45 EXPECT_EQ(0, TestIUnknownImplSubclass::instance_count);
48 } // namespace win
49 } // namespace base