attribute_test.rs 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. pub mod helper;
  2. use crate::helper::{MergeTestOp::*, *};
  3. use flowy_ot::{
  4. interval::Interval,
  5. operation::{OpBuilder, Operation, Retain},
  6. };
  7. #[test]
  8. fn delta_add_bold_and_invert_all() {
  9. let ops = vec![
  10. Insert(0, "123"),
  11. Bold(0, Interval::new(0, 3), true),
  12. AssertOpsJson(0, r#"[{"insert":"123","attributes":{"bold":"true"}}]"#),
  13. Bold(0, Interval::new(0, 3), false),
  14. AssertOpsJson(0, r#"[{"insert":"123"}]"#),
  15. ];
  16. MergeTest::new().run_script(ops);
  17. }
  18. #[test]
  19. fn delta_add_bold_and_invert_partial_suffix() {
  20. let ops = vec![
  21. Insert(0, "1234"),
  22. Bold(0, Interval::new(0, 4), true),
  23. AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),
  24. Bold(0, Interval::new(2, 4), false),
  25. AssertOpsJson(
  26. 0,
  27. r#"[{"insert":"12","attributes":{"bold":"true"}},{"insert":"34"}]"#,
  28. ),
  29. ];
  30. MergeTest::new().run_script(ops);
  31. }
  32. #[test]
  33. fn delta_add_bold_and_invert_partial_suffix2() {
  34. let ops = vec![
  35. Insert(0, "1234"),
  36. Bold(0, Interval::new(0, 4), true),
  37. AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),
  38. Bold(0, Interval::new(2, 4), false),
  39. AssertOpsJson(
  40. 0,
  41. r#"[{"insert":"12","attributes":{"bold":"true"}},{"insert":"34"}]"#,
  42. ),
  43. Bold(0, Interval::new(2, 4), true),
  44. AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),
  45. ];
  46. MergeTest::new().run_script(ops);
  47. }
  48. #[test]
  49. fn delta_add_bold_and_invert_partial_prefix() {
  50. let ops = vec![
  51. Insert(0, "1234"),
  52. Bold(0, Interval::new(0, 4), true),
  53. AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),
  54. Bold(0, Interval::new(0, 2), false),
  55. AssertOpsJson(
  56. 0,
  57. r#"[{"insert":"12"},{"insert":"34","attributes":{"bold":"true"}}]"#,
  58. ),
  59. ];
  60. MergeTest::new().run_script(ops);
  61. }
  62. #[test]
  63. fn delta_add_bold_consecutive() {
  64. let ops = vec![
  65. Insert(0, "1234"),
  66. Bold(0, Interval::new(0, 1), true),
  67. AssertOpsJson(
  68. 0,
  69. r#"[{"insert":"1","attributes":{"bold":"true"}},{"insert":"234"}]"#,
  70. ),
  71. Bold(0, Interval::new(1, 2), true),
  72. AssertOpsJson(
  73. 0,
  74. r#"[{"insert":"12","attributes":{"bold":"true"}},{"insert":"34"}]"#,
  75. ),
  76. ];
  77. MergeTest::new().run_script(ops);
  78. }
  79. #[test]
  80. #[should_panic]
  81. fn delta_add_bold_empty_str() {
  82. let ops = vec![Bold(0, Interval::new(0, 4), true)];
  83. MergeTest::new().run_script(ops);
  84. }
  85. #[test]
  86. fn delta_add_bold_italic() {
  87. let ops = vec![
  88. Insert(0, "1234"),
  89. Bold(0, Interval::new(0, 4), true),
  90. Italic(0, Interval::new(0, 4), true),
  91. AssertOpsJson(
  92. 0,
  93. r#"[{"insert":"1234","attributes":{"italic":"true","bold":"true"}}]"#,
  94. ),
  95. Insert(0, "5678"),
  96. AssertOpsJson(
  97. 0,
  98. r#"[{"insert":"12345678","attributes":{"italic":"true","bold":"true"}}]"#,
  99. ),
  100. Italic(0, Interval::new(4, 6), false),
  101. AssertOpsJson(
  102. 0,
  103. r#"[{"insert":"1234","attributes":{"italic":"true","bold":"true"}},{"insert":"56"},{"insert":"78","attributes":{"bold":"true","italic":"true"}}]"#,
  104. ),
  105. ];
  106. MergeTest::new().run_script(ops);
  107. }
  108. #[test]
  109. fn delta_merge_inserted_text_with_same_attribute() {
  110. let ops = vec![
  111. InsertBold(0, "123", Interval::new(0, 3)),
  112. AssertOpsJson(0, r#"[{"insert":"123","attributes":{"bold":"true"}}]"#),
  113. InsertBold(0, "456", Interval::new(3, 6)),
  114. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  115. ];
  116. MergeTest::new().run_script(ops);
  117. }
  118. #[test]
  119. fn delta_compose_attr_delta_with_no_attr_delta_test() {
  120. let expected = r#"[{"insert":"123456","attributes":{"bold":"true"}},{"insert":"7"}]"#;
  121. let ops = vec![
  122. InsertBold(0, "123456", Interval::new(0, 6)),
  123. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  124. Insert(1, "7"),
  125. AssertOpsJson(1, r#"[{"insert":"7"}]"#),
  126. Transform(0, 1),
  127. AssertOpsJson(0, expected),
  128. AssertOpsJson(1, expected),
  129. ];
  130. MergeTest::new().run_script(ops);
  131. }
  132. #[test]
  133. fn delta_compose_attr_delta_with_attr_delta_test() {
  134. let ops = vec![
  135. InsertBold(0, "123456", Interval::new(0, 6)),
  136. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  137. InsertBold(1, "7", Interval::new(0, 1)),
  138. AssertOpsJson(1, r#"[{"insert":"7","attributes":{"bold":"true"}}]"#),
  139. Transform(0, 1),
  140. AssertOpsJson(0, r#"[{"insert":"1234567","attributes":{"bold":"true"}}]"#),
  141. AssertOpsJson(1, r#"[{"insert":"1234567","attributes":{"bold":"true"}}]"#),
  142. ];
  143. MergeTest::new().run_script(ops);
  144. }
  145. #[test]
  146. fn delta_delete_heading() {
  147. let ops = vec![
  148. InsertBold(0, "123456", Interval::new(0, 6)),
  149. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  150. Delete(0, Interval::new(0, 2)),
  151. AssertOpsJson(0, r#"[{"insert":"3456","attributes":{"bold":"true"}}]"#),
  152. ];
  153. MergeTest::new().run_script(ops);
  154. }
  155. #[test]
  156. fn delta_delete_trailing() {
  157. let ops = vec![
  158. InsertBold(0, "123456", Interval::new(0, 6)),
  159. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  160. Delete(0, Interval::new(5, 6)),
  161. AssertOpsJson(0, r#"[{"insert":"12345","attributes":{"bold":"true"}}]"#),
  162. ];
  163. MergeTest::new().run_script(ops);
  164. }
  165. #[test]
  166. fn delta_delete_middle() {
  167. let ops = vec![
  168. InsertBold(0, "123456", Interval::new(0, 6)),
  169. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  170. Delete(0, Interval::new(0, 2)),
  171. AssertOpsJson(0, r#"[{"insert":"3456","attributes":{"bold":"true"}}]"#),
  172. Delete(0, Interval::new(2, 4)),
  173. AssertOpsJson(0, r#"[{"insert":"34","attributes":{"bold":"true"}}]"#),
  174. ];
  175. MergeTest::new().run_script(ops);
  176. }
  177. #[test]
  178. fn delta_delete_all() {
  179. let ops = vec![
  180. InsertBold(0, "123456", Interval::new(0, 6)),
  181. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  182. Delete(0, Interval::new(0, 6)),
  183. AssertOpsJson(0, r#"[]"#),
  184. ];
  185. MergeTest::new().run_script(ops);
  186. }