Chromium Code Reviews| 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 |