| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 | 
							- use crate::node::script::NodeScript::*;
 
- use crate::node::script::NodeTest;
 
- use lib_ot::core::{AttributeEntry, Changeset, NodeData, OperationTransform};
 
- use lib_ot::text_delta::DeltaTextOperationBuilder;
 
- #[test]
 
- fn changeset_delta_compose_delta_test() {
 
-   // delta 1
 
-   let delta_1 = DeltaTextOperationBuilder::new()
 
-     .insert("Hello world")
 
-     .build();
 
-   let inverted_1 = delta_1.inverted();
 
-   let mut changeset_1 = Changeset::Delta {
 
-     delta: delta_1.clone(),
 
-     inverted: inverted_1,
 
-   };
 
-   // delta 2
 
-   let delta_2 = DeltaTextOperationBuilder::new()
 
-     .retain(delta_1.utf16_target_len)
 
-     .insert("!")
 
-     .build();
 
-   let inverted_2 = delta_2.inverted();
 
-   let changeset_2 = Changeset::Delta {
 
-     delta: delta_2,
 
-     inverted: inverted_2,
 
-   };
 
-   // compose
 
-   changeset_1.compose(&changeset_2).unwrap();
 
-   if let Changeset::Delta { delta, inverted } = changeset_1 {
 
-     assert_eq!(delta.content().unwrap(), "Hello world!");
 
-     let new_delta = delta.compose(&inverted).unwrap();
 
-     assert_eq!(new_delta.content().unwrap(), "");
 
-   }
 
- }
 
- #[test]
 
- fn operation_compose_delta_changeset_then_invert_test() {
 
-   let delta = DeltaTextOperationBuilder::new()
 
-     .insert("Hello world")
 
-     .build();
 
-   let inverted = delta.inverted();
 
-   let changeset = Changeset::Delta {
 
-     delta: delta.clone(),
 
-     inverted: inverted.clone(),
 
-   };
 
-   let mut test = NodeTest::new();
 
-   let text_node = NodeData::new("text");
 
-   let scripts = vec![
 
-     InsertNode {
 
-       path: 0.into(),
 
-       node_data: text_node,
 
-       rev_id: 1,
 
-     },
 
-     UpdateBody {
 
-       path: 0.into(),
 
-       changeset: changeset.clone(),
 
-     },
 
-     AssertNodeDelta {
 
-       path: 0.into(),
 
-       expected: delta.clone(),
 
-     },
 
-     UpdateBody {
 
-       path: 0.into(),
 
-       changeset: changeset.inverted(),
 
-     },
 
-     AssertNodeDelta {
 
-       path: 0.into(),
 
-       expected: delta.compose(&inverted).unwrap(),
 
-     },
 
-   ];
 
-   test.run_scripts(scripts);
 
- }
 
- #[test]
 
- fn operation_compose_multiple_delta_changeset_then_invert_test() {
 
-   // delta 1
 
-   let delta_1 = DeltaTextOperationBuilder::new()
 
-     .insert("Hello world")
 
-     .build();
 
-   let inverted_1 = delta_1.inverted();
 
-   let changeset_1 = Changeset::Delta {
 
-     delta: delta_1.clone(),
 
-     inverted: inverted_1,
 
-   };
 
-   // delta 2
 
-   let delta_2 = DeltaTextOperationBuilder::new()
 
-     .retain(delta_1.utf16_target_len)
 
-     .insert("!")
 
-     .build();
 
-   let inverted_2 = delta_2.inverted();
 
-   let changeset_2 = Changeset::Delta {
 
-     delta: delta_2.clone(),
 
-     inverted: inverted_2,
 
-   };
 
-   // delta 3
 
-   let delta_3 = DeltaTextOperationBuilder::new()
 
-     .retain(delta_2.utf16_target_len)
 
-     .insert("AppFlowy")
 
-     .build();
 
-   let inverted_3 = delta_3.inverted();
 
-   let changeset_3 = Changeset::Delta {
 
-     delta: delta_3.clone(),
 
-     inverted: inverted_3,
 
-   };
 
-   let mut test = NodeTest::new();
 
-   let text_node = NodeData::new("text");
 
-   let scripts = vec![
 
-     InsertNode {
 
-       path: 0.into(),
 
-       node_data: text_node,
 
-       rev_id: 1,
 
-     },
 
-     UpdateBody {
 
-       path: 0.into(),
 
-       changeset: changeset_1.clone(),
 
-     },
 
-     UpdateBody {
 
-       path: 0.into(),
 
-       changeset: changeset_2.clone(),
 
-     },
 
-     UpdateBody {
 
-       path: 0.into(),
 
-       changeset: changeset_3.clone(),
 
-     },
 
-     AssertNodeDelta {
 
-       path: 0.into(),
 
-       expected: delta_1
 
-         .compose(&delta_2)
 
-         .unwrap()
 
-         .compose(&delta_3)
 
-         .unwrap(),
 
-     },
 
-     UpdateBody {
 
-       path: 0.into(),
 
-       changeset: changeset_3.inverted(),
 
-     },
 
-     AssertNodeDeltaContent {
 
-       path: 0.into(),
 
-       expected: r#"Hello world!"#,
 
-     },
 
-     UpdateBody {
 
-       path: 0.into(),
 
-       changeset: changeset_2.inverted(),
 
-     },
 
-     AssertNodeDeltaContent {
 
-       path: 0.into(),
 
-       expected: r#"Hello world"#,
 
-     },
 
-     UpdateBody {
 
-       path: 0.into(),
 
-       changeset: changeset_1.inverted(),
 
-     },
 
-     AssertNodeDeltaContent {
 
-       path: 0.into(),
 
-       expected: r#""#,
 
-     },
 
-   ];
 
-   test.run_scripts(scripts);
 
- }
 
- #[test]
 
- #[should_panic]
 
- fn changeset_delta_compose_attributes_test() {
 
-   // delta 1
 
-   let delta = DeltaTextOperationBuilder::new()
 
-     .insert("Hello world")
 
-     .build();
 
-   let inverted = delta.inverted();
 
-   let mut delta_changeset = Changeset::Delta { delta, inverted };
 
-   // attributes
 
-   let attribute_changeset = Changeset::Attributes {
 
-     new: Default::default(),
 
-     old: Default::default(),
 
-   };
 
-   // compose
 
-   delta_changeset.compose(&attribute_changeset).unwrap();
 
- }
 
- #[test]
 
- fn changeset_attributes_compose_attributes_test() {
 
-   // attributes
 
-   let mut changeset_1 = Changeset::Attributes {
 
-     new: AttributeEntry::new("bold", true).into(),
 
-     old: Default::default(),
 
-   };
 
-   let changeset_2 = Changeset::Attributes {
 
-     new: AttributeEntry::new("Italic", true).into(),
 
-     old: Default::default(),
 
-   };
 
-   // compose
 
-   changeset_1.compose(&changeset_2).unwrap();
 
-   if let Changeset::Attributes { new, old: _ } = changeset_1 {
 
-     assert_eq!(new, AttributeEntry::new("Italic", true).into());
 
-   }
 
- }
 
 
  |