license.bot | f003cfe | 2008-08-24 09:55:55 +0900 | [diff] [blame^] | 1 | // 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 |
|
| 9 | namespace {
|
| 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.
|
| 13 | class ShadowingAtExitManager : public base::AtExitManager {
|
| 14 | public:
|
| 15 | ShadowingAtExitManager() : AtExitManager(true) {}
|
| 16 | };
|
| 17 |
|
| 18 | int g_test_counter_1 = 0;
|
| 19 | int g_test_counter_2 = 0;
|
| 20 |
|
| 21 | void IncrementTestCounter1() {
|
| 22 | ++g_test_counter_1;
|
| 23 | }
|
| 24 |
|
| 25 | void IncrementTestCounter2() {
|
| 26 | ++g_test_counter_2;
|
| 27 | }
|
| 28 |
|
| 29 | void ZeroTestCounters() {
|
| 30 | g_test_counter_1 = 0;
|
| 31 | g_test_counter_2 = 0;
|
| 32 | }
|
| 33 |
|
| 34 | void ExpectCounter1IsZero() {
|
| 35 | EXPECT_EQ(0, g_test_counter_1);
|
| 36 | }
|
| 37 |
|
| 38 | } // namespace
|
| 39 |
|
| 40 | TEST(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 |
|
| 55 | TEST(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 |
|