undo_redo_test.rs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. pub mod helper;
  2. use crate::helper::{TestOp::*, *};
  3. use flowy_ot::{client::RECORD_THRESHOLD, core::Interval};
  4. #[test]
  5. fn delta_undo_insert() {
  6. let ops = vec![
  7. Insert(0, "\n", 0),
  8. Insert(0, "123", 0),
  9. Undo(0),
  10. AssertOpsJson(0, r#"[{"insert":"\n"}]"#),
  11. ];
  12. OpTester::new().run_script(ops);
  13. }
  14. #[test]
  15. fn delta_undo_insert2() {
  16. let ops = vec![
  17. Insert(0, "\n", 0),
  18. Insert(0, "123", 0),
  19. Wait(RECORD_THRESHOLD),
  20. Insert(0, "456", 0),
  21. Undo(0),
  22. AssertOpsJson(0, r#"[{"insert":"123\n"}]"#),
  23. Undo(0),
  24. AssertOpsJson(0, r#"[{"insert":"\n"}]"#),
  25. ];
  26. OpTester::new().run_script(ops);
  27. }
  28. #[test]
  29. fn delta_redo_insert() {
  30. let ops = vec![
  31. Insert(0, "\n", 0),
  32. Insert(0, "123", 0),
  33. AssertOpsJson(0, r#"[{"insert":"123\n"}]"#),
  34. Undo(0),
  35. AssertOpsJson(0, r#"[{"insert":"\n"}]"#),
  36. Redo(0),
  37. AssertOpsJson(0, r#"[{"insert":"123\n"}]"#),
  38. ];
  39. OpTester::new().run_script(ops);
  40. }
  41. #[test]
  42. fn delta_redo_insert_with_lagging() {
  43. let ops = vec![
  44. Insert(0, "\n", 0),
  45. Insert(0, "123", 0),
  46. Wait(RECORD_THRESHOLD),
  47. Insert(0, "456", 3),
  48. Wait(RECORD_THRESHOLD),
  49. AssertStr(0, "123456\n"),
  50. AssertOpsJson(0, r#"[{"insert":"123456\n"}]"#),
  51. Undo(0),
  52. AssertOpsJson(0, r#"[{"insert":"123\n"}]"#),
  53. Redo(0),
  54. AssertOpsJson(0, r#"[{"insert":"123456\n"}]"#),
  55. Undo(0),
  56. AssertOpsJson(0, r#"[{"insert":"123\n"}]"#),
  57. ];
  58. OpTester::new().run_script(ops);
  59. }
  60. #[test]
  61. fn delta_undo_attributes() {
  62. let ops = vec![
  63. Insert(0, "\n", 0),
  64. Insert(0, "123", 0),
  65. Bold(0, Interval::new(0, 3), true),
  66. Undo(0),
  67. AssertOpsJson(0, r#"[{"insert":"\n"}]"#),
  68. ];
  69. OpTester::new().run_script(ops);
  70. }
  71. #[test]
  72. fn delta_undo_attributes_with_lagging() {
  73. let ops = vec![
  74. Insert(0, "\n", 0),
  75. Insert(0, "123", 0),
  76. Wait(RECORD_THRESHOLD),
  77. Bold(0, Interval::new(0, 3), true),
  78. Undo(0),
  79. AssertOpsJson(0, r#"[{"insert":"123\n"}]"#),
  80. ];
  81. OpTester::new().run_script(ops);
  82. }
  83. #[test]
  84. fn delta_redo_attributes() {
  85. let ops = vec![
  86. Insert(0, "\n", 0),
  87. Insert(0, "123", 0),
  88. Bold(0, Interval::new(0, 3), true),
  89. Undo(0),
  90. AssertOpsJson(0, r#"[{"insert":"\n"}]"#),
  91. Redo(0),
  92. AssertOpsJson(
  93. 0,
  94. r#" [{"insert":"123","attributes":{"bold":"true"}},{"insert":"\n"}]"#,
  95. ),
  96. ];
  97. OpTester::new().run_script(ops);
  98. }
  99. #[test]
  100. fn delta_redo_attributes_with_lagging() {
  101. let ops = vec![
  102. Insert(0, "\n", 0),
  103. Insert(0, "123", 0),
  104. Wait(RECORD_THRESHOLD),
  105. Bold(0, Interval::new(0, 3), true),
  106. Undo(0),
  107. AssertOpsJson(0, r#"[{"insert":"123\n"}]"#),
  108. Redo(0),
  109. AssertOpsJson(
  110. 0,
  111. r#"[{"insert":"123","attributes":{"bold":"true"}},{"insert":"\n"}]"#,
  112. ),
  113. ];
  114. OpTester::new().run_script(ops);
  115. }
  116. #[test]
  117. fn delta_undo_delete() {
  118. let ops = vec![
  119. Insert(0, "123", 0),
  120. AssertOpsJson(0, r#"[{"insert":"123"}]"#),
  121. Delete(0, Interval::new(0, 3)),
  122. AssertOpsJson(0, r#"[]"#),
  123. Undo(0),
  124. AssertOpsJson(0, r#"[{"insert":"123"}]"#),
  125. ];
  126. OpTester::new().run_script(ops);
  127. }
  128. #[test]
  129. fn delta_undo_delete2() {
  130. let ops = vec![
  131. Insert(0, "\n", 0),
  132. Insert(0, "123", 0),
  133. Bold(0, Interval::new(0, 3), true),
  134. Delete(0, Interval::new(0, 1)),
  135. AssertOpsJson(
  136. 0,
  137. r#"[
  138. {"insert":"23","attributes":{"bold":"true"}},
  139. {"insert":"\n"}]
  140. "#,
  141. ),
  142. Undo(0),
  143. AssertOpsJson(0, r#"[{"insert":"\n"}]"#),
  144. ];
  145. OpTester::new().run_script(ops);
  146. }
  147. #[test]
  148. fn delta_undo_delete2_with_lagging() {
  149. let ops = vec![
  150. Insert(0, "\n", 0),
  151. Insert(0, "123", 0),
  152. Wait(RECORD_THRESHOLD),
  153. Bold(0, Interval::new(0, 3), true),
  154. Wait(RECORD_THRESHOLD),
  155. Delete(0, Interval::new(0, 1)),
  156. AssertOpsJson(
  157. 0,
  158. r#"[
  159. {"insert":"23","attributes":{"bold":"true"}},
  160. {"insert":"\n"}]
  161. "#,
  162. ),
  163. Undo(0),
  164. AssertOpsJson(
  165. 0,
  166. r#"[
  167. {"insert":"123","attributes":{"bold":"true"}},
  168. {"insert":"\n"}]
  169. "#,
  170. ),
  171. ];
  172. OpTester::new().run_script(ops);
  173. }
  174. #[test]
  175. fn delta_redo_delete() {
  176. let ops = vec![
  177. Insert(0, "\n", 0),
  178. Insert(0, "123", 0),
  179. Delete(0, Interval::new(0, 3)),
  180. AssertOpsJson(0, r#"[{"insert":"\n"}]"#),
  181. Undo(0),
  182. Redo(0),
  183. AssertOpsJson(0, r#"[{"insert":"\n"}]"#),
  184. ];
  185. OpTester::new().run_script(ops);
  186. }
  187. #[test]
  188. fn delta_undo_replace() {
  189. let ops = vec![
  190. Insert(0, "\n", 0),
  191. Insert(0, "123", 0),
  192. Bold(0, Interval::new(0, 3), true),
  193. Replace(0, Interval::new(0, 2), "ab"),
  194. AssertOpsJson(
  195. 0,
  196. r#"[
  197. {"insert":"ab"},
  198. {"insert":"3","attributes":{"bold":"true"}},{"insert":"\n"}]
  199. "#,
  200. ),
  201. Undo(0),
  202. AssertOpsJson(0, r#"[{"insert":"\n"}]"#),
  203. ];
  204. OpTester::new().run_script(ops);
  205. }
  206. #[test]
  207. fn delta_undo_replace_with_lagging() {
  208. let ops = vec![
  209. Insert(0, "\n", 0),
  210. Insert(0, "123", 0),
  211. Wait(RECORD_THRESHOLD),
  212. Bold(0, Interval::new(0, 3), true),
  213. Wait(RECORD_THRESHOLD),
  214. Replace(0, Interval::new(0, 2), "ab"),
  215. AssertOpsJson(
  216. 0,
  217. r#"[
  218. {"insert":"ab"},
  219. {"insert":"3","attributes":{"bold":"true"}},{"insert":"\n"}]
  220. "#,
  221. ),
  222. Undo(0),
  223. AssertOpsJson(
  224. 0,
  225. r#"[{"insert":"123","attributes":{"bold":"true"}},{"insert":"\n"}]"#,
  226. ),
  227. ];
  228. OpTester::new().run_script(ops);
  229. }
  230. #[test]
  231. fn delta_redo_replace() {
  232. let ops = vec![
  233. Insert(0, "\n", 0),
  234. Insert(0, "123", 0),
  235. Bold(0, Interval::new(0, 3), true),
  236. Replace(0, Interval::new(0, 2), "ab"),
  237. Undo(0),
  238. Redo(0),
  239. AssertOpsJson(
  240. 0,
  241. r#"[
  242. {"insert":"ab"},
  243. {"insert":"3","attributes":{"bold":"true"}},{"insert":"\n"}]
  244. "#,
  245. ),
  246. ];
  247. OpTester::new().run_script(ops);
  248. }