浏览代码

feat: vec to position convertion

Vincent Chan 2 年之前
父节点
当前提交
61d181b228
共有 2 个文件被更改,包括 17 次插入5 次删除
  1. 6 0
      shared-lib/lib-ot/src/core/document/position.rs
  2. 11 5
      shared-lib/lib-ot/tests/main.rs

+ 6 - 0
shared-lib/lib-ot/src/core/document/position.rs

@@ -6,3 +6,9 @@ impl Position {
         self.0.is_empty()
     }
 }
+
+impl From<Vec<usize>> for Position {
+    fn from(v: Vec<usize>) -> Self {
+        Position(v)
+    }
+}

+ 11 - 5
shared-lib/lib-ot/tests/main.rs

@@ -1,5 +1,5 @@
 use std::collections::HashMap;
-use lib_ot::core::{DocumentTree, NodeData, Position, TransactionBuilder};
+use lib_ot::core::{DocumentTree, NodeData, TransactionBuilder};
 
 #[test]
 fn main() {
@@ -11,19 +11,25 @@ fn main() {
 fn test_documents() {
     let mut document = DocumentTree::new();
     let mut tb = TransactionBuilder::new(&document);
-    tb.insert_nodes(&Position(vec![0]), &vec![NodeData::new("text")]);
+    tb.insert_nodes(&vec![0].into(), &vec![NodeData::new("text")]);
     let transaction = tb.finalize();
     document.apply(transaction);
 
-    assert!(document.node_at_path(&Position(vec![0])).is_some());
-    let node = document.node_at_path(&Position(vec![0])).unwrap();
+    assert!(document.node_at_path(&vec![0].into()).is_some());
+    let node = document.node_at_path(&vec![0].into()).unwrap();
     let node_data = document.arena.get(node).unwrap().get();
     assert_eq!(node_data.node_type, "text");
 
     let mut tb = TransactionBuilder::new(&document);
-    tb.update_attributes(&Position(vec![0]), HashMap::from([
+    tb.update_attributes(&vec![0].into(), HashMap::from([
         ("subtype".into(), Some("bullet-list".into())),
     ]));
     let transaction = tb.finalize();
     document.apply(transaction);
+
+    let mut tb = TransactionBuilder::new(&document);
+    tb.delete_node(&vec![0].into());
+    let transaction = tb.finalize();
+    document.apply(transaction);
+    assert!(document.node_at_path(&vec![0].into()).is_none());
 }