| 1 | use docs_native_crdt::Editor; |
| 2 | use serde_json::json; |
| 3 | fn main() { |
| 4 | let arguments: Vec<_> = std::env::args().collect(); |
| 5 | let mut editor = Editor::new("native-wire-fixture", 123456); |
| 6 | editor.command(&json!({"op":"insert_element","at":0,"type":"paragraph"})).unwrap(); |
| 7 | let block = editor.projection()["children"][0]["id"].as_str().unwrap().to_owned(); |
| 8 | editor.command(&json!({"op":"insert_text","node":block,"at":0,"text":"Native π text"})).unwrap(); |
| 9 | let text = editor.projection()["children"][0]["children"][0]["id"].as_str().unwrap().to_owned(); |
| 10 | editor.command(&json!({"op":"format","node":text,"at":7,"length":2,"marks":{"strong":{},"size_18":{}}})).unwrap(); |
| 11 | std::fs::write(&arguments[1], editor.snapshot()).unwrap(); |
| 12 | if let Some(path) = arguments.get(2) { |
| 13 | editor.apply(&std::fs::read(path).unwrap()).unwrap(); |
| 14 | let projection = editor.projection(); |
| 15 | let runs = projection["children"][0]["children"][0]["runs"].as_array().unwrap(); |
| 16 | let text: String = runs.iter().map(|run| run["insert"].as_str().unwrap()).collect(); |
| 17 | assert_eq!(text, "browser Native π text"); |
| 18 | let emoji = runs.iter().find(|run| run["insert"] == "π").unwrap(); |
| 19 | assert_eq!(emoji["marks"]["strong"], json!({})); |
| 20 | assert_eq!(emoji["marks"]["size_18"], json!({})); |
| 21 | } |
| 22 | } |
| 23 | |