blob: 61716a4731fd7fe75ce921f7c23508d616fd4c00 [file] [log] [blame]
ellyjones@chromium.orgca61fd92014-03-14 07:04:39 +09001// 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
avia6a6a682015-12-27 07:15:14 +09007#include "base/macros.h"
ellyjones@chromium.orgca61fd92014-03-14 07:04:39 +09008#include "testing/gtest/include/gtest/gtest.h"
9
10namespace {
11
12void CallMeMaybe(int *number) {
13 (*number)++;
14}
15
16TEST(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
30TEST(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
45TEST(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
57class HasWeakPtr : public base::SupportsWeakPtr<HasWeakPtr> {
58 public:
Chris Watkinsd155d9f2017-11-29 16:16:38 +090059 HasWeakPtr() = default;
60 virtual ~HasWeakPtr() = default;
ellyjones@chromium.orgca61fd92014-03-14 07:04:39 +090061
62 private:
63 DISALLOW_COPY_AND_ASSIGN(HasWeakPtr);
64};
65
ellyjones@chromium.orgca61fd92014-03-14 07:04:39 +090066TEST(MockTimerTest, DoesNotRetainClosure) {
67 HasWeakPtr *has_weak_ptr = new HasWeakPtr();
68 base::WeakPtr<HasWeakPtr> weak_ptr(has_weak_ptr->AsWeakPtr());
69 base::MockTimer timer(false, false);
70 base::TimeDelta delay = base::TimeDelta::FromSeconds(2);
71 ASSERT_TRUE(weak_ptr.get());
72 timer.Start(FROM_HERE, delay,
Peter Kasting24efe5e2018-02-24 09:03:01 +090073 base::Bind(base::DoNothing::Repeatedly<HasWeakPtr*>(),
ellyjones@chromium.orgca61fd92014-03-14 07:04:39 +090074 base::Owned(has_weak_ptr)));
75 ASSERT_TRUE(weak_ptr.get());
76 timer.Fire();
77 ASSERT_FALSE(weak_ptr.get());
78}
79
80} // namespace