mirror of
https://github.com/storytold/figcraft.git
synced 2026-11-07 12:13:14 +00:00
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:
@@ -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,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());
|
||||
|
||||
Reference in New Issue
Block a user