2
* Copyright © 2014 Canonical Ltd.
2
* Copyright © 2014-2015 Canonical Ltd.
4
4
* This program is free software: you can redistribute it and/or modify it
5
5
* under the terms of the GNU General Public License version 3,
14
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
16
* Authored by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
17
* Alberto Aguirre <alberto.aguirre@canonical.com>
19
20
#include "mir_test_doubles/mock_timer.h"
27
28
class FakeAlarm : public mir::time::Alarm
30
FakeAlarm(std::function<void(void)> callback, std::shared_ptr<mt::FakeClock> const& clock);
31
FakeAlarm(std::function<void()> const& callback,
32
std::function<void()> const& lock,
33
std::function<void()> const& unlock,
34
std::shared_ptr<mt::FakeClock> const& clock);
31
35
~FakeAlarm() override;
40
44
struct InternalState
42
explicit InternalState(std::function<void(void)> callback);
46
explicit InternalState(std::function<void()> const& callback,
47
std::function<void()> const& lock,
48
std::function<void()> const& unlock);
44
std::function<void(void)> const callback;
50
std::function<void()> const callback;
51
std::function<void()> const lock;
52
std::function<void()> const unlock;
45
53
mt::FakeClock::time_point threshold;
51
59
std::shared_ptr<mt::FakeClock> const clock;
54
FakeAlarm::InternalState::InternalState(std::function<void(void)> callback)
55
: state{mir::time::Alarm::pending}, callback{callback}
62
FakeAlarm::InternalState::InternalState(
63
std::function<void()> const& callback,
64
std::function<void()> const& lock,
65
std::function<void()> const& unlock)
66
: state{mir::time::Alarm::pending}, callback{callback}, lock{lock}, unlock{unlock}
59
FakeAlarm::FakeAlarm(std::function<void(void)> callback, std::shared_ptr<mt::FakeClock> const& clock)
60
: internal_state{std::make_shared<InternalState>(callback)}, clock{clock}
71
std::function<void()> const& callback,
72
std::function<void()> const& lock,
73
std::function<void()> const& unlock,
74
std::shared_ptr<mt::FakeClock> const& clock)
75
: internal_state{std::make_shared<InternalState>(callback, lock, unlock)}, clock{clock}
130
147
std::unique_ptr<mir::time::Alarm> mtd::FakeTimer::notify_in(std::chrono::milliseconds delay,
131
std::function<void(void)> callback)
148
std::function<void()> const& callback)
133
auto alarm = std::unique_ptr<mir::time::Alarm>{new FakeAlarm{callback, clock}};
150
auto alarm = std::unique_ptr<mir::time::Alarm>{new FakeAlarm{callback, []{}, []{}, clock}};
134
151
alarm->reschedule_in(delay);
135
152
return std::move(alarm);
138
155
std::unique_ptr<mir::time::Alarm> mtd::FakeTimer::notify_at(time::Timestamp time_point,
139
std::function<void(void)> callback)
156
std::function<void()> const& callback)
141
auto alarm = std::unique_ptr<mir::time::Alarm>{new FakeAlarm{callback, clock}};
158
auto alarm = std::unique_ptr<mir::time::Alarm>{new FakeAlarm{callback, []{}, []{}, clock}};
142
159
alarm->reschedule_for(time_point);
143
160
return std::move(alarm);
146
std::unique_ptr<mir::time::Alarm> mir::test::doubles::FakeTimer::create_alarm(std::function<void(void)> callback)
148
return std::unique_ptr<mir::time::Alarm>{new FakeAlarm{callback, clock}};
163
std::unique_ptr<mir::time::Alarm> mir::test::doubles::FakeTimer::create_alarm(std::function<void()> const& callback)
165
return std::unique_ptr<mir::time::Alarm>{new FakeAlarm{callback, []{}, []{}, clock}};
168
std::unique_ptr<mir::time::Alarm> mir::test::doubles::FakeTimer::create_alarm(std::function<void()> const& callback,
169
std::function<void()> const& lock, std::function<void()> const& unlock)
171
return std::unique_ptr<mir::time::Alarm>{new FakeAlarm{callback, lock, unlock, clock}};