| // Copyright 2014 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "base/timer/mock_timer.h" | |
| #include "base/macros.h" | |
| #include "testing/gtest/include/gtest/gtest.h" | |
| namespace { | |
| void CallMeMaybe(int *number) { | |
| (*number)++; | |
| } | |
| TEST(MockTimerTest, FiresOnce) { | |
| int calls = 0; | |
| base::MockOneShotTimer timer; | |
| base::TimeDelta delay = base::TimeDelta::FromSeconds(2); | |
| timer.Start(FROM_HERE, delay, | |
| base::Bind(&CallMeMaybe, | |
| base::Unretained(&calls))); | |
| EXPECT_EQ(delay, timer.GetCurrentDelay()); | |
| EXPECT_TRUE(timer.IsRunning()); | |
| timer.Fire(); | |
| EXPECT_FALSE(timer.IsRunning()); | |
| EXPECT_EQ(1, calls); | |
| } | |
| TEST(MockTimerTest, FiresRepeatedly) { | |
| int calls = 0; | |
| base::MockRepeatingTimer timer; | |
| base::TimeDelta delay = base::TimeDelta::FromSeconds(2); | |
| timer.Start(FROM_HERE, delay, | |
| base::Bind(&CallMeMaybe, | |
| base::Unretained(&calls))); | |
| timer.Fire(); | |
| EXPECT_TRUE(timer.IsRunning()); | |
| timer.Fire(); | |
| timer.Fire(); | |
| EXPECT_TRUE(timer.IsRunning()); | |
| EXPECT_EQ(3, calls); | |
| } | |
| TEST(MockTimerTest, Stops) { | |
| int calls = 0; | |
| base::MockRepeatingTimer timer; | |
| base::TimeDelta delay = base::TimeDelta::FromSeconds(2); | |
| timer.Start(FROM_HERE, delay, | |
| base::Bind(&CallMeMaybe, | |
| base::Unretained(&calls))); | |
| EXPECT_TRUE(timer.IsRunning()); | |
| timer.Stop(); | |
| EXPECT_FALSE(timer.IsRunning()); | |
| } | |
| class HasWeakPtr : public base::SupportsWeakPtr<HasWeakPtr> { | |
| public: | |
| HasWeakPtr() = default; | |
| virtual ~HasWeakPtr() = default; | |
| private: | |
| DISALLOW_COPY_AND_ASSIGN(HasWeakPtr); | |
| }; | |
| TEST(MockTimerTest, DoesNotRetainClosure) { | |
| HasWeakPtr *has_weak_ptr = new HasWeakPtr(); | |
| base::WeakPtr<HasWeakPtr> weak_ptr(has_weak_ptr->AsWeakPtr()); | |
| base::MockOneShotTimer timer; | |
| base::TimeDelta delay = base::TimeDelta::FromSeconds(2); | |
| ASSERT_TRUE(weak_ptr.get()); | |
| timer.Start(FROM_HERE, delay, | |
| base::Bind(base::DoNothing::Repeatedly<HasWeakPtr*>(), | |
| base::Owned(has_weak_ptr))); | |
| ASSERT_TRUE(weak_ptr.get()); | |
| timer.Fire(); | |
| ASSERT_FALSE(weak_ptr.get()); | |
| } | |
| } // namespace |