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 | |
695 namespace { | 626 namespace { |
696 | 627 |
697 bool g_callback_happened1 = false; | 628 bool g_callback_happened1 = false; |
698 bool g_callback_happened2 = false; | 629 bool g_callback_happened2 = false; |
699 | 630 |
700 void ClearAllCallbackHappened() { | 631 void ClearAllCallbackHappened() { |
701 g_callback_happened1 = false; | 632 g_callback_happened1 = false; |
702 g_callback_happened2 = false; | 633 g_callback_happened2 = false; |
703 } | 634 } |
704 | 635 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 Bind(&SetCallbackHappened1)); | 670 Bind(&SetCallbackHappened1)); |
740 timer.Reset(); | 671 timer.Reset(); |
741 // Since Reset happened before task ran, the user_task must not be cleared: | 672 // Since Reset happened before task ran, the user_task must not be cleared: |
742 ASSERT_FALSE(timer.user_task().is_null()); | 673 ASSERT_FALSE(timer.user_task().is_null()); |
743 RunLoop().Run(); | 674 RunLoop().Run(); |
744 EXPECT_TRUE(g_callback_happened1); | 675 EXPECT_TRUE(g_callback_happened1); |
745 } | 676 } |
746 } | 677 } |
747 | 678 |
748 } // namespace base | 679 } // namespace base |
OLD | NEW |