serde_test.rs 3.6 KB

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