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