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 #ifndef BASE_TIMER_MOCK_TIMER_H_
6 #define BASE_TIMER_MOCK_TIMER_H_
7 
8 #include "base/test/simple_test_tick_clock.h"
9 #include "base/timer/timer.h"
10 
11 namespace base {
12 
13 class TestSimpleTaskRunner;
14 
15 // A mock implementation of base::Timer which requires being explicitly
16 // Fire()'d.
17 // Prefer using ScopedTaskEnvironment::MOCK_TIME + FastForward*() to this when
18 // possible.
19 class MockOneShotTimer : public OneShotTimer {
20  public:
21   MockOneShotTimer();
22   ~MockOneShotTimer() override;
23 
24   // Testing method.
25   void Fire();
26 
27  private:
28   // Timer implementation.
29   // MockOneShotTimer doesn't support SetTaskRunner. Do not use this.
30   void SetTaskRunner(scoped_refptr<SequencedTaskRunner> task_runner) override;
31 
32   SimpleTestTickClock clock_;
33   scoped_refptr<TestSimpleTaskRunner> test_task_runner_;
34 };
35 
36 // See MockOneShotTimer's comment. Prefer using
37 // ScopedTaskEnvironment::MOCK_TIME.
38 class MockRepeatingTimer : public RepeatingTimer {
39  public:
40   MockRepeatingTimer();
41   ~MockRepeatingTimer() override;
42 
43   // Testing method.
44   void Fire();
45 
46  private:
47   // Timer implementation.
48   // MockRepeatingTimer doesn't support SetTaskRunner. Do not use this.
49   void SetTaskRunner(scoped_refptr<SequencedTaskRunner> task_runner) override;
50 
51   SimpleTestTickClock clock_;
52   scoped_refptr<TestSimpleTaskRunner> test_task_runner_;
53 };
54 
55 // See MockOneShotTimer's comment. Prefer using
56 // ScopedTaskEnvironment::MOCK_TIME.
57 class MockRetainingOneShotTimer : public RetainingOneShotTimer {
58  public:
59   MockRetainingOneShotTimer();
60   ~MockRetainingOneShotTimer() override;
61 
62   // Testing method.
63   void Fire();
64 
65  private:
66   // Timer implementation.
67   // MockRetainingOneShotTimer doesn't support SetTaskRunner. Do not use this.
68   void SetTaskRunner(scoped_refptr<SequencedTaskRunner> task_runner) override;
69 
70   SimpleTestTickClock clock_;
71   scoped_refptr<TestSimpleTaskRunner> test_task_runner_;
72 };
73 
74 }  // namespace base
75 
76 #endif  // BASE_TIMER_MOCK_TIMER_H_
77