ferroui_reactiveui_testing/
test_scheduler_extensions.rs1use ferroui_reactive::{Notification, ObservableError};
4use ferroui_reactive_testing::{duration_to_ticks, Recorded, TestScheduler};
5use std::time::Duration;
6
7const TICKS_PER_MILLISECOND: f64 = 10_000.0;
9
10fn ticks_from_milliseconds(milliseconds: f64) -> i64 {
13 (milliseconds * TICKS_PER_MILLISECOND) as i64
14}
15
16pub trait TestSchedulerExtensions {
26 fn from_time_span(span: Duration) -> i64;
28
29 fn on_next_at<T>(milliseconds: f64, value: T) -> Recorded<Notification<T>>;
31
32 fn on_error_at<T>(milliseconds: f64, error: ObservableError) -> Recorded<Notification<T>>;
34
35 fn on_completed_at<T>(milliseconds: f64) -> Recorded<Notification<T>>;
37
38 fn advance_to_ms(&self, milliseconds: f64);
41
42 fn advance_by_ms(&self, milliseconds: f64);
44}
45
46impl TestSchedulerExtensions for TestScheduler {
47 fn from_time_span(span: Duration) -> i64 {
48 duration_to_ticks(span)
49 }
50
51 fn on_next_at<T>(milliseconds: f64, value: T) -> Recorded<Notification<T>> {
52 Recorded::new(ticks_from_milliseconds(milliseconds), Notification::OnNext(value))
53 }
54
55 fn on_error_at<T>(milliseconds: f64, error: ObservableError) -> Recorded<Notification<T>> {
56 Recorded::new(ticks_from_milliseconds(milliseconds), Notification::OnError(error))
57 }
58
59 fn on_completed_at<T>(milliseconds: f64) -> Recorded<Notification<T>> {
60 Recorded::new(ticks_from_milliseconds(milliseconds), Notification::OnCompleted)
61 }
62
63 fn advance_to_ms(&self, milliseconds: f64) {
64 self.advance_to(ticks_from_milliseconds(milliseconds));
65 }
66
67 fn advance_by_ms(&self, milliseconds: f64) {
68 self.advance_by(ticks_from_milliseconds(milliseconds));
69 }
70}