operation_delta_test.rs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. use crate::node::script::NodeScript::{AssertNodeDelta, InsertNode, UpdateBody};
  2. use crate::node::script::{edit_node_delta, NodeTest};
  3. use lib_ot::core::NodeDataBuilder;
  4. use lib_ot::text_delta::DeltaTextOperationBuilder;
  5. #[test]
  6. fn operation_update_delta_test() {
  7. let mut test = NodeTest::new();
  8. let initial_delta = DeltaTextOperationBuilder::new().build();
  9. let new_delta = DeltaTextOperationBuilder::new()
  10. .retain(initial_delta.utf16_base_len)
  11. .insert("Hello, world")
  12. .build();
  13. let (changeset, expected) = edit_node_delta(&initial_delta, new_delta);
  14. let node = NodeDataBuilder::new("text")
  15. .insert_delta(initial_delta.clone())
  16. .build();
  17. let scripts = vec![
  18. InsertNode {
  19. path: 0.into(),
  20. node_data: node,
  21. rev_id: 1,
  22. },
  23. UpdateBody {
  24. path: 0.into(),
  25. changeset: changeset.clone(),
  26. },
  27. AssertNodeDelta {
  28. path: 0.into(),
  29. expected,
  30. },
  31. UpdateBody {
  32. path: 0.into(),
  33. changeset: changeset.inverted(),
  34. },
  35. AssertNodeDelta {
  36. path: 0.into(),
  37. expected: initial_delta,
  38. },
  39. ];
  40. test.run_scripts(scripts);
  41. }