| Index: base/test/test_suite.cc
|
| diff --git a/base/test/test_suite.cc b/base/test/test_suite.cc
|
| index 07b9964578a4a860712524443bf977505ef7119c..3def73a18c5fff08104a142e4d8eddcf185d2e25 100644
|
| --- a/base/test/test_suite.cc
|
| +++ b/base/test/test_suite.cc
|
| @@ -76,6 +76,29 @@ class TestClientInitializer : public testing::EmptyTestEventListener {
|
| DISALLOW_COPY_AND_ASSIGN(TestClientInitializer);
|
| };
|
|
|
| +// This class forces the destruction of all Singletons and LazyInstances
|
| +// between tests.
|
| +class SingletonDestructor : public testing::EmptyTestEventListener {
|
| + public:
|
| + SingletonDestructor() {}
|
| + virtual ~SingletonDestructor() {}
|
| +
|
| + // testing::EmptyTestEventListener:
|
| + virtual void OnTestStart(
|
| + const testing::TestInfo& test_info) OVERRIDE {
|
| + at_exit_manager_.reset(new base::ShadowingAtExitManager);
|
| + }
|
| +
|
| + virtual void OnTestEnd(const testing::TestInfo& test_info) OVERRIDE {
|
| + at_exit_manager_.reset();
|
| + }
|
| +
|
| + private:
|
| + scoped_ptr<base::ShadowingAtExitManager> at_exit_manager_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SingletonDestructor);
|
| +};
|
| +
|
| } // namespace
|
|
|
| TestSuite::TestSuite(int argc, char** argv) : initialized_command_line_(false) {
|
| @@ -252,8 +275,16 @@ void TestSuite::Initialize() {
|
| CatchMaybeTests();
|
| ResetCommandLine();
|
|
|
| + EnableSingletonTestIsolation();
|
| +
|
| TestTimeouts::Initialize();
|
| }
|
|
|
| void TestSuite::Shutdown() {
|
| }
|
| +
|
| +void TestSuite::EnableSingletonTestIsolation() {
|
| + testing::TestEventListeners& listeners =
|
| + testing::UnitTest::GetInstance()->listeners();
|
| + listeners.Append(new SingletonDestructor);
|
| +}
|
|
|