• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2017 The Chromium Authors
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/com_init_util.h"
6 
7 #include "base/test/gtest_util.h"
8 #include "base/win/scoped_com_initializer.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 
11 namespace base {
12 namespace win {
13 
TEST(ComInitUtil,AssertNotInitialized)14 TEST(ComInitUtil, AssertNotInitialized) {
15   if (DCHECK_IS_ON()) {
16     EXPECT_NOTREACHED_DEATH(AssertComInitialized());
17   }
18 }
19 
TEST(ComInitUtil,AssertUninitialized)20 TEST(ComInitUtil, AssertUninitialized) {
21   // When COM is uninitialized, the TLS data will remain, but the apartment
22   // status will be updated. This covers that case.
23   {
24     ScopedCOMInitializer com_initializer;
25     ASSERT_TRUE(com_initializer.Succeeded());
26   }
27   if (DCHECK_IS_ON()) {
28     EXPECT_NOTREACHED_DEATH(AssertComInitialized());
29   }
30 }
31 
TEST(ComInitUtil,AssertSTAInitialized)32 TEST(ComInitUtil, AssertSTAInitialized) {
33   ScopedCOMInitializer com_initializer;
34   ASSERT_TRUE(com_initializer.Succeeded());
35 
36   AssertComInitialized();
37 }
38 
TEST(ComInitUtil,AssertMTAInitialized)39 TEST(ComInitUtil, AssertMTAInitialized) {
40   ScopedCOMInitializer com_initializer(ScopedCOMInitializer::kMTA);
41   ASSERT_TRUE(com_initializer.Succeeded());
42 
43   AssertComInitialized();
44 }
45 
TEST(ComInitUtil,AssertNoneApartmentType)46 TEST(ComInitUtil, AssertNoneApartmentType) {
47   AssertComApartmentType(ComApartmentType::NONE);
48   EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::STA));
49   EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::MTA));
50 }
51 
TEST(ComInitUtil,AssertNoneApartmentTypeUninitialized)52 TEST(ComInitUtil, AssertNoneApartmentTypeUninitialized) {
53   // When COM is uninitialized, the TLS data will remain, but the apartment
54   // status will be updated. This covers that case.
55   {
56     ScopedCOMInitializer com_initializer;
57     ASSERT_TRUE(com_initializer.Succeeded());
58   }
59   AssertComApartmentType(ComApartmentType::NONE);
60   EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::STA));
61   EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::MTA));
62 }
63 
TEST(ComInitUtil,AssertSTAApartmentType)64 TEST(ComInitUtil, AssertSTAApartmentType) {
65   ScopedCOMInitializer com_initializer;
66   EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::NONE));
67   AssertComApartmentType(ComApartmentType::STA);
68   EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::MTA));
69 }
70 
TEST(ComInitUtil,AssertMTAApartmentType)71 TEST(ComInitUtil, AssertMTAApartmentType) {
72   ScopedCOMInitializer com_initializer(ScopedCOMInitializer::kMTA);
73   EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::NONE));
74   EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::STA));
75   AssertComApartmentType(ComApartmentType::MTA);
76 }
77 
78 }  // namespace win
79 }  // namespace base
80