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 EXPECT_DCHECK_DEATH(AssertComInitialized());
16 }
17
TEST(ComInitUtil,AssertUninitialized)18 TEST(ComInitUtil, AssertUninitialized) {
19 // When COM is uninitialized, the TLS data will remain, but the apartment
20 // status will be updated. This covers that case.
21 {
22 ScopedCOMInitializer com_initializer;
23 ASSERT_TRUE(com_initializer.Succeeded());
24 }
25 EXPECT_DCHECK_DEATH(AssertComInitialized());
26 }
27
TEST(ComInitUtil,AssertSTAInitialized)28 TEST(ComInitUtil, AssertSTAInitialized) {
29 ScopedCOMInitializer com_initializer;
30 ASSERT_TRUE(com_initializer.Succeeded());
31
32 AssertComInitialized();
33 }
34
TEST(ComInitUtil,AssertMTAInitialized)35 TEST(ComInitUtil, AssertMTAInitialized) {
36 ScopedCOMInitializer com_initializer(ScopedCOMInitializer::kMTA);
37 ASSERT_TRUE(com_initializer.Succeeded());
38
39 AssertComInitialized();
40 }
41
TEST(ComInitUtil,AssertNoneApartmentType)42 TEST(ComInitUtil, AssertNoneApartmentType) {
43 AssertComApartmentType(ComApartmentType::NONE);
44 EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::STA));
45 EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::MTA));
46 }
47
TEST(ComInitUtil,AssertNoneApartmentTypeUninitialized)48 TEST(ComInitUtil, AssertNoneApartmentTypeUninitialized) {
49 // When COM is uninitialized, the TLS data will remain, but the apartment
50 // status will be updated. This covers that case.
51 {
52 ScopedCOMInitializer com_initializer;
53 ASSERT_TRUE(com_initializer.Succeeded());
54 }
55 AssertComApartmentType(ComApartmentType::NONE);
56 EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::STA));
57 EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::MTA));
58 }
59
TEST(ComInitUtil,AssertSTAApartmentType)60 TEST(ComInitUtil, AssertSTAApartmentType) {
61 ScopedCOMInitializer com_initializer;
62 EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::NONE));
63 AssertComApartmentType(ComApartmentType::STA);
64 EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::MTA));
65 }
66
TEST(ComInitUtil,AssertMTAApartmentType)67 TEST(ComInitUtil, AssertMTAApartmentType) {
68 ScopedCOMInitializer com_initializer(ScopedCOMInitializer::kMTA);
69 EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::NONE));
70 EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::STA));
71 AssertComApartmentType(ComApartmentType::MTA);
72 }
73
74 } // namespace win
75 } // namespace base
76