blob: cda73403fb04af6f08d2d1951614f1de6e1cd612 [file] [log] [blame]
[email protected]762de912011-09-06 23:14:471// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]b2e97292008-09-02 18:20:342// 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"
[email protected]762de912011-09-06 23:14:476#include "base/bind.h"
[email protected]b2e97292008-09-02 18:20:347
8#include "testing/gtest/include/gtest/gtest.h"
9
10namespace {
11
[email protected]b2e97292008-09-02 18:20:3412int g_test_counter_1 = 0;
13int g_test_counter_2 = 0;
14
[email protected]9795ec12008-09-08 09:06:5115void IncrementTestCounter1(void* unused) {
[email protected]b2e97292008-09-02 18:20:3416 ++g_test_counter_1;
17}
18
[email protected]9795ec12008-09-08 09:06:5119void IncrementTestCounter2(void* unused) {
[email protected]b2e97292008-09-02 18:20:3420 ++g_test_counter_2;
21}
22
23void ZeroTestCounters() {
24 g_test_counter_1 = 0;
25 g_test_counter_2 = 0;
26}
27
[email protected]9795ec12008-09-08 09:06:5128void ExpectCounter1IsZero(void* unused) {
[email protected]b2e97292008-09-02 18:20:3429 EXPECT_EQ(0, g_test_counter_1);
30}
31
[email protected]9795ec12008-09-08 09:06:5132void ExpectParamIsNull(void* param) {
33 EXPECT_EQ(static_cast<void*>(NULL), param);
34}
35
36void ExpectParamIsCounter(void* param) {
37 EXPECT_EQ(&g_test_counter_1, param);
38}
39
[email protected]b2e97292008-09-02 18:20:3440} // namespace
41
[email protected]4ea927b2009-11-19 09:11:3942class AtExitTest : public testing::Test {
43 private:
44 // Don't test the global AtExitManager, because asking it to process its
45 // AtExit callbacks can ruin the global state that other tests may depend on.
46 base::ShadowingAtExitManager exit_manager_;
47};
[email protected]b2e97292008-09-02 18:20:3448
[email protected]4ea927b2009-11-19 09:11:3949TEST_F(AtExitTest, Basic) {
[email protected]b2e97292008-09-02 18:20:3450 ZeroTestCounters();
[email protected]9795ec12008-09-08 09:06:5151 base::AtExitManager::RegisterCallback(&IncrementTestCounter1, NULL);
52 base::AtExitManager::RegisterCallback(&IncrementTestCounter2, NULL);
53 base::AtExitManager::RegisterCallback(&IncrementTestCounter1, NULL);
[email protected]52a261f2009-03-03 15:01:1254
[email protected]b2e97292008-09-02 18:20:3455 EXPECT_EQ(0, g_test_counter_1);
56 EXPECT_EQ(0, g_test_counter_2);
57 base::AtExitManager::ProcessCallbacksNow();
58 EXPECT_EQ(2, g_test_counter_1);
59 EXPECT_EQ(1, g_test_counter_2);
60}
61
[email protected]4ea927b2009-11-19 09:11:3962TEST_F(AtExitTest, LIFOOrder) {
[email protected]b2e97292008-09-02 18:20:3463 ZeroTestCounters();
[email protected]9795ec12008-09-08 09:06:5164 base::AtExitManager::RegisterCallback(&IncrementTestCounter1, NULL);
65 base::AtExitManager::RegisterCallback(&ExpectCounter1IsZero, NULL);
66 base::AtExitManager::RegisterCallback(&IncrementTestCounter2, NULL);
[email protected]52a261f2009-03-03 15:01:1267
[email protected]b2e97292008-09-02 18:20:3468 EXPECT_EQ(0, g_test_counter_1);
69 EXPECT_EQ(0, g_test_counter_2);
70 base::AtExitManager::ProcessCallbacksNow();
71 EXPECT_EQ(1, g_test_counter_1);
72 EXPECT_EQ(1, g_test_counter_2);
73}
74
[email protected]4ea927b2009-11-19 09:11:3975TEST_F(AtExitTest, Param) {
[email protected]9795ec12008-09-08 09:06:5176 base::AtExitManager::RegisterCallback(&ExpectParamIsNull, NULL);
77 base::AtExitManager::RegisterCallback(&ExpectParamIsCounter,
78 &g_test_counter_1);
79 base::AtExitManager::ProcessCallbacksNow();
80}
[email protected]762de912011-09-06 23:14:4781
82TEST_F(AtExitTest, Task) {
83 ZeroTestCounters();
[email protected]7296f2762011-11-21 19:23:4484 base::AtExitManager::RegisterTask(base::Bind(&ExpectParamIsCounter,
[email protected]762de912011-09-06 23:14:4785 &g_test_counter_1));
86 base::AtExitManager::ProcessCallbacksNow();
87}