Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(663)

Side by Side Diff: base/test/test_suite.cc

Issue 10582012: For unit tests, track additions to AtExitManager and warn. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cause an error; for trybot run. Ignore. Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/test/test_suite.h" 5 #include "base/test/test_suite.h"
6 6
7 #include "base/at_exit.h" 7 #include "base/at_exit.h"
8 #include "base/base_paths.h" 8 #include "base/base_paths.h"
9 #include "base/base_switches.h" 9 #include "base/base_switches.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 } 62 }
63 63
64 private: 64 private:
65 CommandLine old_command_line_; 65 CommandLine old_command_line_;
66 66
67 DISALLOW_COPY_AND_ASSIGN(TestClientInitializer); 67 DISALLOW_COPY_AND_ASSIGN(TestClientInitializer);
68 }; 68 };
69 69
70 } // namespace 70 } // namespace
71 71
72 namespace base {
73
74 class TestWatchAtExitManager : public testing::EmptyTestEventListener {
75 public:
76 TestWatchAtExitManager() { }
77 ~TestWatchAtExitManager() { }
78
79 virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE {
80 base::ShadowingAtExitManager at_exit_manager;
81 initial_top_manager_ = at_exit_manager.next_manager_;
82 at_exit_stack_size_ = initial_top_manager_->stack_.size();
83 }
84
85 virtual void OnTestEnd(const testing::TestInfo& test_info) OVERRIDE {
86 base::ShadowingAtExitManager at_exit_manager;
87 base::AtExitManager* new_top_manager = at_exit_manager.next_manager_;
88 size_t new_stack_size = new_top_manager->stack_.size();
89
90 if (initial_top_manager_ != new_top_manager) {
91 LOG(ERROR) << "AtExitManager: stack changed depth across test " <<
92 test_info.test_case_name() << "." << test_info.name();
93 } else if (new_stack_size != at_exit_stack_size_) {
94 // TODO(scottbyer): clean up all the errors that result from this and
95 // turn this into a test failure with ADD_FAILURE().
96 ADD_FAILURE() <<
97 "AtExitManager: items added to the callback list by " <<
98 test_info.test_case_name() << "." << test_info.name() <<
99 ". Test should be surrounded by a ShadowingAtExitManager.";
100 }
101 }
102
103 private:
104 base::AtExitManager* initial_top_manager_;
105 size_t at_exit_stack_size_;
106
107 DISALLOW_COPY_AND_ASSIGN(TestWatchAtExitManager);
108 };
109
110 } // namespace base
111
72 const char TestSuite::kStrictFailureHandling[] = "strict_failure_handling"; 112 const char TestSuite::kStrictFailureHandling[] = "strict_failure_handling";
73 113
74 TestSuite::TestSuite(int argc, char** argv) : initialized_command_line_(false) { 114 TestSuite::TestSuite(int argc, char** argv) : initialized_command_line_(false) {
75 PreInitialize(argc, argv, true); 115 PreInitialize(argc, argv, true);
76 } 116 }
77 117
78 TestSuite::TestSuite(int argc, char** argv, bool create_at_exit_manager) 118 TestSuite::TestSuite(int argc, char** argv, bool create_at_exit_manager)
79 : initialized_command_line_(false) { 119 : initialized_command_line_(false) {
80 PreInitialize(argc, argv, create_at_exit_manager); 120 PreInitialize(argc, argv, create_at_exit_manager);
81 } 121 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 testing::UnitTest::GetInstance()->listeners(); 203 testing::UnitTest::GetInstance()->listeners();
164 listeners.Append(new MaybeTestDisabler); 204 listeners.Append(new MaybeTestDisabler);
165 } 205 }
166 206
167 void TestSuite::ResetCommandLine() { 207 void TestSuite::ResetCommandLine() {
168 testing::TestEventListeners& listeners = 208 testing::TestEventListeners& listeners =
169 testing::UnitTest::GetInstance()->listeners(); 209 testing::UnitTest::GetInstance()->listeners();
170 listeners.Append(new TestClientInitializer); 210 listeners.Append(new TestClientInitializer);
171 } 211 }
172 212
213 void TestSuite::WatchAtExitManager() {
214 LOG(INFO) << "Adding watcher for AtExitManager.";
Paweł Hajdan Jr. 2012/06/20 07:47:13 This shouldn't be needed.
Scott Byer 2012/06/21 00:05:41 Oops. Was doing local diagnostics and left it in.
215 testing::TestEventListeners& listeners =
216 testing::UnitTest::GetInstance()->listeners();
217 listeners.Append(new TestWatchAtExitManager);
218 }
219
173 // Don't add additional code to this method. Instead add it to 220 // Don't add additional code to this method. Instead add it to
174 // Initialize(). See bug 6436. 221 // Initialize(). See bug 6436.
175 int TestSuite::Run() { 222 int TestSuite::Run() {
176 #if defined(OS_MACOSX) 223 #if defined(OS_MACOSX)
177 base::mac::ScopedNSAutoreleasePool scoped_pool; 224 base::mac::ScopedNSAutoreleasePool scoped_pool;
178 #endif 225 #endif
179 226
180 Initialize(); 227 Initialize();
181 std::string client_func = 228 std::string client_func =
182 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 229 CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 icu_util::Initialize(); 332 icu_util::Initialize();
286 333
287 CatchMaybeTests(); 334 CatchMaybeTests();
288 ResetCommandLine(); 335 ResetCommandLine();
289 336
290 TestTimeouts::Initialize(); 337 TestTimeouts::Initialize();
291 } 338 }
292 339
293 void TestSuite::Shutdown() { 340 void TestSuite::Shutdown() {
294 } 341 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698