attribute_test.rs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. pub mod helper;
  2. use crate::{
  3. helper::{MergeTestOp::*, *},
  4. MergeTestOp::*,
  5. };
  6. use flowy_ot::{
  7. attributes::{Attributes, AttrsBuilder},
  8. delta::Delta,
  9. interval::Interval,
  10. operation::{OpBuilder, Operation, Retain},
  11. };
  12. #[test]
  13. fn delta_add_bold_attr1() {
  14. let ops = vec![
  15. Insert(0, "123"),
  16. Bold(0, Interval::new(0, 3), true),
  17. AssertOpsJson(0, r#"[{"insert":"123","attributes":{"bold":"true"}}]"#),
  18. Bold(0, Interval::new(0, 3), false),
  19. AssertOpsJson(0, r#"[{"insert":"123"}]"#),
  20. ];
  21. MergeTest::new().run_script(ops);
  22. }
  23. #[test]
  24. fn delta_add_bold_attr2() {
  25. let ops = vec![
  26. Insert(0, "1234"),
  27. Bold(0, Interval::new(0, 4), true),
  28. AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),
  29. Bold(0, Interval::new(2, 4), false),
  30. AssertOpsJson(
  31. 0,
  32. r#"[{"insert":"12","attributes":{"bold":"true"}},{"insert":"34"}]"#,
  33. ),
  34. ];
  35. MergeTest::new().run_script(ops);
  36. }
  37. #[test]
  38. fn delta_add_bold_attr3() {
  39. let ops = vec![
  40. Insert(0, "1234"),
  41. Bold(0, Interval::new(0, 4), true),
  42. AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),
  43. Bold(0, Interval::new(0, 2), false),
  44. AssertOpsJson(
  45. 0,
  46. r#"[{"insert":"12"},{"insert":"34","attributes":{"bold":"true"}}]"#,
  47. ),
  48. ];
  49. MergeTest::new().run_script(ops);
  50. }
  51. #[test]
  52. fn delta_add_bold_italic() {
  53. let ops = vec![
  54. Insert(0, "1234"),
  55. Bold(0, Interval::new(0, 4), true),
  56. Italic(0, Interval::new(0, 4), true),
  57. AssertOpsJson(
  58. 0,
  59. r#"[{"insert":"1234","attributes":{"italic":"true","bold":"true"}}]"#,
  60. ),
  61. Insert(0, "5678"),
  62. AssertOpsJson(
  63. 0,
  64. r#"[{"insert":"12345678","attributes":{"italic":"true","bold":"true"}}]"#,
  65. ),
  66. Italic(0, Interval::new(4, 6), false),
  67. AssertOpsJson(
  68. 0,
  69. r#"[{"insert":"1234","attributes":{"italic":"true","bold":"true"}},{"insert":"56"},{"insert":"78","attributes":{"bold":"true","italic":"true"}}]"#,
  70. ),
  71. ];
  72. MergeTest::new().run_script(ops);
  73. }
  74. #[test]
  75. fn delta_add_bold_attr_and_invert() {
  76. let ops = vec![
  77. Insert(0, "1234"),
  78. Bold(0, Interval::new(0, 4), true),
  79. AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),
  80. Bold(0, Interval::new(2, 4), false),
  81. AssertOpsJson(
  82. 0,
  83. r#"[{"insert":"12","attributes":{"bold":"true"}},{"insert":"34"}]"#,
  84. ),
  85. Bold(0, Interval::new(2, 4), true),
  86. AssertOpsJson(0, r#"[{"insert":"1234","attributes":{"bold":"true"}}]"#),
  87. ];
  88. MergeTest::new().run_script(ops);
  89. }
  90. #[test]
  91. fn delta_merge_inserted_text_with_same_attribute() {
  92. let ops = vec![
  93. InsertBold(0, "123", Interval::new(0, 3)),
  94. AssertOpsJson(0, r#"[{"insert":"123","attributes":{"bold":"true"}}]"#),
  95. InsertBold(0, "456", Interval::new(3, 6)),
  96. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  97. ];
  98. MergeTest::new().run_script(ops);
  99. }
  100. #[test]
  101. fn delta_compose_attr_delta_with_no_attr_delta_test() {
  102. let expected = r#"[{"insert":"123456","attributes":{"bold":"true"}},{"insert":"7"}]"#;
  103. let ops = vec![
  104. InsertBold(0, "123456", Interval::new(0, 6)),
  105. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  106. Insert(1, "7"),
  107. AssertOpsJson(1, r#"[{"insert":"7"}]"#),
  108. Transform(0, 1),
  109. AssertOpsJson(0, expected),
  110. AssertOpsJson(1, expected),
  111. ];
  112. MergeTest::new().run_script(ops);
  113. }
  114. #[test]
  115. fn delta_compose_attr_delta_with_attr_delta_test() {
  116. let ops = vec![
  117. InsertBold(0, "123456", Interval::new(0, 6)),
  118. AssertOpsJson(0, r#"[{"insert":"123456","attributes":{"bold":"true"}}]"#),
  119. InsertBold(1, "7", Interval::new(0, 1)),
  120. AssertOpsJson(1, r#"[{"insert":"7","attributes":{"bold":"true"}}]"#),
  121. Transform(0, 1),
  122. AssertOpsJson(0, r#"[{"insert":"1234567","attributes":{"bold":"true"}}]"#),
  123. AssertOpsJson(1, r#"[{"insert":"1234567","attributes":{"bold":"true"}}]"#),
  124. ];
  125. MergeTest::new().run_script(ops);
  126. }