Thanks to visit codestin.com
Credit goes to chromium.googlesource.com

blob: c3fe4911bed590d49d56f9c25581cfd9a93a2d99 [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2014 The Chromium Authors
[email protected]9df013b2014-03-13 22:04:392// 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
Avi Drissman63e1f992023-01-13 18:54:437#include "base/functional/bind.h"
[email protected]9df013b2014-03-13 22:04:398#include "testing/gtest/include/gtest/gtest.h"
9
10namespace {
11
Peter Kasting134ef9af2024-12-28 02:30:0912void CallMeMaybe(int* number) {
[email protected]9df013b2014-03-13 22:04:3913 (*number)++;
14}
15
16TEST(MockTimerTest, FiresOnce) {
17 int calls = 0;
tzikfacff252018-07-04 07:55:5218 base::MockOneShotTimer timer;
Peter Kastinge5a38ed2021-10-02 03:06:3519 base::TimeDelta delay = base::Seconds(2);
[email protected]9df013b2014-03-13 22:04:3920 timer.Start(FROM_HERE, delay,
kylechar83fb51e52019-03-14 15:30:4321 base::BindOnce(&CallMeMaybe, base::Unretained(&calls)));
[email protected]9df013b2014-03-13 22:04:3922 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
29TEST(MockTimerTest, FiresRepeatedly) {
30 int calls = 0;
tzikfacff252018-07-04 07:55:5231 base::MockRepeatingTimer timer;
Peter Kastinge5a38ed2021-10-02 03:06:3532 base::TimeDelta delay = base::Seconds(2);
[email protected]9df013b2014-03-13 22:04:3933 timer.Start(FROM_HERE, delay,
kylechar83fb51e52019-03-14 15:30:4334 base::BindRepeating(&CallMeMaybe, base::Unretained(&calls)));
[email protected]9df013b2014-03-13 22:04:3935 timer.Fire();
36 EXPECT_TRUE(timer.IsRunning());
37 timer.Fire();
38 timer.Fire();
39 EXPECT_TRUE(timer.IsRunning());
40 EXPECT_EQ(3, calls);
41}
42
43TEST(MockTimerTest, Stops) {
44 int calls = 0;
tzikfacff252018-07-04 07:55:5245 base::MockRepeatingTimer timer;
Peter Kastinge5a38ed2021-10-02 03:06:3546 base::TimeDelta delay = base::Seconds(2);
[email protected]9df013b2014-03-13 22:04:3947 timer.Start(FROM_HERE, delay,
kylechar83fb51e52019-03-14 15:30:4348 base::BindRepeating(&CallMeMaybe, base::Unretained(&calls)));
[email protected]9df013b2014-03-13 22:04:3949 EXPECT_TRUE(timer.IsRunning());
50 timer.Stop();
51 EXPECT_FALSE(timer.IsRunning());
52}
53
Shintaro Kawamuraccefc5a2023-05-08 16:46:1854TEST(MockOneShotTimerTest, FireNow) {
55 int calls = 0;
56 base::MockOneShotTimer timer;
57 base::TimeDelta delay = base::Seconds(2);
58 timer.Start(FROM_HERE, delay,
59 base::BindOnce(&CallMeMaybe, base::Unretained(&calls)));
60 EXPECT_EQ(delay, timer.GetCurrentDelay());
61 EXPECT_TRUE(timer.IsRunning());
62 timer.FireNow();
63 EXPECT_FALSE(timer.IsRunning());
64 EXPECT_EQ(1, calls);
65}
66
David Bertoni602700a2024-01-09 23:15:4067class HasWeakPtr {
[email protected]9df013b2014-03-13 22:04:3968 public:
Chris Watkinsbb7211c2017-11-29 07:16:3869 HasWeakPtr() = default;
[email protected]9df013b2014-03-13 22:04:3970
Peter Boström7319bbd2021-09-15 22:59:3871 HasWeakPtr(const HasWeakPtr&) = delete;
72 HasWeakPtr& operator=(const HasWeakPtr&) = delete;
73
74 virtual ~HasWeakPtr() = default;
David Bertoni602700a2024-01-09 23:15:4075
76 base::WeakPtr<HasWeakPtr> AsWeakPtr() {
77 return weak_ptr_factory_.GetWeakPtr();
78 }
79
80 private:
81 base::WeakPtrFactory<HasWeakPtr> weak_ptr_factory_{this};
[email protected]9df013b2014-03-13 22:04:3982};
83
[email protected]9df013b2014-03-13 22:04:3984TEST(MockTimerTest, DoesNotRetainClosure) {
Peter Kasting134ef9af2024-12-28 02:30:0985 HasWeakPtr* has_weak_ptr = new HasWeakPtr();
[email protected]9df013b2014-03-13 22:04:3986 base::WeakPtr<HasWeakPtr> weak_ptr(has_weak_ptr->AsWeakPtr());
tzikfacff252018-07-04 07:55:5287 base::MockOneShotTimer timer;
Peter Kastinge5a38ed2021-10-02 03:06:3588 base::TimeDelta delay = base::Seconds(2);
[email protected]9df013b2014-03-13 22:04:3989 ASSERT_TRUE(weak_ptr.get());
90 timer.Start(FROM_HERE, delay,
Daniel Chengb7b2f5b2021-09-25 21:37:1991 base::BindOnce([](HasWeakPtr*) {}, base::Owned(has_weak_ptr)));
[email protected]9df013b2014-03-13 22:04:3992 ASSERT_TRUE(weak_ptr.get());
93 timer.Fire();
94 ASSERT_FALSE(weak_ptr.get());
95}
96
97} // namespace