use crate::ui_state::{Clock, SystemClock, epoch_from_iso8601, format_iso8601, iso8601_extended};
#[test]
fn system_clock_is_monotonic_and_stamps_unix_seconds() {
let c = SystemClock;
let a = c.now();
assert!(c.now() >= a);
let stamp: u64 = c.stamp().parse().expect("unix seconds");
assert!(stamp > 1_700_000_000, "a plausible wall clock: {stamp}");
}
#[test]
fn format_iso8601_pads_every_field() {
assert_eq!(
format_iso8601(2026, 8, 2, 0, 24, 26),
"2026-08-02 00:24:26Z"
);
assert_eq!(format_iso8601(1970, 1, 1, 0, 0, 0), "1970-01-01 00:00:00Z");
}
#[test]
fn iso8601_extended_reads_the_activity_row_example() {
assert_eq!(iso8601_extended(1_785_630_266), "2026-08-02 00:24:26Z");
}
#[test]
fn iso8601_extended_covers_the_epoch_and_a_leap_day() {
assert_eq!(iso8601_extended(0), "1970-01-01 00:00:00Z");
assert_eq!(iso8601_extended(951_868_799), "2000-02-29 23:59:59Z");
assert_eq!(iso8601_extended(1_735_689_599), "2024-12-31 23:59:59Z");
}
#[test]
fn epoch_from_iso8601_inverts_the_extended_rendering() {
for secs in [0_i64, 951_868_799, 1_735_689_599, 1_785_630_266] {
let rendered = iso8601_extended(secs).replace(' ', "T");
assert_eq!(epoch_from_iso8601(&rendered), Some(secs), "{rendered}");
}
}
#[test]
fn epoch_from_iso8601_refuses_every_other_shape() {
for bad in [
"",
"2026-04-22T06:54:32", "2026-04-22T06:54:32+00:00", "2026-04-22 06:54:32Z", "2026/04/22T06:54:32Z", "2026-04-22T06.54.32Z", "20xx-04-22T06:54:32Z", "2026-04-22T06:54:3Z", ] {
assert_eq!(epoch_from_iso8601(bad), None, "{bad:?}");
}
}