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/timer/timer.h" | 5 #include "base/timer/timer.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
616 false); | 616 false); |
617 EXPECT_FALSE(timer.IsRunning()); | 617 EXPECT_FALSE(timer.IsRunning()); |
618 timer.Reset(); | 618 timer.Reset(); |
619 EXPECT_TRUE(timer.IsRunning()); | 619 EXPECT_TRUE(timer.IsRunning()); |
620 timer.Stop(); | 620 timer.Stop(); |
621 EXPECT_FALSE(timer.IsRunning()); | 621 EXPECT_FALSE(timer.IsRunning()); |
622 timer.Reset(); | 622 timer.Reset(); |
623 EXPECT_TRUE(timer.IsRunning()); | 623 EXPECT_TRUE(timer.IsRunning()); |
624 } | 624 } |
625 | 625 |
| 626 //----------------------------------------------------------------------------- |
| 627 |
| 628 TEST(TimerTest, RetainRepeatGetTimeToCallback) { |
| 629 scoped_refptr<TestMockTimeTaskRunner> task_runner( |
| 630 new TestMockTimeTaskRunner(Time::Now(), TimeTicks::Now())); |
| 631 std::unique_ptr<TickClock> tick_clock(task_runner->GetMockTickClock()); |
| 632 MessageLoop message_loop; |
| 633 message_loop.SetTaskRunner(task_runner); |
| 634 Timer timer(true, true, tick_clock.get()); |
| 635 timer.Start(FROM_HERE, TimeDelta::FromSeconds(2), Bind(&TimerTestCallback)); |
| 636 EXPECT_EQ(TimeDelta::FromSeconds(2), timer.GetTimeToCallback()); |
| 637 task_runner->FastForwardBy(TimeDelta::FromSeconds(2)); |
| 638 EXPECT_EQ(TimeDelta::FromSeconds(2), timer.GetTimeToCallback()); |
| 639 timer.Stop(); |
| 640 task_runner->FastForwardBy(TimeDelta::FromSeconds(2)); |
| 641 EXPECT_EQ(TimeDelta::FromSeconds(0), timer.GetTimeToCallback()); |
| 642 task_runner->FastForwardBy(TimeDelta::FromSeconds(2)); |
| 643 EXPECT_EQ(TimeDelta::FromSeconds(-2), timer.GetTimeToCallback()); |
| 644 } |
| 645 |
| 646 TEST(TimerTest, RetainNonRepeatGetTimeToCallback) { |
| 647 scoped_refptr<TestMockTimeTaskRunner> task_runner( |
| 648 new TestMockTimeTaskRunner(Time::Now(), TimeTicks::Now())); |
| 649 std::unique_ptr<TickClock> tick_clock(task_runner->GetMockTickClock()); |
| 650 MessageLoop message_loop; |
| 651 message_loop.SetTaskRunner(task_runner); |
| 652 Timer timer(true, false, tick_clock.get()); |
| 653 timer.Start(FROM_HERE, TimeDelta::FromSeconds(2), Bind(&TimerTestCallback)); |
| 654 EXPECT_EQ(TimeDelta::FromSeconds(2), timer.GetTimeToCallback()); |
| 655 task_runner->FastForwardBy(TimeDelta::FromSeconds(3)); |
| 656 EXPECT_EQ(TimeDelta::FromSeconds(-1), timer.GetTimeToCallback()); |
| 657 } |
| 658 |
| 659 TEST(TimerTest, OneShotTimerWithTickClockGetTimeToCallback) { |
| 660 scoped_refptr<TestMockTimeTaskRunner> task_runner( |
| 661 new TestMockTimeTaskRunner(Time::Now(), TimeTicks::Now())); |
| 662 std::unique_ptr<TickClock> tick_clock(task_runner->GetMockTickClock()); |
| 663 MessageLoop message_loop; |
| 664 message_loop.SetTaskRunner(task_runner); |
| 665 Receiver receiver; |
| 666 OneShotTimer timer(tick_clock.get()); |
| 667 EXPECT_EQ(TimeDelta::Max(), timer.GetTimeToCallback()); |
| 668 timer.Start(FROM_HERE, TimeDelta::FromSeconds(2), |
| 669 Bind(&Receiver::OnCalled, Unretained(&receiver))); |
| 670 EXPECT_EQ(TimeDelta::FromSeconds(2), timer.GetTimeToCallback()); |
| 671 task_runner->FastForwardBy(TimeDelta::FromSeconds(1)); |
| 672 EXPECT_EQ(TimeDelta::FromSeconds(1), timer.GetTimeToCallback()); |
| 673 task_runner->FastForwardBy(TimeDelta::FromSeconds(1)); |
| 674 EXPECT_TRUE(receiver.WasCalled()); |
| 675 EXPECT_EQ(TimeDelta::Max(), timer.GetTimeToCallback()); |
| 676 } |
| 677 |
| 678 TEST(TimerTest, RepeatingTimerWithTickClockTimeToCallback) { |
| 679 scoped_refptr<TestMockTimeTaskRunner> task_runner( |
| 680 new TestMockTimeTaskRunner(Time::Now(), TimeTicks::Now())); |
| 681 std::unique_ptr<TickClock> tick_clock(task_runner->GetMockTickClock()); |
| 682 MessageLoop message_loop; |
| 683 message_loop.SetTaskRunner(task_runner); |
| 684 Receiver receiver; |
| 685 RepeatingTimer timer(tick_clock.get()); |
| 686 timer.Start(FROM_HERE, TimeDelta::FromSeconds(2), |
| 687 Bind(&Receiver::OnCalled, Unretained(&receiver))); |
| 688 EXPECT_EQ(TimeDelta::FromSeconds(2), timer.GetTimeToCallback()); |
| 689 task_runner->FastForwardBy(TimeDelta::FromSeconds(1)); |
| 690 EXPECT_EQ(TimeDelta::FromSeconds(1), timer.GetTimeToCallback()); |
| 691 task_runner->FastForwardBy(TimeDelta::FromSeconds(1)); |
| 692 EXPECT_EQ(TimeDelta::FromSeconds(2), timer.GetTimeToCallback()); |
| 693 } |
| 694 |
626 namespace { | 695 namespace { |
627 | 696 |
628 bool g_callback_happened1 = false; | 697 bool g_callback_happened1 = false; |
629 bool g_callback_happened2 = false; | 698 bool g_callback_happened2 = false; |
630 | 699 |
631 void ClearAllCallbackHappened() { | 700 void ClearAllCallbackHappened() { |
632 g_callback_happened1 = false; | 701 g_callback_happened1 = false; |
633 g_callback_happened2 = false; | 702 g_callback_happened2 = false; |
634 } | 703 } |
635 | 704 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
670 Bind(&SetCallbackHappened1)); | 739 Bind(&SetCallbackHappened1)); |
671 timer.Reset(); | 740 timer.Reset(); |
672 // Since Reset happened before task ran, the user_task must not be cleared: | 741 // Since Reset happened before task ran, the user_task must not be cleared: |
673 ASSERT_FALSE(timer.user_task().is_null()); | 742 ASSERT_FALSE(timer.user_task().is_null()); |
674 RunLoop().Run(); | 743 RunLoop().Run(); |
675 EXPECT_TRUE(g_callback_happened1); | 744 EXPECT_TRUE(g_callback_happened1); |
676 } | 745 } |
677 } | 746 } |
678 | 747 |
679 } // namespace base | 748 } // namespace base |
OLD | NEW |