oficina / docs Public

Clone
git clone https://amadan.net/oficina/docs

Plain git — no account needed to clone.

Download

Download this file

1use docs_core::{apply_update, fragment_html, fragment_json, snapshot_bytes, verify_snapshot};
2use yrs::{Doc, Options};
3
4fn receiver(client: u64) -> Doc {
5 Doc::with_options(Options::with_guid_and_client_id(
6 "native-rule".into(),
7 client,
8 ))
9}
10
11#[test]
12fn native_rule_updates_converge_through_server_rendering_and_snapshot_reload() {
13 let doc = receiver(900);
14 let fixture =
15 std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("../fixtures/vectors/native-rule");
16 for step in 0..=6 {
17 apply_update(
18 &doc,
19 &std::fs::read(fixture.join(format!("{step}.bin"))).unwrap(),
20 )
21 .unwrap();
22 if step == 0 {
23 continue;
24 }
25 let expected = receiver(901);
26 apply_update(
27 &expected,
28 &std::fs::read(fixture.join(format!("{step}.snapshot"))).unwrap(),
29 )
30 .unwrap();
31 assert_eq!(
32 fragment_json(&doc),
33 fragment_json(&expected),
34 "incremental step {step}"
35 );
36 let snapshot = snapshot_bytes(&doc);
37 assert!(verify_snapshot(&doc, &snapshot, "native-rule", 902));
38 let reloaded = receiver(903);
39 apply_update(&reloaded, &snapshot).unwrap();
40 assert_eq!(
41 fragment_json(&reloaded),
42 fragment_json(&expected),
43 "reloaded step {step}"
44 );
45 }
46 assert_eq!(fragment_html(&doc), "<p>- Alpha</p><p>Beta</p>");
47}
48