use docs_native_crdt::Editor; use serde_json::{json, Value}; fn plain(value: &Value) -> String { if let Some(runs) = value["runs"].as_array() { return runs.iter().filter_map(|run| run["insert"].as_str()).collect(); } value["children"].as_array().map(|children| children.iter().map(plain).collect()).unwrap_or_default() } // Port of core/tests/snapshot.rs:121, through the native Editor's actual // snapshot operation and vendored yrs. encode_diff_v1 drops this pending data. #[test] fn a_snapshot_with_a_parked_update_heals_once_its_dependency_arrives() { let mut origin = Editor::new("parked", 1); let dependency = origin.command(&json!({"op":"insert_element","at":0,"type":"paragraph"})).unwrap(); let dependent = origin.command(&json!({"op":"display_edit","at":0,"length":0,"text":"hello world"})).unwrap(); let parked = Editor::new("parked", 2); parked.apply(&dependent).unwrap(); assert_eq!(plain(&parked.projection()), ""); let rebuilt = Editor::new("parked", 3); rebuilt.apply(&parked.snapshot()).unwrap(); assert_eq!(plain(&rebuilt.projection()), ""); parked.apply(&dependency).unwrap(); rebuilt.apply(&dependency).unwrap(); assert_eq!(plain(&parked.projection()), "hello world"); assert_eq!(plain(&rebuilt.projection()), plain(&parked.projection())); }