blob: aaeb2f85305fda093881185cab378db8974d9448 [file] [log] [blame]
license.botf003cfe2008-08-24 09:55:55 +09001// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
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/at_exit.h"
6
7#include "testing/gtest/include/gtest/gtest.h"
8
9namespace {
10
11// Don't test the global AtExitManager, because asking it to process its
12// AtExit callbacks can ruin the global state that other tests may depend on.
13class ShadowingAtExitManager : public base::AtExitManager {
14 public:
15 ShadowingAtExitManager() : AtExitManager(true) {}
16};
17
18int g_test_counter_1 = 0;
19int g_test_counter_2 = 0;
20
21void IncrementTestCounter1() {
22 ++g_test_counter_1;
23}
24
25void IncrementTestCounter2() {
26 ++g_test_counter_2;
27}
28
29void ZeroTestCounters() {
30 g_test_counter_1 = 0;
31 g_test_counter_2 = 0;
32}
33
34void ExpectCounter1IsZero() {
35 EXPECT_EQ(0, g_test_counter_1);
36}
37
38} // namespace
39
40TEST(AtExitTest, Basic) {
41 ShadowingAtExitManager shadowing_at_exit_manager;
42
43 ZeroTestCounters();
44 base::AtExitManager::RegisterCallback(&IncrementTestCounter1);
45 base::AtExitManager::RegisterCallback(&IncrementTestCounter2);
46 base::AtExitManager::RegisterCallback(&IncrementTestCounter1);
47
48 EXPECT_EQ(0, g_test_counter_1);
49 EXPECT_EQ(0, g_test_counter_2);
50 base::AtExitManager::ProcessCallbacksNow();
51 EXPECT_EQ(2, g_test_counter_1);
52 EXPECT_EQ(1, g_test_counter_2);
53}
54
55TEST(AtExitTest, LIFOOrder) {
56 ShadowingAtExitManager shadowing_at_exit_manager;
57
58 ZeroTestCounters();
59 base::AtExitManager::RegisterCallback(&IncrementTestCounter1);
60 base::AtExitManager::RegisterCallback(&ExpectCounter1IsZero);
61 base::AtExitManager::RegisterCallback(&IncrementTestCounter2);
62
63 EXPECT_EQ(0, g_test_counter_1);
64 EXPECT_EQ(0, g_test_counter_2);
65 base::AtExitManager::ProcessCallbacksNow();
66 EXPECT_EQ(1, g_test_counter_1);
67 EXPECT_EQ(1, g_test_counter_2);
68}
69