pub struct MockClock { /* private fields */ }Expand description
A controllable clock implementation for testing.
MockClock allows you to manually control the passage of time, making it
ideal for testing time-dependent code. It uses MonotonicClock as its
internal time base to ensure stability during tests.
§Features
- Set the clock to a specific time
- Advance the clock by a duration
- Automatically advance time on each call
- Reset to initial state
§Thread Safety
This type is thread-safe, using Arc<Mutex<>> internally to protect its
mutable state.
§Examples
use prism3_clock::{Clock, ControllableClock, MockClock};
use chrono::{DateTime, Duration, Utc};
let clock = MockClock::new();
// Set to a specific time
let fixed_time = DateTime::parse_from_rfc3339(
"2024-01-01T00:00:00Z"
).unwrap().with_timezone(&Utc);
clock.set_time(fixed_time);
assert_eq!(clock.time(), fixed_time);
// Advance by 1 hour
clock.add_duration(Duration::hours(1));
assert_eq!(clock.time(), fixed_time + Duration::hours(1));
// Reset to initial state
clock.reset();§Author
Haixing Hu
Implementations§
Source§impl MockClock
impl MockClock
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new MockClock.
The clock is initialized with the current system time and uses a
MonotonicClock as its internal time base.
§Returns
A new MockClock instance.
§Examples
use prism3_clock::MockClock;
let clock = MockClock::new();Sourcepub fn add_millis(&self, millis: i64, add_every_time: bool)
pub fn add_millis(&self, millis: i64, add_every_time: bool)
Adds a fixed amount of milliseconds to the clock.
§Arguments
millis- The number of milliseconds to add.add_every_time- Iftrue, the specified milliseconds will be added on every call tomillis(). Iffalse, the milliseconds are added only once.
§Examples
use prism3_clock::{Clock, MockClock};
let clock = MockClock::new();
let before = clock.millis();
// Add 1000ms once
clock.add_millis(1000, false);
assert_eq!(clock.millis(), before + 1000);
// Add 100ms on every call
clock.add_millis(100, true);
let t1 = clock.millis();
let t2 = clock.millis();
assert_eq!(t2 - t1, 100);Trait Implementations§
Source§impl ControllableClock for MockClock
impl ControllableClock for MockClock
Auto Trait Implementations§
impl Freeze for MockClock
impl !RefUnwindSafe for MockClock
impl Send for MockClock
impl Sync for MockClock
impl Unpin for MockClock
impl !UnwindSafe for MockClock
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more