// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/win/com_init_util.h" #include "base/test/gtest_util.h" #include "base/win/scoped_com_initializer.h" #include "testing/gtest/include/gtest/gtest.h" namespace base { namespace win { TEST(ComInitUtil, AssertNotInitialized) { EXPECT_DCHECK_DEATH(AssertComInitialized()); } TEST(ComInitUtil, AssertUninitialized) { // When COM is uninitialized, the TLS data will remain, but the apartment // status will be updated. This covers that case. { ScopedCOMInitializer com_initializer; ASSERT_TRUE(com_initializer.Succeeded()); } EXPECT_DCHECK_DEATH(AssertComInitialized()); } TEST(ComInitUtil, AssertSTAInitialized) { ScopedCOMInitializer com_initializer; ASSERT_TRUE(com_initializer.Succeeded()); AssertComInitialized(); } TEST(ComInitUtil, AssertMTAInitialized) { ScopedCOMInitializer com_initializer(ScopedCOMInitializer::kMTA); ASSERT_TRUE(com_initializer.Succeeded()); AssertComInitialized(); } TEST(ComInitUtil, AssertNoneApartmentType) { AssertComApartmentType(ComApartmentType::NONE); EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::STA)); EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::MTA)); } TEST(ComInitUtil, AssertNoneApartmentTypeUninitialized) { // When COM is uninitialized, the TLS data will remain, but the apartment // status will be updated. This covers that case. { ScopedCOMInitializer com_initializer; ASSERT_TRUE(com_initializer.Succeeded()); } AssertComApartmentType(ComApartmentType::NONE); EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::STA)); EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::MTA)); } TEST(ComInitUtil, AssertSTAApartmentType) { ScopedCOMInitializer com_initializer; EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::NONE)); AssertComApartmentType(ComApartmentType::STA); EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::MTA)); } TEST(ComInitUtil, AssertMTAApartmentType) { ScopedCOMInitializer com_initializer(ScopedCOMInitializer::kMTA); EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::NONE)); EXPECT_DCHECK_DEATH(AssertComApartmentType(ComApartmentType::STA)); AssertComApartmentType(ComApartmentType::MTA); } } // namespace win } // namespace base