oficina / docs Public

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

Plain git — no account needed to clone.

Download

Download this file

1use docs_native_crdt::Editor;
2use serde_json::{json, Value};
3
4fn plain(value: &Value) -> String {
5 if let Some(runs) = value["runs"].as_array() {
6 return runs.iter().filter_map(|run| run["insert"].as_str()).collect();
7 }
8 value["children"].as_array().map(|children| children.iter().map(plain).collect()).unwrap_or_default()
9}
10
11// Port of core/tests/snapshot.rs:121, through the native Editor's actual
12// snapshot operation and vendored yrs. encode_diff_v1 drops this pending data.
13#[test]
14fn a_snapshot_with_a_parked_update_heals_once_its_dependency_arrives() {
15 let mut origin = Editor::new("parked", 1);
16 let dependency = origin.command(&json!({"op":"insert_element","at":0,"type":"paragraph"})).unwrap();
17 let dependent = origin.command(&json!({"op":"display_edit","at":0,"length":0,"text":"hello world"})).unwrap();
18 let parked = Editor::new("parked", 2);
19 parked.apply(&dependent).unwrap();
20 assert_eq!(plain(&parked.projection()), "");
21 let rebuilt = Editor::new("parked", 3);
22 rebuilt.apply(&parked.snapshot()).unwrap();
23 assert_eq!(plain(&rebuilt.projection()), "");
24 parked.apply(&dependency).unwrap();
25 rebuilt.apply(&dependency).unwrap();
26 assert_eq!(plain(&parked.projection()), "hello world");
27 assert_eq!(plain(&rebuilt.projection()), plain(&parked.projection()));
28}
29