serde_test.rs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. use lib_ot::core::{
  2. AttributeBuilder, Changeset, Extension, Interval, NodeData, NodeDataBuilder, NodeOperation, Path, Transaction,
  3. };
  4. use lib_ot::text_delta::TextOperationBuilder;
  5. #[test]
  6. fn operation_insert_node_serde_test() {
  7. let insert = NodeOperation::Insert {
  8. path: Path(vec![0, 1]),
  9. nodes: vec![NodeData::new("text".to_owned())],
  10. };
  11. let result = serde_json::to_string(&insert).unwrap();
  12. assert_eq!(result, r#"{"op":"insert","path":[0,1],"nodes":[{"type":"text"}]}"#);
  13. }
  14. #[test]
  15. fn operation_insert_node_with_children_serde_test() {
  16. let node = NodeDataBuilder::new("text")
  17. .add_node(NodeData::new("sub_text".to_owned()))
  18. .build();
  19. let insert = NodeOperation::Insert {
  20. path: Path(vec![0, 1]),
  21. nodes: vec![node],
  22. };
  23. assert_eq!(
  24. serde_json::to_string(&insert).unwrap(),
  25. r#"{"op":"insert","path":[0,1],"nodes":[{"type":"text","children":[{"type":"sub_text"}]}]}"#
  26. );
  27. }
  28. #[test]
  29. fn operation_update_node_attributes_serde_test() {
  30. let operation = NodeOperation::Update {
  31. path: Path(vec![0, 1]),
  32. changeset: Changeset::Attributes {
  33. new: AttributeBuilder::new().insert("bold", true).build(),
  34. old: AttributeBuilder::new().insert("bold", false).build(),
  35. },
  36. };
  37. let result = serde_json::to_string(&operation).unwrap();
  38. assert_eq!(
  39. result,
  40. r#"{"op":"update","path":[0,1],"new":{"bold":true},"old":{"bold":null}}"#
  41. );
  42. }
  43. #[test]
  44. fn operation_update_node_body_serialize_test() {
  45. let delta = TextOperationBuilder::new().insert("AppFlowy...").build();
  46. let inverted = delta.invert_str("");
  47. let changeset = Changeset::Delta { delta, inverted };
  48. let insert = NodeOperation::Update {
  49. path: Path(vec![0, 1]),
  50. changeset,
  51. };
  52. let result = serde_json::to_string(&insert).unwrap();
  53. assert_eq!(
  54. result,
  55. r#"{"op":"update","path":[0,1],"delta":[{"insert":"AppFlowy..."}],"inverted":[{"delete":11}]}"#
  56. );
  57. }
  58. #[test]
  59. fn operation_update_node_body_deserialize_test() {
  60. let json_1 = r#"{"op":"update","path":[0,1],"delta":[{"insert":"AppFlowy..."}],"inverted":[{"delete":11}]}"#;
  61. let operation: NodeOperation = serde_json::from_str(json_1).unwrap();
  62. let json_2 = serde_json::to_string(&operation).unwrap();
  63. assert_eq!(json_1, json_2);
  64. }
  65. #[test]
  66. fn transaction_serialize_test() {
  67. let insert = NodeOperation::Insert {
  68. path: Path(vec![0, 1]),
  69. nodes: vec![NodeData::new("text".to_owned())],
  70. };
  71. let mut transaction = Transaction::from_operations(vec![insert]);
  72. transaction.extension = Extension::TextSelection {
  73. before_selection: Interval::new(0, 1),
  74. after_selection: Interval::new(1, 2),
  75. };
  76. let json = serde_json::to_string(&transaction).unwrap();
  77. assert_eq!(
  78. json,
  79. r#"{"operations":[{"op":"insert","path":[0,1],"nodes":[{"type":"text"}]}],"TextSelection":{"before_selection":{"start":0,"end":1},"after_selection":{"start":1,"end":2}}}"#
  80. );
  81. }
  82. #[test]
  83. fn transaction_deserialize_test() {
  84. let json = r#"{"operations":[{"op":"insert","path":[0,1],"nodes":[{"type":"text"}]}],"TextSelection":{"before_selection":{"start":0,"end":1},"after_selection":{"start":1,"end":2}}}"#;
  85. let transaction: Transaction = serde_json::from_str(json).unwrap();
  86. assert_eq!(transaction.operations.len(), 1);
  87. }