invert_test.rs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. pub mod helper;
  2. use crate::helper::{TestOp::*, *};
  3. use flowy_ot::core::{Delta, Interval, OpBuilder};
  4. #[test]
  5. fn delta_invert_delta_test() {
  6. let mut delta = Delta::default();
  7. delta.add(OpBuilder::insert("123").build());
  8. let mut change = Delta::default();
  9. change.add(OpBuilder::retain(3).build());
  10. change.add(OpBuilder::insert("456").build());
  11. let undo = change.invert_delta(&delta);
  12. let new_delta = delta.compose(&change).unwrap();
  13. let delta_after_undo = new_delta.compose(&undo).unwrap();
  14. assert_eq!(delta_after_undo, delta);
  15. }
  16. #[test]
  17. fn delta_get_ops_in_interval_1() {
  18. let mut delta = Delta::default();
  19. let insert_a = OpBuilder::insert("123").build();
  20. let insert_b = OpBuilder::insert("4").build();
  21. delta.add(insert_a.clone());
  22. delta.add(insert_b.clone());
  23. assert_eq!(
  24. delta.ops_in_interval(Interval::new(0, 3)),
  25. vec![delta.ops.last().unwrap().clone()]
  26. );
  27. }
  28. #[test]
  29. fn delta_get_ops_in_interval_2() {
  30. let mut delta = Delta::default();
  31. let insert_a = OpBuilder::insert("123").build();
  32. let insert_b = OpBuilder::insert("4").build();
  33. let insert_c = OpBuilder::insert("5").build();
  34. let retain_a = OpBuilder::retain(3).build();
  35. delta.add(insert_a.clone());
  36. delta.add(retain_a.clone());
  37. delta.add(insert_b.clone());
  38. delta.add(insert_c.clone());
  39. assert_eq!(
  40. delta.ops_in_interval(Interval::new(0, 3)),
  41. vec![insert_a.clone()]
  42. );
  43. assert_eq!(
  44. delta.ops_in_interval(Interval::new(0, 4)),
  45. vec![insert_a.clone(), retain_a.clone()]
  46. );
  47. assert_eq!(
  48. delta.ops_in_interval(Interval::new(0, 7)),
  49. vec![
  50. insert_a.clone(),
  51. retain_a.clone(),
  52. // insert_b and insert_c will be merged into one. insert: "45"
  53. delta.ops.last().unwrap().clone()
  54. ]
  55. );
  56. }