OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "base/bind_helpers.h" | 7 #include "base/bind_helpers.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
189 new SequenceCheckedObject); | 189 new SequenceCheckedObject); |
190 | 190 |
191 // DoStuff should assert in debug builds only when called on a | 191 // DoStuff should assert in debug builds only when called on a |
192 // different thread. | 192 // different thread. |
193 PostDoStuffToOtherThread(sequence_checked_object.get()); | 193 PostDoStuffToOtherThread(sequence_checked_object.get()); |
194 other_thread()->Stop(); | 194 other_thread()->Stop(); |
195 } | 195 } |
196 | 196 |
197 #if ENABLE_SEQUENCE_CHECKER | 197 #if ENABLE_SEQUENCE_CHECKER |
198 TEST_F(SequenceCheckerTest, MethodNotAllowedOnDifferentThreadDeathTestInDebug) { | 198 TEST_F(SequenceCheckerTest, MethodNotAllowedOnDifferentThreadDeathTestInDebug) { |
199 // The default style "fast" does not support multi-threaded tests. | |
200 ::testing::FLAGS_gtest_death_test_style = "threadsafe"; | |
Reid Kleckner
2013/07/19 16:23:00
Do these get reset after each test?
tommycli
2013/07/19 16:59:57
Yes, reset after each test.
Timur Iskhodzhanov
2013/07/19 19:22:07
Why not put it into the fixture?
tommycli
2013/07/19 19:30:53
No technical reason why it can't be in fixture. Ju
| |
199 ASSERT_DEATH({ | 201 ASSERT_DEATH({ |
200 MethodOnDifferentThreadDeathTest(); | 202 MethodOnDifferentThreadDeathTest(); |
201 }, ""); | 203 }, ""); |
202 } | 204 } |
203 #else | 205 #else |
204 TEST_F(SequenceCheckerTest, MethodAllowedOnDifferentThreadDeathTestInRelease) { | 206 TEST_F(SequenceCheckerTest, MethodAllowedOnDifferentThreadDeathTestInRelease) { |
205 MethodOnDifferentThreadDeathTest(); | 207 MethodOnDifferentThreadDeathTest(); |
206 } | 208 } |
207 #endif // ENABLE_SEQUENCE_CHECKER | 209 #endif // ENABLE_SEQUENCE_CHECKER |
208 | 210 |
209 void SequenceCheckerTest::DetachThenCallFromDifferentThreadDeathTest() { | 211 void SequenceCheckerTest::DetachThenCallFromDifferentThreadDeathTest() { |
210 scoped_ptr<SequenceCheckedObject> sequence_checked_object( | 212 scoped_ptr<SequenceCheckedObject> sequence_checked_object( |
211 new SequenceCheckedObject); | 213 new SequenceCheckedObject); |
212 | 214 |
213 // DoStuff doesn't assert when called on a different thread | 215 // DoStuff doesn't assert when called on a different thread |
214 // after a call to DetachFromSequence. | 216 // after a call to DetachFromSequence. |
215 sequence_checked_object->DetachFromSequence(); | 217 sequence_checked_object->DetachFromSequence(); |
216 PostDoStuffToOtherThread(sequence_checked_object.get()); | 218 PostDoStuffToOtherThread(sequence_checked_object.get()); |
217 other_thread()->Stop(); | 219 other_thread()->Stop(); |
218 | 220 |
219 // DoStuff should assert in debug builds only after moving to | 221 // DoStuff should assert in debug builds only after moving to |
220 // another thread. | 222 // another thread. |
221 sequence_checked_object->DoStuff(); | 223 sequence_checked_object->DoStuff(); |
222 } | 224 } |
223 | 225 |
224 #if ENABLE_SEQUENCE_CHECKER | 226 #if ENABLE_SEQUENCE_CHECKER |
225 TEST_F(SequenceCheckerTest, DetachFromSequenceDeathTestInDebug) { | 227 TEST_F(SequenceCheckerTest, DetachFromSequenceDeathTestInDebug) { |
228 // The default style "fast" does not support multi-threaded tests. | |
229 ::testing::FLAGS_gtest_death_test_style = "threadsafe"; | |
226 ASSERT_DEATH({ | 230 ASSERT_DEATH({ |
227 DetachThenCallFromDifferentThreadDeathTest(); | 231 DetachThenCallFromDifferentThreadDeathTest(); |
228 }, ""); | 232 }, ""); |
229 } | 233 } |
230 #else | 234 #else |
231 TEST_F(SequenceCheckerTest, DetachFromThreadDeathTestInRelease) { | 235 TEST_F(SequenceCheckerTest, DetachFromThreadDeathTestInRelease) { |
232 DetachThenCallFromDifferentThreadDeathTest(); | 236 DetachThenCallFromDifferentThreadDeathTest(); |
233 } | 237 } |
234 #endif // ENABLE_SEQUENCE_CHECKER | 238 #endif // ENABLE_SEQUENCE_CHECKER |
235 | 239 |
236 void SequenceCheckerTest::DifferentSequenceTokensDeathTest() { | 240 void SequenceCheckerTest::DifferentSequenceTokensDeathTest() { |
237 scoped_ptr<SequenceCheckedObject> sequence_checked_object( | 241 scoped_ptr<SequenceCheckedObject> sequence_checked_object( |
238 new SequenceCheckedObject); | 242 new SequenceCheckedObject); |
239 | 243 |
240 sequence_checked_object->DetachFromSequence(); | 244 sequence_checked_object->DetachFromSequence(); |
241 PostDoStuffToWorkerPool(sequence_checked_object.get(), "A"); | 245 PostDoStuffToWorkerPool(sequence_checked_object.get(), "A"); |
242 PostDoStuffToWorkerPool(sequence_checked_object.get(), "A"); | 246 PostDoStuffToWorkerPool(sequence_checked_object.get(), "A"); |
243 PostDoStuffToWorkerPool(sequence_checked_object.get(), "B"); | 247 PostDoStuffToWorkerPool(sequence_checked_object.get(), "B"); |
244 PostDoStuffToWorkerPool(sequence_checked_object.get(), "B"); | 248 PostDoStuffToWorkerPool(sequence_checked_object.get(), "B"); |
245 pool()->FlushForTesting(); | 249 pool()->FlushForTesting(); |
246 | 250 |
247 PostDeleteToOtherThread(sequence_checked_object.Pass()); | 251 PostDeleteToOtherThread(sequence_checked_object.Pass()); |
248 other_thread()->Stop(); | 252 other_thread()->Stop(); |
249 } | 253 } |
250 | 254 |
251 #if ENABLE_SEQUENCE_CHECKER | 255 #if ENABLE_SEQUENCE_CHECKER |
252 TEST_F(SequenceCheckerTest, DifferentSequenceTokensDeathTestInDebug) { | 256 TEST_F(SequenceCheckerTest, DifferentSequenceTokensDeathTestInDebug) { |
257 // The default style "fast" does not support multi-threaded tests. | |
258 ::testing::FLAGS_gtest_death_test_style = "threadsafe"; | |
253 ASSERT_DEATH({ | 259 ASSERT_DEATH({ |
254 DifferentSequenceTokensDeathTest(); | 260 DifferentSequenceTokensDeathTest(); |
255 }, ""); | 261 }, ""); |
256 } | 262 } |
257 #else | 263 #else |
258 TEST_F(SequenceCheckerTest, | 264 TEST_F(SequenceCheckerTest, |
259 DifferentSequenceTokensDeathTestInRelease) { | 265 DifferentSequenceTokensDeathTestInRelease) { |
260 DifferentSequenceTokensDeathTest(); | 266 DifferentSequenceTokensDeathTest(); |
261 } | 267 } |
262 #endif // ENABLE_SEQUENCE_CHECKER | 268 #endif // ENABLE_SEQUENCE_CHECKER |
263 | 269 |
264 void SequenceCheckerTest::WorkerPoolAndSimpleThreadDeathTest() { | 270 void SequenceCheckerTest::WorkerPoolAndSimpleThreadDeathTest() { |
265 scoped_ptr<SequenceCheckedObject> sequence_checked_object( | 271 scoped_ptr<SequenceCheckedObject> sequence_checked_object( |
266 new SequenceCheckedObject); | 272 new SequenceCheckedObject); |
267 | 273 |
268 sequence_checked_object->DetachFromSequence(); | 274 sequence_checked_object->DetachFromSequence(); |
269 PostDoStuffToWorkerPool(sequence_checked_object.get(), "A"); | 275 PostDoStuffToWorkerPool(sequence_checked_object.get(), "A"); |
270 PostDoStuffToWorkerPool(sequence_checked_object.get(), "A"); | 276 PostDoStuffToWorkerPool(sequence_checked_object.get(), "A"); |
271 pool()->FlushForTesting(); | 277 pool()->FlushForTesting(); |
272 | 278 |
273 PostDoStuffToOtherThread(sequence_checked_object.get()); | 279 PostDoStuffToOtherThread(sequence_checked_object.get()); |
274 other_thread()->Stop(); | 280 other_thread()->Stop(); |
275 } | 281 } |
276 | 282 |
277 #if ENABLE_SEQUENCE_CHECKER | 283 #if ENABLE_SEQUENCE_CHECKER |
278 TEST_F(SequenceCheckerTest, WorkerPoolAndSimpleThreadDeathTestInDebug) { | 284 TEST_F(SequenceCheckerTest, WorkerPoolAndSimpleThreadDeathTestInDebug) { |
285 // The default style "fast" does not support multi-threaded tests. | |
286 ::testing::FLAGS_gtest_death_test_style = "threadsafe"; | |
279 ASSERT_DEATH({ | 287 ASSERT_DEATH({ |
280 WorkerPoolAndSimpleThreadDeathTest(); | 288 WorkerPoolAndSimpleThreadDeathTest(); |
281 }, ""); | 289 }, ""); |
282 } | 290 } |
283 #else | 291 #else |
284 TEST_F(SequenceCheckerTest, | 292 TEST_F(SequenceCheckerTest, |
285 WorkerPoolAndSimpleThreadDeathTestInRelease) { | 293 WorkerPoolAndSimpleThreadDeathTestInRelease) { |
286 WorkerPoolAndSimpleThreadDeathTest(); | 294 WorkerPoolAndSimpleThreadDeathTest(); |
287 } | 295 } |
288 #endif // ENABLE_SEQUENCE_CHECKER | 296 #endif // ENABLE_SEQUENCE_CHECKER |
(...skipping 12 matching lines...) Expand all Loading... | |
301 "A", | 309 "A", |
302 FROM_HERE, | 310 FROM_HERE, |
303 base::Bind(&SequenceCheckedObject::DoStuff, | 311 base::Bind(&SequenceCheckedObject::DoStuff, |
304 base::Unretained(sequence_checked_object.get()))); | 312 base::Unretained(sequence_checked_object.get()))); |
305 second_pool_owner.pool()->FlushForTesting(); | 313 second_pool_owner.pool()->FlushForTesting(); |
306 second_pool_owner.pool()->Shutdown(); | 314 second_pool_owner.pool()->Shutdown(); |
307 } | 315 } |
308 | 316 |
309 #if ENABLE_SEQUENCE_CHECKER | 317 #if ENABLE_SEQUENCE_CHECKER |
310 TEST_F(SequenceCheckerTest, TwoDifferentWorkerPoolsDeathTestInDebug) { | 318 TEST_F(SequenceCheckerTest, TwoDifferentWorkerPoolsDeathTestInDebug) { |
319 // The default style "fast" does not support multi-threaded tests. | |
320 ::testing::FLAGS_gtest_death_test_style = "threadsafe"; | |
311 ASSERT_DEATH({ | 321 ASSERT_DEATH({ |
312 TwoDifferentWorkerPoolsDeathTest(); | 322 TwoDifferentWorkerPoolsDeathTest(); |
313 }, ""); | 323 }, ""); |
314 } | 324 } |
315 #else | 325 #else |
316 TEST_F(SequenceCheckerTest, | 326 TEST_F(SequenceCheckerTest, |
317 TwoDifferentWorkerPoolsDeathTestInRelease) { | 327 TwoDifferentWorkerPoolsDeathTestInRelease) { |
318 TwoDifferentWorkerPoolsDeathTest(); | 328 TwoDifferentWorkerPoolsDeathTest(); |
319 } | 329 } |
320 #endif // ENABLE_SEQUENCE_CHECKER | 330 #endif // ENABLE_SEQUENCE_CHECKER |
321 | 331 |
322 #endif // GTEST_HAS_DEATH_TEST || !ENABLE_SEQUENCE_CHECKER | 332 #endif // GTEST_HAS_DEATH_TEST || !ENABLE_SEQUENCE_CHECKER |
323 | 333 |
324 } // namespace | 334 } // namespace |
325 | 335 |
326 } // namespace base | 336 } // namespace base |
327 | 337 |
328 // Just in case we ever get lumped together with other compilation units. | 338 // Just in case we ever get lumped together with other compilation units. |
329 #undef ENABLE_SEQUENCE_CHECKER | 339 #undef ENABLE_SEQUENCE_CHECKER |
OLD | NEW |