|
@@ -1,7 +1,7 @@
|
|
use crate::core::document::position::Position;
|
|
use crate::core::document::position::Position;
|
|
use crate::core::{NodeAttributes, NodeData, TextDelta};
|
|
use crate::core::{NodeAttributes, NodeData, TextDelta};
|
|
|
|
|
|
-#[derive(Clone)]
|
|
|
|
|
|
+#[derive(Clone, serde::Serialize, serde::Deserialize)]
|
|
pub enum DocumentOperation {
|
|
pub enum DocumentOperation {
|
|
Insert {
|
|
Insert {
|
|
path: Position,
|
|
path: Position,
|
|
@@ -98,3 +98,56 @@ impl DocumentOperation {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+#[cfg(test)]
|
|
|
|
+mod tests {
|
|
|
|
+ use crate::core::Position;
|
|
|
|
+
|
|
|
|
+ #[test]
|
|
|
|
+ fn test_transform_path_1() {
|
|
|
|
+ assert_eq!(
|
|
|
|
+ { Position::transform(&Position(vec![0, 1]), &Position(vec![0, 1]), 1) }.0,
|
|
|
|
+ vec![0, 2]
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #[test]
|
|
|
|
+ fn test_transform_path_2() {
|
|
|
|
+ assert_eq!(
|
|
|
|
+ { Position::transform(&Position(vec![0, 1]), &Position(vec![0, 2]), 1) }.0,
|
|
|
|
+ vec![0, 3]
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #[test]
|
|
|
|
+ fn test_transform_path_3() {
|
|
|
|
+ assert_eq!(
|
|
|
|
+ { Position::transform(&Position(vec![0, 1]), &Position(vec![0, 2, 7, 8, 9]), 1) }.0,
|
|
|
|
+ vec![0, 3, 7, 8, 9]
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #[test]
|
|
|
|
+ fn test_transform_path_not_changed() {
|
|
|
|
+ assert_eq!(
|
|
|
|
+ { Position::transform(&Position(vec![0, 1, 2]), &Position(vec![0, 0, 7, 8, 9]), 1) }.0,
|
|
|
|
+ vec![0, 0, 7, 8, 9]
|
|
|
|
+ );
|
|
|
|
+ assert_eq!(
|
|
|
|
+ { Position::transform(&Position(vec![0, 1, 2]), &Position(vec![0, 1]), 1) }.0,
|
|
|
|
+ vec![0, 1]
|
|
|
|
+ );
|
|
|
|
+ assert_eq!(
|
|
|
|
+ { Position::transform(&Position(vec![1, 1]), &Position(vec![1, 0]), 1) }.0,
|
|
|
|
+ vec![1, 0]
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #[test]
|
|
|
|
+ fn test_transform_delta() {
|
|
|
|
+ assert_eq!(
|
|
|
|
+ { Position::transform(&Position(vec![0, 1]), &Position(vec![0, 1]), 5) }.0,
|
|
|
|
+ vec![0, 6]
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+}
|