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

Side by Side Diff: base/timer/timer_unittest.cc

Issue 1355063004: Template methods on Timer classes instead of the classes themselves. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: timer: fixwindowslink+rebase Created 5 years, 3 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
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/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "base/message_loop/message_loop.h" 6 #include "base/message_loop/message_loop.h"
7 #include "base/test/test_simple_task_runner.h" 7 #include "base/test/test_simple_task_runner.h"
8 #include "base/timer/timer.h" 8 #include "base/timer/timer.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 private: 45 private:
46 void Run() { 46 void Run() {
47 *did_run_ = true; 47 *did_run_ = true;
48 if (quit_message_loop_) { 48 if (quit_message_loop_) {
49 base::MessageLoop::current()->QuitWhenIdle(); 49 base::MessageLoop::current()->QuitWhenIdle();
50 } 50 }
51 } 51 }
52 52
53 bool* did_run_; 53 bool* did_run_;
54 base::OneShotTimer<OneShotTimerTester> timer_; 54 base::OneShotTimer timer_;
55 const unsigned delay_ms_; 55 const unsigned delay_ms_;
56 bool quit_message_loop_; 56 bool quit_message_loop_;
57 }; 57 };
58 58
59 class OneShotSelfDeletingTimerTester { 59 class OneShotSelfDeletingTimerTester {
60 public: 60 public:
61 explicit OneShotSelfDeletingTimerTester(bool* did_run) : 61 explicit OneShotSelfDeletingTimerTester(bool* did_run)
62 did_run_(did_run), 62 : did_run_(did_run), timer_(new base::OneShotTimer()) {}
63 timer_(new base::OneShotTimer<OneShotSelfDeletingTimerTester>()) {
64 }
65 63
66 void Start() { 64 void Start() {
67 timer_->Start(FROM_HERE, TimeDelta::FromMilliseconds(10), this, 65 timer_->Start(FROM_HERE, TimeDelta::FromMilliseconds(10), this,
68 &OneShotSelfDeletingTimerTester::Run); 66 &OneShotSelfDeletingTimerTester::Run);
69 } 67 }
70 68
71 private: 69 private:
72 void Run() { 70 void Run() {
73 *did_run_ = true; 71 *did_run_ = true;
74 timer_.reset(); 72 timer_.reset();
75 base::MessageLoop::current()->QuitWhenIdle(); 73 base::MessageLoop::current()->QuitWhenIdle();
76 } 74 }
77 75
78 bool* did_run_; 76 bool* did_run_;
79 scoped_ptr<base::OneShotTimer<OneShotSelfDeletingTimerTester> > timer_; 77 scoped_ptr<base::OneShotTimer> timer_;
80 }; 78 };
81 79
82 class RepeatingTimerTester { 80 class RepeatingTimerTester {
83 public: 81 public:
84 explicit RepeatingTimerTester(bool* did_run, const TimeDelta& delay) 82 explicit RepeatingTimerTester(bool* did_run, const TimeDelta& delay)
85 : did_run_(did_run), counter_(10), delay_(delay) { 83 : did_run_(did_run), counter_(10), delay_(delay) {
86 } 84 }
87 85
88 void Start() { 86 void Start() {
89 timer_.Start(FROM_HERE, delay_, this, &RepeatingTimerTester::Run); 87 timer_.Start(FROM_HERE, delay_, this, &RepeatingTimerTester::Run);
90 } 88 }
91 89
92 private: 90 private:
93 void Run() { 91 void Run() {
94 if (--counter_ == 0) { 92 if (--counter_ == 0) {
95 *did_run_ = true; 93 *did_run_ = true;
96 timer_.Stop(); 94 timer_.Stop();
97 base::MessageLoop::current()->QuitWhenIdle(); 95 base::MessageLoop::current()->QuitWhenIdle();
98 } 96 }
99 } 97 }
100 98
101 bool* did_run_; 99 bool* did_run_;
102 int counter_; 100 int counter_;
103 TimeDelta delay_; 101 TimeDelta delay_;
104 base::RepeatingTimer<RepeatingTimerTester> timer_; 102 base::RepeatingTimer timer_;
105 }; 103 };
106 104
107 void RunTest_OneShotTimer(base::MessageLoop::Type message_loop_type) { 105 void RunTest_OneShotTimer(base::MessageLoop::Type message_loop_type) {
108 base::MessageLoop loop(message_loop_type); 106 base::MessageLoop loop(message_loop_type);
109 107
110 bool did_run = false; 108 bool did_run = false;
111 OneShotTimerTester f(&did_run); 109 OneShotTimerTester f(&did_run);
112 f.Start(); 110 f.Start();
113 111
114 base::MessageLoop::current()->Run(); 112 base::MessageLoop::current()->Run();
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 196
199 private: 197 private:
200 bool signaled_ = false; 198 bool signaled_ = false;
201 }; 199 };
202 200
203 void RunTest_DelayTimer_NoCall(base::MessageLoop::Type message_loop_type) { 201 void RunTest_DelayTimer_NoCall(base::MessageLoop::Type message_loop_type) {
204 base::MessageLoop loop(message_loop_type); 202 base::MessageLoop loop(message_loop_type);
205 203
206 // If Delay is never called, the timer shouldn't go off. 204 // If Delay is never called, the timer shouldn't go off.
207 DelayTimerTarget target; 205 DelayTimerTarget target;
208 base::DelayTimer<DelayTimerTarget> timer(FROM_HERE, 206 base::DelayTimer timer(FROM_HERE, TimeDelta::FromMilliseconds(1), &target,
209 TimeDelta::FromMilliseconds(1), &target, &DelayTimerTarget::Signal); 207 &DelayTimerTarget::Signal);
210 208
211 bool did_run = false; 209 bool did_run = false;
212 OneShotTimerTester tester(&did_run); 210 OneShotTimerTester tester(&did_run);
213 tester.Start(); 211 tester.Start();
214 base::MessageLoop::current()->Run(); 212 base::MessageLoop::current()->Run();
215 213
216 ASSERT_FALSE(target.signaled()); 214 ASSERT_FALSE(target.signaled());
217 } 215 }
218 216
219 void RunTest_DelayTimer_OneCall(base::MessageLoop::Type message_loop_type) { 217 void RunTest_DelayTimer_OneCall(base::MessageLoop::Type message_loop_type) {
220 base::MessageLoop loop(message_loop_type); 218 base::MessageLoop loop(message_loop_type);
221 219
222 DelayTimerTarget target; 220 DelayTimerTarget target;
223 base::DelayTimer<DelayTimerTarget> timer(FROM_HERE, 221 base::DelayTimer timer(FROM_HERE, TimeDelta::FromMilliseconds(1), &target,
224 TimeDelta::FromMilliseconds(1), &target, &DelayTimerTarget::Signal); 222 &DelayTimerTarget::Signal);
225 timer.Reset(); 223 timer.Reset();
226 224
227 bool did_run = false; 225 bool did_run = false;
228 OneShotTimerTester tester(&did_run, 100 /* milliseconds */); 226 OneShotTimerTester tester(&did_run, 100 /* milliseconds */);
229 tester.Start(); 227 tester.Start();
230 base::MessageLoop::current()->Run(); 228 base::MessageLoop::current()->Run();
231 229
232 ASSERT_TRUE(target.signaled()); 230 ASSERT_TRUE(target.signaled());
233 } 231 }
234 232
235 struct ResetHelper { 233 struct ResetHelper {
236 ResetHelper(base::DelayTimer<DelayTimerTarget>* timer, 234 ResetHelper(base::DelayTimer* timer, DelayTimerTarget* target)
237 DelayTimerTarget* target) 235 : timer_(timer), target_(target) {}
238 : timer_(timer),
239 target_(target) {
240 }
241 236
242 void Reset() { 237 void Reset() {
243 ASSERT_FALSE(target_->signaled()); 238 ASSERT_FALSE(target_->signaled());
244 timer_->Reset(); 239 timer_->Reset();
245 } 240 }
246 241
247 private: 242 private:
248 base::DelayTimer<DelayTimerTarget> *const timer_; 243 base::DelayTimer* const timer_;
249 DelayTimerTarget *const target_; 244 DelayTimerTarget* const target_;
250 }; 245 };
251 246
252 void RunTest_DelayTimer_Reset(base::MessageLoop::Type message_loop_type) { 247 void RunTest_DelayTimer_Reset(base::MessageLoop::Type message_loop_type) {
253 base::MessageLoop loop(message_loop_type); 248 base::MessageLoop loop(message_loop_type);
254 249
255 // If Delay is never called, the timer shouldn't go off. 250 // If Delay is never called, the timer shouldn't go off.
256 DelayTimerTarget target; 251 DelayTimerTarget target;
257 base::DelayTimer<DelayTimerTarget> timer(FROM_HERE, 252 base::DelayTimer timer(FROM_HERE, TimeDelta::FromMilliseconds(50), &target,
258 TimeDelta::FromMilliseconds(50), &target, &DelayTimerTarget::Signal); 253 &DelayTimerTarget::Signal);
259 timer.Reset(); 254 timer.Reset();
260 255
261 ResetHelper reset_helper(&timer, &target); 256 ResetHelper reset_helper(&timer, &target);
262 257
263 base::OneShotTimer<ResetHelper> timers[20]; 258 base::OneShotTimer timers[20];
264 for (size_t i = 0; i < arraysize(timers); ++i) { 259 for (size_t i = 0; i < arraysize(timers); ++i) {
265 timers[i].Start(FROM_HERE, TimeDelta::FromMilliseconds(i * 10), 260 timers[i].Start(FROM_HERE, TimeDelta::FromMilliseconds(i * 10),
266 &reset_helper, &ResetHelper::Reset); 261 &reset_helper, &ResetHelper::Reset);
267 } 262 }
268 263
269 bool did_run = false; 264 bool did_run = false;
270 OneShotTimerTester tester(&did_run, 300); 265 OneShotTimerTester tester(&did_run, 300);
271 tester.Start(); 266 tester.Start();
272 base::MessageLoop::current()->Run(); 267 base::MessageLoop::current()->Run();
273 268
274 ASSERT_TRUE(target.signaled()); 269 ASSERT_TRUE(target.signaled());
275 } 270 }
276 271
277 class DelayTimerFatalTarget { 272 class DelayTimerFatalTarget {
278 public: 273 public:
279 void Signal() { 274 void Signal() {
280 ASSERT_TRUE(false); 275 ASSERT_TRUE(false);
281 } 276 }
282 }; 277 };
283 278
284 279
285 void RunTest_DelayTimer_Deleted(base::MessageLoop::Type message_loop_type) { 280 void RunTest_DelayTimer_Deleted(base::MessageLoop::Type message_loop_type) {
286 base::MessageLoop loop(message_loop_type); 281 base::MessageLoop loop(message_loop_type);
287 282
288 DelayTimerFatalTarget target; 283 DelayTimerFatalTarget target;
289 284
290 { 285 {
291 base::DelayTimer<DelayTimerFatalTarget> timer( 286 base::DelayTimer timer(FROM_HERE, TimeDelta::FromMilliseconds(50), &target,
292 FROM_HERE, TimeDelta::FromMilliseconds(50), &target, 287 &DelayTimerFatalTarget::Signal);
293 &DelayTimerFatalTarget::Signal);
294 timer.Reset(); 288 timer.Reset();
295 } 289 }
296 290
297 // When the timer is deleted, the DelayTimerFatalTarget should never be 291 // When the timer is deleted, the DelayTimerFatalTarget should never be
298 // called. 292 // called.
299 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100)); 293 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100));
300 } 294 }
301 295
302 } // namespace 296 } // namespace
303 297
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 base::Bind(&SetCallbackHappened1)); 522 base::Bind(&SetCallbackHappened1));
529 timer.Reset(); 523 timer.Reset();
530 // Since Reset happened before task ran, the user_task must not be cleared: 524 // Since Reset happened before task ran, the user_task must not be cleared:
531 ASSERT_FALSE(timer.user_task().is_null()); 525 ASSERT_FALSE(timer.user_task().is_null());
532 base::MessageLoop::current()->Run(); 526 base::MessageLoop::current()->Run();
533 EXPECT_TRUE(g_callback_happened1); 527 EXPECT_TRUE(g_callback_happened1);
534 } 528 }
535 } 529 }
536 530
537 } // namespace 531 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698