123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // Copyright (c) 2011 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "base/at_exit.h"
- #include "base/bind.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace {
- int g_test_counter_1 = 0;
- int g_test_counter_2 = 0;
- void IncrementTestCounter1(void* unused) {
- ++g_test_counter_1;
- }
- void IncrementTestCounter2(void* unused) {
- ++g_test_counter_2;
- }
- void ZeroTestCounters() {
- g_test_counter_1 = 0;
- g_test_counter_2 = 0;
- }
- void ExpectCounter1IsZero(void* unused) {
- EXPECT_EQ(0, g_test_counter_1);
- }
- void ExpectParamIsNull(void* param) {
- EXPECT_EQ(nullptr, param);
- }
- void ExpectParamIsCounter(void* param) {
- EXPECT_EQ(&g_test_counter_1, param);
- }
- } // namespace
- class AtExitTest : public testing::Test {
- private:
- // Don't test the global AtExitManager, because asking it to process its
- // AtExit callbacks can ruin the global state that other tests may depend on.
- base::ShadowingAtExitManager exit_manager_;
- };
- TEST_F(AtExitTest, Basic) {
- ZeroTestCounters();
- base::AtExitManager::RegisterCallback(&IncrementTestCounter1, nullptr);
- base::AtExitManager::RegisterCallback(&IncrementTestCounter2, nullptr);
- base::AtExitManager::RegisterCallback(&IncrementTestCounter1, nullptr);
- EXPECT_EQ(0, g_test_counter_1);
- EXPECT_EQ(0, g_test_counter_2);
- base::AtExitManager::ProcessCallbacksNow();
- EXPECT_EQ(2, g_test_counter_1);
- EXPECT_EQ(1, g_test_counter_2);
- }
- TEST_F(AtExitTest, LIFOOrder) {
- ZeroTestCounters();
- base::AtExitManager::RegisterCallback(&IncrementTestCounter1, nullptr);
- base::AtExitManager::RegisterCallback(&ExpectCounter1IsZero, nullptr);
- base::AtExitManager::RegisterCallback(&IncrementTestCounter2, nullptr);
- EXPECT_EQ(0, g_test_counter_1);
- EXPECT_EQ(0, g_test_counter_2);
- base::AtExitManager::ProcessCallbacksNow();
- EXPECT_EQ(1, g_test_counter_1);
- EXPECT_EQ(1, g_test_counter_2);
- }
- TEST_F(AtExitTest, Param) {
- base::AtExitManager::RegisterCallback(&ExpectParamIsNull, nullptr);
- base::AtExitManager::RegisterCallback(&ExpectParamIsCounter,
- &g_test_counter_1);
- base::AtExitManager::ProcessCallbacksNow();
- }
- TEST_F(AtExitTest, Task) {
- ZeroTestCounters();
- base::AtExitManager::RegisterTask(
- base::BindOnce(&ExpectParamIsCounter, &g_test_counter_1));
- base::AtExitManager::ProcessCallbacksNow();
- }
|