invert_test.rs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. pub mod helper;
  2. use crate::helper::{TestOp::*, *};
  3. use flowy_ot::core::{Builder, Delta, Interval};
  4. #[test]
  5. fn delta_invert_no_attribute_delta() {
  6. let mut delta = Delta::default();
  7. delta.add(Builder::insert("123").build());
  8. let mut change = Delta::default();
  9. change.add(Builder::retain(3).build());
  10. change.add(Builder::insert("456").build());
  11. let undo = change.invert(&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_invert_no_attribute_delta2() {
  18. let ops = vec![
  19. Insert(0, "123", 0),
  20. Insert(1, "4567", 0),
  21. Invert(0, 1),
  22. AssertOpsJson(0, r#"[{"insert":"123"}]"#),
  23. ];
  24. OpTester::new().run_script(ops);
  25. }
  26. #[test]
  27. fn delta_invert_attribute_delta_with_no_attribute_delta() {
  28. let ops = vec![
  29. Insert(0, "123", 0),
  30. Bold(0, Interval::new(0, 3), true),
  31. AssertOpsJson(0, r#"[{"insert":"123","attributes":{"bold":"true"}}]"#),
  32. Insert(1, "4567", 0),
  33. Invert(0, 1),
  34. AssertOpsJson(0, r#"[{"insert":"123","attributes":{"bold":"true"}}]"#),
  35. ];
  36. OpTester::new().run_script(ops);
  37. }
  38. #[test]
  39. fn delta_invert_attribute_delta_with_no_attribute_delta2() {
  40. let ops = vec![
  41. Insert(0, "123", 0),
  42. Bold(0, Interval::new(0, 3), true),
  43. Insert(0, "456", 3),
  44. AssertOpsJson(
  45. 0,
  46. r#"[
  47. {"insert":"123456","attributes":{"bold":"true"}}]
  48. "#,
  49. ),
  50. Italic(0, Interval::new(2, 4), true),
  51. AssertOpsJson(
  52. 0,
  53. r#"[
  54. {"insert":"12","attributes":{"bold":"true"}},
  55. {"insert":"34","attributes":{"bold":"true","italic":"true"}},
  56. {"insert":"56","attributes":{"bold":"true"}}
  57. ]"#,
  58. ),
  59. Insert(1, "abc", 0),
  60. Invert(0, 1),
  61. AssertOpsJson(
  62. 0,
  63. r#"[
  64. {"insert":"12","attributes":{"bold":"true"}},
  65. {"insert":"34","attributes":{"bold":"true","italic":"true"}},
  66. {"insert":"56","attributes":{"bold":"true"}}
  67. ]"#,
  68. ),
  69. ];
  70. OpTester::new().run_script(ops);
  71. }
  72. #[test]
  73. fn delta_invert_no_attribute_delta_with_attribute_delta() {
  74. let ops = vec![
  75. Insert(0, "123", 0),
  76. Insert(1, "4567", 0),
  77. Bold(1, Interval::new(0, 3), true),
  78. AssertOpsJson(
  79. 1,
  80. r#"[{"insert":"456","attributes":{"bold":"true"}},{"insert":"7"}]"#,
  81. ),
  82. Invert(0, 1),
  83. AssertOpsJson(0, r#"[{"insert":"123"}]"#),
  84. ];
  85. OpTester::new().run_script(ops);
  86. }
  87. #[test]
  88. fn delta_invert_no_attribute_delta_with_attribute_delta2() {
  89. let ops = vec![
  90. Insert(0, "123", 0),
  91. AssertOpsJson(0, r#"[{"insert":"123"}]"#),
  92. Insert(1, "abc", 0),
  93. Bold(1, Interval::new(0, 3), true),
  94. Insert(1, "d", 3),
  95. Italic(1, Interval::new(1, 3), true),
  96. AssertOpsJson(
  97. 1,
  98. r#"[{"insert":"a","attributes":{"bold":"true"}},{"insert":"bc","attributes":
  99. {"bold":"true","italic":"true"}},{"insert":"d","attributes":{"bold":"true"
  100. }}]"#,
  101. ),
  102. Invert(0, 1),
  103. AssertOpsJson(0, r#"[{"insert":"123"}]"#),
  104. ];
  105. OpTester::new().run_script(ops);
  106. }
  107. #[test]
  108. fn delta_invert_attribute_delta_with_attribute_delta() {
  109. let ops = vec![
  110. Insert(0, "123", 0),
  111. Bold(0, Interval::new(0, 3), true),
  112. Insert(0, "456", 3),
  113. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  114. Italic(0, Interval::new(2, 4), true),
  115. AssertOpsJson(
  116. 0,
  117. r#"[
  118. {"insert":"12","attributes":{"bold":"true"}},
  119. {"insert":"34","attributes":{"bold":"true","italic":"true"}},
  120. {"insert":"56","attributes":{"bold":"true"}}
  121. ]"#,
  122. ),
  123. Insert(1, "abc", 0),
  124. Bold(1, Interval::new(0, 3), true),
  125. Insert(1, "d", 3),
  126. Italic(1, Interval::new(1, 3), true),
  127. AssertOpsJson(
  128. 1,
  129. r#"[
  130. {"insert":"a","attributes":{"bold":"true"}},
  131. {"insert":"bc","attributes":{"bold":"true","italic":"true"}},
  132. {"insert":"d","attributes":{"bold":"true"}}
  133. ]"#,
  134. ),
  135. Invert(0, 1),
  136. AssertOpsJson(
  137. 0,
  138. r#"[
  139. {"insert":"12","attributes":{"bold":"true"}},
  140. {"insert":"34","attributes":{"bold":"true","italic":"true"}},
  141. {"insert":"56","attributes":{"bold":"true"}}
  142. ]"#,
  143. ),
  144. ];
  145. OpTester::new().run_script(ops);
  146. }