Merge pull request #1766 from TrevorBrown-dev/fix/web-events-clock

M8: posting a comment in the browser no longer stops the app (#1764)
This commit is contained in:
BFlat
2026-11-07 12:34:59 +08:00
committed by GitHub
2 changed files with 18 additions and 1 deletions
+5 -1
View File
@@ -7,10 +7,14 @@
use std::collections::VecDeque;
use std::sync::{Condvar, Mutex, PoisonError};
use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH};
use std::time::Duration;
use serde::Serialize;
use serde_json::Value;
// The browser build has no `std` clock: `std::time::SystemTime::now()` panics on
// wasm32-unknown-unknown ("time not implemented on this platform"), and every `comment.*` command
// stamps an event. `web_time` is `std::time` on native targets and the JavaScript clock on wasm.
use web_time::{Instant, SystemTime, UNIX_EPOCH};
/// Most events kept; the oldest are dropped.
pub const MAX_EVENTS: usize = 1024;
+13
View File
@@ -44,6 +44,19 @@ fn events_keep_sequence_and_filter_topics() {
assert_eq!(r.events[0].kind, "document.changed");
}
#[test]
fn events_are_stamped_with_the_wall_clock() {
// The stamp is read through `web_time`, the clock the browser build has as well: with
// `std::time::SystemTime` every comment posted on the web panicked (#1764).
let log = EventLog::default();
log.push("comment.added", "Doc", None, json!({"commentId": 1}));
let r = log.poll(0, &comments(), 10, Duration::ZERO);
let now = web_time::SystemTime::now().duration_since(web_time::UNIX_EPOCH).unwrap().as_secs_f64();
let time = r.events[0].time;
// Within a minute of the same clock read afterwards (not ordered: the wall clock can step).
assert!(time > 1_700_000_000.0 && (time - now).abs() < 60.0, "{time} is seconds since the Unix epoch, read next to {now}");
}
#[test]
fn a_poll_wakes_for_a_push() {
let log = Arc::new(EventLog::default());