serde_test.rs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. use flowy_sync::client_document::{ClientDocument, EmptyDoc};
  2. use lib_ot::text_delta::TextOperation;
  3. use lib_ot::{
  4. core::*,
  5. text_delta::{BuildInTextAttribute, TextOperations},
  6. };
  7. #[test]
  8. fn operation_insert_serialize_test() {
  9. let attributes = AttributeBuilder::new()
  10. .insert("bold", true)
  11. .insert("italic", true)
  12. .build();
  13. let operation = DeltaOperation::insert_with_attributes("123", attributes);
  14. let json = serde_json::to_string(&operation).unwrap();
  15. eprintln!("{}", json);
  16. let insert_op: TextOperation = serde_json::from_str(&json).unwrap();
  17. assert_eq!(insert_op, operation);
  18. }
  19. #[test]
  20. fn operation_retain_serialize_test() {
  21. let operation = DeltaOperation::Retain(12.into());
  22. let json = serde_json::to_string(&operation).unwrap();
  23. eprintln!("{}", json);
  24. let insert_op: TextOperation = serde_json::from_str(&json).unwrap();
  25. assert_eq!(insert_op, operation);
  26. }
  27. #[test]
  28. fn operation_delete_serialize_test() {
  29. let operation = TextOperation::Delete(2);
  30. let json = serde_json::to_string(&operation).unwrap();
  31. let insert_op: TextOperation = 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. .insert_entry(BuildInTextAttribute::Bold(true))
  38. .insert_entry(BuildInTextAttribute::Italic(true))
  39. .build();
  40. let retain = DeltaOperation::insert_with_attributes("123", attributes);
  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 = DeltaOperations::default();
  47. let attributes = AttributeBuilder::new()
  48. .insert_entry(BuildInTextAttribute::Bold(true))
  49. .insert_entry(BuildInTextAttribute::Italic(true))
  50. .build();
  51. let retain = DeltaOperation::insert_with_attributes("123", attributes);
  52. delta.add(retain);
  53. delta.add(DeltaOperation::Retain(5.into()));
  54. delta.add(DeltaOperation::Delete(3));
  55. let json = serde_json::to_string(&delta).unwrap();
  56. eprintln!("{}", json);
  57. let delta_from_json = DeltaOperations::from_json(&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 = TextOperations::from_json(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 = TextOperations::from_json(json).unwrap();
  77. let mut attribute = BuildInTextAttribute::Bold(true);
  78. attribute.remove_value();
  79. let delta2 = OperationBuilder::new()
  80. .retain_with_attributes(7, attribute.into())
  81. .build();
  82. assert_eq!(delta2.json_str(), r#"[{"retain":7,"attributes":{"bold":null}}]"#);
  83. assert_eq!(delta1, delta2);
  84. }
  85. #[test]
  86. fn document_insert_serde_test() {
  87. let mut document = ClientDocument::new::<EmptyDoc>();
  88. document.insert(0, "\n").unwrap();
  89. document.insert(0, "123").unwrap();
  90. let json = document.get_operations_json();
  91. assert_eq!(r#"[{"insert":"123\n"}]"#, json);
  92. assert_eq!(
  93. r#"[{"insert":"123\n"}]"#,
  94. ClientDocument::from_json(&json).unwrap().get_operations_json()
  95. );
  96. }