mirror of
https://github.com/storytold/figcraft.git
synced 2026-11-10 00:43:09 +00:00
M8: posting a comment in the browser no longer stops the app (#1764)
The event log read the clock through std::time::SystemTime and Instant, which panic on wasm32-unknown-unknown ("time not implemented on this platform"). Every mutating comment.* command appends an event, so the first comment posted in the web build hit it. The log now takes SystemTime, UNIX_EPOCH and Instant from web_time, as the rest of the engine does. A test checks the stamp is a current Unix time read through the same clock.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
e04c5d2274
commit
7bee269c4d
@@ -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;
|
||||
|
||||
@@ -44,6 +44,18 @@ 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;
|
||||
assert!(time > 1_700_000_000.0 && time <= now, "{time} is seconds since the Unix epoch, read just before {now}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_poll_wakes_for_a_push() {
|
||||
let log = Arc::new(EventLog::default());
|
||||
|
||||
Reference in New Issue
Block a user