serde_test.rs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. use flowy_collaboration::client_document::{ClientDocument, PlainDoc};
  2. use lib_ot::rich_text::RichTextOperation;
  3. use lib_ot::{
  4. core::*,
  5. rich_text::{AttributeBuilder, RichTextAttribute, RichTextAttributeValue, RichTextDelta},
  6. };
  7. #[test]
  8. fn operation_insert_serialize_test() {
  9. let attributes = AttributeBuilder::new()
  10. .add_attr(RichTextAttribute::Bold(true))
  11. .add_attr(RichTextAttribute::Italic(true))
  12. .build();
  13. let operation = OpBuilder::insert("123").attributes(attributes).build();
  14. let json = serde_json::to_string(&operation).unwrap();
  15. eprintln!("{}", json);
  16. let insert_op: RichTextOperation = serde_json::from_str(&json).unwrap();
  17. assert_eq!(insert_op, operation);
  18. }
  19. #[test]
  20. fn operation_retain_serialize_test() {
  21. let operation = Operation::Retain(12.into());
  22. let json = serde_json::to_string(&operation).unwrap();
  23. eprintln!("{}", json);
  24. let insert_op: RichTextOperation = serde_json::from_str(&json).unwrap();
  25. assert_eq!(insert_op, operation);
  26. }
  27. #[test]
  28. fn operation_delete_serialize_test() {
  29. let operation = RichTextOperation::Delete(2);
  30. let json = serde_json::to_string(&operation).unwrap();
  31. let insert_op: RichTextOperation = serde_json::from_str(&json).unwrap();
  32. assert_eq!(insert_op, operation);
  33. }
  34. #[test]
  35. fn attributes_serialize_test() {
  36. let attributes = AttributeBuilder::new()
  37. .add_attr(RichTextAttribute::Bold(true))
  38. .add_attr(RichTextAttribute::Italic(true))
  39. .build();
  40. let retain = OpBuilder::insert("123").attributes(attributes).build();
  41. let json = serde_json::to_string(&retain).unwrap();
  42. eprintln!("{}", json);
  43. }
  44. #[test]
  45. fn delta_serialize_multi_attribute_test() {
  46. let mut delta = Delta::default();
  47. let attributes = AttributeBuilder::new()
  48. .add_attr(RichTextAttribute::Bold(true))
  49. .add_attr(RichTextAttribute::Italic(true))
  50. .build();
  51. let retain = OpBuilder::insert("123").attributes(attributes).build();
  52. delta.add(retain);
  53. delta.add(Operation::Retain(5.into()));
  54. delta.add(Operation::Delete(3));
  55. let json = serde_json::to_string(&delta).unwrap();
  56. eprintln!("{}", json);
  57. let delta_from_json = Delta::from_delta_str(&json).unwrap();
  58. assert_eq!(delta_from_json, delta);
  59. }
  60. #[test]
  61. fn delta_deserialize_test() {
  62. let json = r#"[
  63. {"retain":2,"attributes":{"italic":true}},
  64. {"retain":2,"attributes":{"italic":123}},
  65. {"retain":2,"attributes":{"italic":"true","bold":"true"}},
  66. {"retain":2,"attributes":{"italic":true,"bold":true}}
  67. ]"#;
  68. let delta = RichTextDelta::from_delta_str(json).unwrap();
  69. eprintln!("{}", delta);
  70. }
  71. #[test]
  72. fn delta_deserialize_null_test() {
  73. let json = r#"[
  74. {"retain":7,"attributes":{"bold":null}}
  75. ]"#;
  76. let delta1 = RichTextDelta::from_delta_str(json).unwrap();
  77. let mut attribute = RichTextAttribute::Bold(true);
  78. attribute.value = RichTextAttributeValue(None);
  79. let delta2 = DeltaBuilder::new().retain_with_attributes(7, attribute.into()).build();
  80. assert_eq!(delta2.to_delta_str(), r#"[{"retain":7,"attributes":{"bold":""}}]"#);
  81. assert_eq!(delta1, delta2);
  82. }
  83. #[test]
  84. fn delta_serde_null_test() {
  85. let mut attribute = RichTextAttribute::Bold(true);
  86. attribute.value = RichTextAttributeValue(None);
  87. assert_eq!(attribute.to_json(), r#"{"bold":""}"#);
  88. }
  89. #[test]
  90. fn document_insert_serde_test() {
  91. let mut document = ClientDocument::new::<PlainDoc>();
  92. document.insert(0, "\n").unwrap();
  93. document.insert(0, "123").unwrap();
  94. let json = document.delta_str();
  95. assert_eq!(r#"[{"insert":"123\n"}]"#, json);
  96. assert_eq!(
  97. r#"[{"insert":"123\n"}]"#,
  98. ClientDocument::from_json(&json).unwrap().delta_str()
  99. );
  100. }