1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/timer/mock_timer.h" 6 7 #include "testing/gtest/include/gtest/gtest.h" 8 9 namespace { 10 11 void CallMeMaybe(int *number) { 12 (*number)++; 13 } 14 15 TEST(MockTimerTest, FiresOnce) { 16 int calls = 0; 17 base::MockTimer timer(false, false); 18 base::TimeDelta delay = base::TimeDelta::FromSeconds(2); 19 timer.Start(FROM_HERE, delay, 20 base::Bind(&CallMeMaybe, 21 base::Unretained(&calls))); 22 EXPECT_EQ(delay, timer.GetCurrentDelay()); 23 EXPECT_TRUE(timer.IsRunning()); 24 timer.Fire(); 25 EXPECT_FALSE(timer.IsRunning()); 26 EXPECT_EQ(1, calls); 27 } 28 29 TEST(MockTimerTest, FiresRepeatedly) { 30 int calls = 0; 31 base::MockTimer timer(true, true); 32 base::TimeDelta delay = base::TimeDelta::FromSeconds(2); 33 timer.Start(FROM_HERE, delay, 34 base::Bind(&CallMeMaybe, 35 base::Unretained(&calls))); 36 timer.Fire(); 37 EXPECT_TRUE(timer.IsRunning()); 38 timer.Fire(); 39 timer.Fire(); 40 EXPECT_TRUE(timer.IsRunning()); 41 EXPECT_EQ(3, calls); 42 } 43 44 TEST(MockTimerTest, Stops) { 45 int calls = 0; 46 base::MockTimer timer(true, true); 47 base::TimeDelta delay = base::TimeDelta::FromSeconds(2); 48 timer.Start(FROM_HERE, delay, 49 base::Bind(&CallMeMaybe, 50 base::Unretained(&calls))); 51 EXPECT_TRUE(timer.IsRunning()); 52 timer.Stop(); 53 EXPECT_FALSE(timer.IsRunning()); 54 } 55 56 class HasWeakPtr : public base::SupportsWeakPtr<HasWeakPtr> { 57 public: 58 HasWeakPtr() {} 59 virtual ~HasWeakPtr() {} 60 61 private: 62 DISALLOW_COPY_AND_ASSIGN(HasWeakPtr); 63 }; 64 65 void DoNothingWithWeakPtr(HasWeakPtr* has_weak_ptr) { 66 } 67 68 TEST(MockTimerTest, DoesNotRetainClosure) { 69 HasWeakPtr *has_weak_ptr = new HasWeakPtr(); 70 base::WeakPtr<HasWeakPtr> weak_ptr(has_weak_ptr->AsWeakPtr()); 71 base::MockTimer timer(false, false); 72 base::TimeDelta delay = base::TimeDelta::FromSeconds(2); 73 ASSERT_TRUE(weak_ptr.get()); 74 timer.Start(FROM_HERE, delay, 75 base::Bind(&DoNothingWithWeakPtr, 76 base::Owned(has_weak_ptr))); 77 ASSERT_TRUE(weak_ptr.get()); 78 timer.Fire(); 79 ASSERT_FALSE(weak_ptr.get()); 80 } 81 82 } // namespace 83