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