| OLD | NEW |
| 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/timer/timer.h" | 7 #include "base/timer/timer.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 using base::TimeDelta; | 10 using base::TimeDelta; |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 // message loop does not cause crashes if there were pending | 368 // message loop does not cause crashes if there were pending |
| 369 // timers not yet fired. It may only trigger exceptions | 369 // timers not yet fired. It may only trigger exceptions |
| 370 // if debug heap checking is enabled. | 370 // if debug heap checking is enabled. |
| 371 bool did_run = false; | 371 bool did_run = false; |
| 372 { | 372 { |
| 373 OneShotTimerTester a(&did_run); | 373 OneShotTimerTester a(&did_run); |
| 374 OneShotTimerTester b(&did_run); | 374 OneShotTimerTester b(&did_run); |
| 375 OneShotTimerTester c(&did_run); | 375 OneShotTimerTester c(&did_run); |
| 376 OneShotTimerTester d(&did_run); | 376 OneShotTimerTester d(&did_run); |
| 377 { | 377 { |
| 378 base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT); | 378 base::MessageLoop loop; |
| 379 a.Start(); | 379 a.Start(); |
| 380 b.Start(); | 380 b.Start(); |
| 381 } // MessageLoop destructs by falling out of scope. | 381 } // MessageLoop destructs by falling out of scope. |
| 382 } // OneShotTimers destruct. SHOULD NOT CRASH, of course. | 382 } // OneShotTimers destruct. SHOULD NOT CRASH, of course. |
| 383 | 383 |
| 384 EXPECT_FALSE(did_run); | 384 EXPECT_FALSE(did_run); |
| 385 } | 385 } |
| 386 | 386 |
| 387 void TimerTestCallback() { | 387 void TimerTestCallback() { |
| 388 } | 388 } |
| 389 | 389 |
| 390 TEST(TimerTest, NonRepeatIsRunning) { | 390 TEST(TimerTest, NonRepeatIsRunning) { |
| 391 { | 391 { |
| 392 base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT); | 392 base::MessageLoop loop; |
| 393 base::Timer timer(false, false); | 393 base::Timer timer(false, false); |
| 394 EXPECT_FALSE(timer.IsRunning()); | 394 EXPECT_FALSE(timer.IsRunning()); |
| 395 timer.Start(FROM_HERE, TimeDelta::FromDays(1), | 395 timer.Start(FROM_HERE, TimeDelta::FromDays(1), |
| 396 base::Bind(&TimerTestCallback)); | 396 base::Bind(&TimerTestCallback)); |
| 397 EXPECT_TRUE(timer.IsRunning()); | 397 EXPECT_TRUE(timer.IsRunning()); |
| 398 timer.Stop(); | 398 timer.Stop(); |
| 399 EXPECT_FALSE(timer.IsRunning()); | 399 EXPECT_FALSE(timer.IsRunning()); |
| 400 EXPECT_TRUE(timer.user_task().is_null()); | 400 EXPECT_TRUE(timer.user_task().is_null()); |
| 401 } | 401 } |
| 402 | 402 |
| 403 { | 403 { |
| 404 base::Timer timer(true, false); | 404 base::Timer timer(true, false); |
| 405 base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT); | 405 base::MessageLoop loop; |
| 406 EXPECT_FALSE(timer.IsRunning()); | 406 EXPECT_FALSE(timer.IsRunning()); |
| 407 timer.Start(FROM_HERE, TimeDelta::FromDays(1), | 407 timer.Start(FROM_HERE, TimeDelta::FromDays(1), |
| 408 base::Bind(&TimerTestCallback)); | 408 base::Bind(&TimerTestCallback)); |
| 409 EXPECT_TRUE(timer.IsRunning()); | 409 EXPECT_TRUE(timer.IsRunning()); |
| 410 timer.Stop(); | 410 timer.Stop(); |
| 411 EXPECT_FALSE(timer.IsRunning()); | 411 EXPECT_FALSE(timer.IsRunning()); |
| 412 ASSERT_FALSE(timer.user_task().is_null()); | 412 ASSERT_FALSE(timer.user_task().is_null()); |
| 413 timer.Reset(); | 413 timer.Reset(); |
| 414 EXPECT_TRUE(timer.IsRunning()); | 414 EXPECT_TRUE(timer.IsRunning()); |
| 415 } | 415 } |
| 416 } | 416 } |
| 417 | 417 |
| 418 TEST(TimerTest, NonRepeatMessageLoopDeath) { | 418 TEST(TimerTest, NonRepeatMessageLoopDeath) { |
| 419 base::Timer timer(false, false); | 419 base::Timer timer(false, false); |
| 420 { | 420 { |
| 421 base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT); | 421 base::MessageLoop loop; |
| 422 EXPECT_FALSE(timer.IsRunning()); | 422 EXPECT_FALSE(timer.IsRunning()); |
| 423 timer.Start(FROM_HERE, TimeDelta::FromDays(1), | 423 timer.Start(FROM_HERE, TimeDelta::FromDays(1), |
| 424 base::Bind(&TimerTestCallback)); | 424 base::Bind(&TimerTestCallback)); |
| 425 EXPECT_TRUE(timer.IsRunning()); | 425 EXPECT_TRUE(timer.IsRunning()); |
| 426 } | 426 } |
| 427 EXPECT_FALSE(timer.IsRunning()); | 427 EXPECT_FALSE(timer.IsRunning()); |
| 428 EXPECT_TRUE(timer.user_task().is_null()); | 428 EXPECT_TRUE(timer.user_task().is_null()); |
| 429 } | 429 } |
| 430 | 430 |
| 431 TEST(TimerTest, RetainRepeatIsRunning) { | 431 TEST(TimerTest, RetainRepeatIsRunning) { |
| 432 base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT); | 432 base::MessageLoop loop; |
| 433 base::Timer timer(FROM_HERE, TimeDelta::FromDays(1), | 433 base::Timer timer(FROM_HERE, TimeDelta::FromDays(1), |
| 434 base::Bind(&TimerTestCallback), true); | 434 base::Bind(&TimerTestCallback), true); |
| 435 EXPECT_FALSE(timer.IsRunning()); | 435 EXPECT_FALSE(timer.IsRunning()); |
| 436 timer.Reset(); | 436 timer.Reset(); |
| 437 EXPECT_TRUE(timer.IsRunning()); | 437 EXPECT_TRUE(timer.IsRunning()); |
| 438 timer.Stop(); | 438 timer.Stop(); |
| 439 EXPECT_FALSE(timer.IsRunning()); | 439 EXPECT_FALSE(timer.IsRunning()); |
| 440 timer.Reset(); | 440 timer.Reset(); |
| 441 EXPECT_TRUE(timer.IsRunning()); | 441 EXPECT_TRUE(timer.IsRunning()); |
| 442 } | 442 } |
| 443 | 443 |
| 444 TEST(TimerTest, RetainNonRepeatIsRunning) { | 444 TEST(TimerTest, RetainNonRepeatIsRunning) { |
| 445 base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT); | 445 base::MessageLoop loop; |
| 446 base::Timer timer(FROM_HERE, TimeDelta::FromDays(1), | 446 base::Timer timer(FROM_HERE, TimeDelta::FromDays(1), |
| 447 base::Bind(&TimerTestCallback), false); | 447 base::Bind(&TimerTestCallback), false); |
| 448 EXPECT_FALSE(timer.IsRunning()); | 448 EXPECT_FALSE(timer.IsRunning()); |
| 449 timer.Reset(); | 449 timer.Reset(); |
| 450 EXPECT_TRUE(timer.IsRunning()); | 450 EXPECT_TRUE(timer.IsRunning()); |
| 451 timer.Stop(); | 451 timer.Stop(); |
| 452 EXPECT_FALSE(timer.IsRunning()); | 452 EXPECT_FALSE(timer.IsRunning()); |
| 453 timer.Reset(); | 453 timer.Reset(); |
| 454 EXPECT_TRUE(timer.IsRunning()); | 454 EXPECT_TRUE(timer.IsRunning()); |
| 455 } | 455 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 470 } | 470 } |
| 471 | 471 |
| 472 void SetCallbackHappened2() { | 472 void SetCallbackHappened2() { |
| 473 g_callback_happened2 = true; | 473 g_callback_happened2 = true; |
| 474 base::MessageLoop::current()->QuitWhenIdle(); | 474 base::MessageLoop::current()->QuitWhenIdle(); |
| 475 } | 475 } |
| 476 | 476 |
| 477 TEST(TimerTest, ContinuationStopStart) { | 477 TEST(TimerTest, ContinuationStopStart) { |
| 478 { | 478 { |
| 479 ClearAllCallbackHappened(); | 479 ClearAllCallbackHappened(); |
| 480 base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT); | 480 base::MessageLoop loop; |
| 481 base::Timer timer(false, false); | 481 base::Timer timer(false, false); |
| 482 timer.Start(FROM_HERE, TimeDelta::FromMilliseconds(10), | 482 timer.Start(FROM_HERE, TimeDelta::FromMilliseconds(10), |
| 483 base::Bind(&SetCallbackHappened1)); | 483 base::Bind(&SetCallbackHappened1)); |
| 484 timer.Stop(); | 484 timer.Stop(); |
| 485 timer.Start(FROM_HERE, TimeDelta::FromMilliseconds(40), | 485 timer.Start(FROM_HERE, TimeDelta::FromMilliseconds(40), |
| 486 base::Bind(&SetCallbackHappened2)); | 486 base::Bind(&SetCallbackHappened2)); |
| 487 base::MessageLoop::current()->Run(); | 487 base::MessageLoop::current()->Run(); |
| 488 EXPECT_FALSE(g_callback_happened1); | 488 EXPECT_FALSE(g_callback_happened1); |
| 489 EXPECT_TRUE(g_callback_happened2); | 489 EXPECT_TRUE(g_callback_happened2); |
| 490 } | 490 } |
| 491 } | 491 } |
| 492 | 492 |
| 493 TEST(TimerTest, ContinuationReset) { | 493 TEST(TimerTest, ContinuationReset) { |
| 494 { | 494 { |
| 495 ClearAllCallbackHappened(); | 495 ClearAllCallbackHappened(); |
| 496 base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT); | 496 base::MessageLoop loop; |
| 497 base::Timer timer(false, false); | 497 base::Timer timer(false, false); |
| 498 timer.Start(FROM_HERE, TimeDelta::FromMilliseconds(10), | 498 timer.Start(FROM_HERE, TimeDelta::FromMilliseconds(10), |
| 499 base::Bind(&SetCallbackHappened1)); | 499 base::Bind(&SetCallbackHappened1)); |
| 500 timer.Reset(); | 500 timer.Reset(); |
| 501 // Since Reset happened before task ran, the user_task must not be cleared: | 501 // Since Reset happened before task ran, the user_task must not be cleared: |
| 502 ASSERT_FALSE(timer.user_task().is_null()); | 502 ASSERT_FALSE(timer.user_task().is_null()); |
| 503 base::MessageLoop::current()->Run(); | 503 base::MessageLoop::current()->Run(); |
| 504 EXPECT_TRUE(g_callback_happened1); | 504 EXPECT_TRUE(g_callback_happened1); |
| 505 } | 505 } |
| 506 } | 506 } |
| 507 | 507 |
| 508 } // namespace | 508 } // namespace |
| OLD | NEW |