OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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.h" | 6 #include "base/message_loop.h" |
7 #include "base/task.h" | 7 #include "base/task.h" |
8 #include "base/timer.h" | 8 #include "base/timer.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
68 *did_run_ = true; | 68 *did_run_ = true; |
69 MessageLoop::current()->Quit(); | 69 MessageLoop::current()->Quit(); |
70 } | 70 } |
71 } | 71 } |
72 bool* did_run_; | 72 bool* did_run_; |
73 int counter_; | 73 int counter_; |
74 base::RepeatingTimer<RepeatingTimerTester> timer_; | 74 base::RepeatingTimer<RepeatingTimerTester> timer_; |
75 }; | 75 }; |
76 | 76 |
77 void RunTest_OneShotTimer(MessageLoop::Type message_loop_type) { | 77 void RunTest_OneShotTimer(MessageLoop::Type message_loop_type) { |
78 MessageLoop loop(message_loop_type); | 78 MessageLoop loop("TimerTest", message_loop_type); |
79 | 79 |
80 bool did_run = false; | 80 bool did_run = false; |
81 OneShotTimerTester f(&did_run); | 81 OneShotTimerTester f(&did_run); |
82 f.Start(); | 82 f.Start(); |
83 | 83 |
84 MessageLoop::current()->Run(); | 84 MessageLoop::current()->Run(); |
85 | 85 |
86 EXPECT_TRUE(did_run); | 86 EXPECT_TRUE(did_run); |
87 } | 87 } |
88 | 88 |
89 void RunTest_OneShotTimer_Cancel(MessageLoop::Type message_loop_type) { | 89 void RunTest_OneShotTimer_Cancel(MessageLoop::Type message_loop_type) { |
90 MessageLoop loop(message_loop_type); | 90 MessageLoop loop("TimerTest", message_loop_type); |
91 | 91 |
92 bool did_run_a = false; | 92 bool did_run_a = false; |
93 OneShotTimerTester* a = new OneShotTimerTester(&did_run_a); | 93 OneShotTimerTester* a = new OneShotTimerTester(&did_run_a); |
94 | 94 |
95 // This should run before the timer expires. | 95 // This should run before the timer expires. |
96 MessageLoop::current()->DeleteSoon(FROM_HERE, a); | 96 MessageLoop::current()->DeleteSoon(FROM_HERE, a); |
97 | 97 |
98 // Now start the timer. | 98 // Now start the timer. |
99 a->Start(); | 99 a->Start(); |
100 | 100 |
101 bool did_run_b = false; | 101 bool did_run_b = false; |
102 OneShotTimerTester b(&did_run_b); | 102 OneShotTimerTester b(&did_run_b); |
103 b.Start(); | 103 b.Start(); |
104 | 104 |
105 MessageLoop::current()->Run(); | 105 MessageLoop::current()->Run(); |
106 | 106 |
107 EXPECT_FALSE(did_run_a); | 107 EXPECT_FALSE(did_run_a); |
108 EXPECT_TRUE(did_run_b); | 108 EXPECT_TRUE(did_run_b); |
109 } | 109 } |
110 | 110 |
111 void RunTest_OneShotSelfDeletingTimer(MessageLoop::Type message_loop_type) { | 111 void RunTest_OneShotSelfDeletingTimer(MessageLoop::Type message_loop_type) { |
112 MessageLoop loop(message_loop_type); | 112 MessageLoop loop("TimerTest", message_loop_type); |
113 | 113 |
114 bool did_run = false; | 114 bool did_run = false; |
115 OneShotSelfDeletingTimerTester f(&did_run); | 115 OneShotSelfDeletingTimerTester f(&did_run); |
116 f.Start(); | 116 f.Start(); |
117 | 117 |
118 MessageLoop::current()->Run(); | 118 MessageLoop::current()->Run(); |
119 | 119 |
120 EXPECT_TRUE(did_run); | 120 EXPECT_TRUE(did_run); |
121 } | 121 } |
122 | 122 |
123 void RunTest_RepeatingTimer(MessageLoop::Type message_loop_type) { | 123 void RunTest_RepeatingTimer(MessageLoop::Type message_loop_type) { |
124 MessageLoop loop(message_loop_type); | 124 MessageLoop loop("TimerTest", message_loop_type); |
125 | 125 |
126 bool did_run = false; | 126 bool did_run = false; |
127 RepeatingTimerTester f(&did_run); | 127 RepeatingTimerTester f(&did_run); |
128 f.Start(); | 128 f.Start(); |
129 | 129 |
130 MessageLoop::current()->Run(); | 130 MessageLoop::current()->Run(); |
131 | 131 |
132 EXPECT_TRUE(did_run); | 132 EXPECT_TRUE(did_run); |
133 } | 133 } |
134 | 134 |
135 void RunTest_RepeatingTimer_Cancel(MessageLoop::Type message_loop_type) { | 135 void RunTest_RepeatingTimer_Cancel(MessageLoop::Type message_loop_type) { |
136 MessageLoop loop(message_loop_type); | 136 MessageLoop loop("TimerTest", message_loop_type); |
137 | 137 |
138 bool did_run_a = false; | 138 bool did_run_a = false; |
139 RepeatingTimerTester* a = new RepeatingTimerTester(&did_run_a); | 139 RepeatingTimerTester* a = new RepeatingTimerTester(&did_run_a); |
140 | 140 |
141 // This should run before the timer expires. | 141 // This should run before the timer expires. |
142 MessageLoop::current()->DeleteSoon(FROM_HERE, a); | 142 MessageLoop::current()->DeleteSoon(FROM_HERE, a); |
143 | 143 |
144 // Now start the timer. | 144 // Now start the timer. |
145 a->Start(); | 145 a->Start(); |
146 | 146 |
(...skipping 18 matching lines...) Expand all Loading... |
165 void Signal() { | 165 void Signal() { |
166 ASSERT_FALSE(signaled_); | 166 ASSERT_FALSE(signaled_); |
167 signaled_ = true; | 167 signaled_ = true; |
168 } | 168 } |
169 | 169 |
170 private: | 170 private: |
171 bool signaled_; | 171 bool signaled_; |
172 }; | 172 }; |
173 | 173 |
174 void RunTest_DelayTimer_NoCall(MessageLoop::Type message_loop_type) { | 174 void RunTest_DelayTimer_NoCall(MessageLoop::Type message_loop_type) { |
175 MessageLoop loop(message_loop_type); | 175 MessageLoop loop("TimerTest", message_loop_type); |
176 | 176 |
177 // If Delay is never called, the timer shouldn't go off. | 177 // If Delay is never called, the timer shouldn't go off. |
178 DelayTimerTarget target; | 178 DelayTimerTarget target; |
179 base::DelayTimer<DelayTimerTarget> timer( | 179 base::DelayTimer<DelayTimerTarget> timer( |
180 TimeDelta::FromMilliseconds(1), &target, &DelayTimerTarget::Signal); | 180 TimeDelta::FromMilliseconds(1), &target, &DelayTimerTarget::Signal); |
181 | 181 |
182 bool did_run = false; | 182 bool did_run = false; |
183 OneShotTimerTester tester(&did_run); | 183 OneShotTimerTester tester(&did_run); |
184 tester.Start(); | 184 tester.Start(); |
185 MessageLoop::current()->Run(); | 185 MessageLoop::current()->Run(); |
186 | 186 |
187 ASSERT_FALSE(target.signaled()); | 187 ASSERT_FALSE(target.signaled()); |
188 } | 188 } |
189 | 189 |
190 void RunTest_DelayTimer_OneCall(MessageLoop::Type message_loop_type) { | 190 void RunTest_DelayTimer_OneCall(MessageLoop::Type message_loop_type) { |
191 MessageLoop loop(message_loop_type); | 191 MessageLoop loop("TimerTest", message_loop_type); |
192 | 192 |
193 DelayTimerTarget target; | 193 DelayTimerTarget target; |
194 base::DelayTimer<DelayTimerTarget> timer( | 194 base::DelayTimer<DelayTimerTarget> timer( |
195 TimeDelta::FromMilliseconds(1), &target, &DelayTimerTarget::Signal); | 195 TimeDelta::FromMilliseconds(1), &target, &DelayTimerTarget::Signal); |
196 timer.Reset(); | 196 timer.Reset(); |
197 | 197 |
198 bool did_run = false; | 198 bool did_run = false; |
199 OneShotTimerTester tester(&did_run, 100 /* milliseconds */); | 199 OneShotTimerTester tester(&did_run, 100 /* milliseconds */); |
200 tester.Start(); | 200 tester.Start(); |
201 MessageLoop::current()->Run(); | 201 MessageLoop::current()->Run(); |
(...skipping 12 matching lines...) Expand all Loading... |
214 ASSERT_FALSE(target_->signaled()); | 214 ASSERT_FALSE(target_->signaled()); |
215 timer_->Reset(); | 215 timer_->Reset(); |
216 } | 216 } |
217 | 217 |
218 private: | 218 private: |
219 base::DelayTimer<DelayTimerTarget> *const timer_; | 219 base::DelayTimer<DelayTimerTarget> *const timer_; |
220 DelayTimerTarget *const target_; | 220 DelayTimerTarget *const target_; |
221 }; | 221 }; |
222 | 222 |
223 void RunTest_DelayTimer_Reset(MessageLoop::Type message_loop_type) { | 223 void RunTest_DelayTimer_Reset(MessageLoop::Type message_loop_type) { |
224 MessageLoop loop(message_loop_type); | 224 MessageLoop loop("TimerTest", message_loop_type); |
225 | 225 |
226 // If Delay is never called, the timer shouldn't go off. | 226 // If Delay is never called, the timer shouldn't go off. |
227 DelayTimerTarget target; | 227 DelayTimerTarget target; |
228 base::DelayTimer<DelayTimerTarget> timer( | 228 base::DelayTimer<DelayTimerTarget> timer( |
229 TimeDelta::FromMilliseconds(50), &target, &DelayTimerTarget::Signal); | 229 TimeDelta::FromMilliseconds(50), &target, &DelayTimerTarget::Signal); |
230 timer.Reset(); | 230 timer.Reset(); |
231 | 231 |
232 ResetHelper reset_helper(&timer, &target); | 232 ResetHelper reset_helper(&timer, &target); |
233 | 233 |
234 base::OneShotTimer<ResetHelper> timers[20]; | 234 base::OneShotTimer<ResetHelper> timers[20]; |
(...skipping 12 matching lines...) Expand all Loading... |
247 | 247 |
248 class DelayTimerFatalTarget { | 248 class DelayTimerFatalTarget { |
249 public: | 249 public: |
250 void Signal() { | 250 void Signal() { |
251 ASSERT_TRUE(false); | 251 ASSERT_TRUE(false); |
252 } | 252 } |
253 }; | 253 }; |
254 | 254 |
255 | 255 |
256 void RunTest_DelayTimer_Deleted(MessageLoop::Type message_loop_type) { | 256 void RunTest_DelayTimer_Deleted(MessageLoop::Type message_loop_type) { |
257 MessageLoop loop(message_loop_type); | 257 MessageLoop loop("TimerTest", message_loop_type); |
258 | 258 |
259 DelayTimerFatalTarget target; | 259 DelayTimerFatalTarget target; |
260 | 260 |
261 { | 261 { |
262 base::DelayTimer<DelayTimerFatalTarget> timer( | 262 base::DelayTimer<DelayTimerFatalTarget> timer( |
263 TimeDelta::FromMilliseconds(50), &target, | 263 TimeDelta::FromMilliseconds(50), &target, |
264 &DelayTimerFatalTarget::Signal); | 264 &DelayTimerFatalTarget::Signal); |
265 timer.Reset(); | 265 timer.Reset(); |
266 } | 266 } |
267 | 267 |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 // message loop does not cause crashes if there were pending | 338 // message loop does not cause crashes if there were pending |
339 // timers not yet fired. It may only trigger exceptions | 339 // timers not yet fired. It may only trigger exceptions |
340 // if debug heap checking (or purify) is enabled. | 340 // if debug heap checking (or purify) is enabled. |
341 bool did_run = false; | 341 bool did_run = false; |
342 { | 342 { |
343 OneShotTimerTester a(&did_run); | 343 OneShotTimerTester a(&did_run); |
344 OneShotTimerTester b(&did_run); | 344 OneShotTimerTester b(&did_run); |
345 OneShotTimerTester c(&did_run); | 345 OneShotTimerTester c(&did_run); |
346 OneShotTimerTester d(&did_run); | 346 OneShotTimerTester d(&did_run); |
347 { | 347 { |
348 MessageLoop loop(MessageLoop::TYPE_DEFAULT); | 348 MessageLoop loop("TimerTest", MessageLoop::TYPE_DEFAULT); |
349 a.Start(); | 349 a.Start(); |
350 b.Start(); | 350 b.Start(); |
351 } // MessageLoop destructs by falling out of scope. | 351 } // MessageLoop destructs by falling out of scope. |
352 } // OneShotTimers destruct. SHOULD NOT CRASH, of course. | 352 } // OneShotTimers destruct. SHOULD NOT CRASH, of course. |
353 | 353 |
354 EXPECT_FALSE(did_run); | 354 EXPECT_FALSE(did_run); |
355 } | 355 } |
OLD | NEW |