| 1 | use docs_native_crdt::Editor; |
| 2 | use serde_json::{json, Value}; |
| 3 | |
| 4 | fn 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] |
| 14 | fn 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 | |