
For now, this is only for base_unittests. The plan is to enable it for all unit tests. This should finally fix mysterious problems cause by Singletons surviving after one test etc. This change also adapts LazyInstance so that it can be reused after being destroyed. It is used very frequently, for example each time a MessageLoop is used. It is also worth noting that we had some problems in the past related to the MessageLoop being destroyed and re-instantiated in the same test executable. This patch should also fix that. TEST=none BUG=12710 Review URL: http://codereview.chromium.org/372057 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@32507 0039d316-1c4b-4281-b951-d872f2087c98
80 lines
2.2 KiB
C++
80 lines
2.2 KiB
C++
// Copyright (c) 2006-2008 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 "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(static_cast<void*>(NULL), 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, NULL);
|
|
base::AtExitManager::RegisterCallback(&IncrementTestCounter2, NULL);
|
|
base::AtExitManager::RegisterCallback(&IncrementTestCounter1, NULL);
|
|
|
|
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, NULL);
|
|
base::AtExitManager::RegisterCallback(&ExpectCounter1IsZero, NULL);
|
|
base::AtExitManager::RegisterCallback(&IncrementTestCounter2, NULL);
|
|
|
|
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, NULL);
|
|
base::AtExitManager::RegisterCallback(&ExpectParamIsCounter,
|
|
&g_test_counter_1);
|
|
base::AtExitManager::ProcessCallbacksNow();
|
|
}
|