2
* Copyright © 2014 Canonical Ltd.
4
* This program is free software: you can redistribute it and/or modify it
5
* under the terms of the GNU General Public License version 3,
6
* as published by the Free Software Foundation.
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
13
* You should have received a copy of the GNU General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
16
* Authored by: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
19
#ifndef MIR_TEST_FAKE_CLOCK_H_
20
#define MIR_TEST_FAKE_CLOCK_H_
31
* @brief An invasive time source for Mocks/Stubs/Fakes that depend on timing
36
typedef std::chrono::nanoseconds duration;
37
typedef duration::rep rep;
38
typedef duration::period period;
39
typedef std::chrono::time_point<FakeClock, duration> time_point;
41
static constexpr bool is_steady = false;
42
time_point now() const;
46
* \brief Advance the fake clock
47
* \note Advancing by a negative duration will move the clock backwards
49
template<typename rep, typename period>
50
void advance_time(std::chrono::duration<rep, period> by)
52
advance_time_ns(std::chrono::duration_cast<std::chrono::nanoseconds>(by));
56
* \brief Register an event callback when the time is changed
57
* \param cb Function to call when the time is changed.
58
* This function is called with the new time.
59
* If the function returns false, it will no longer be called
60
* on subsequent time changes.
62
void register_time_change_callback(std::function<bool(time_point)> cb);
64
void advance_time_ns(std::chrono::nanoseconds by);
65
std::chrono::nanoseconds current_time;
66
std::list<std::function<bool(time_point)>> callbacks;
72
#endif // MIR_TEST_FAKE_CLOCK_H_