operation_test.rs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. use lib_ot::{
  2. core::{NodeAttributeBuilder, NodeBodyChangeset, NodeData, NodeDataBuilder, NodeOperation, Path},
  3. rich_text::RichTextDeltaBuilder,
  4. };
  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::UpdateAttributes {
  31. path: Path(vec![0, 1]),
  32. attributes: NodeAttributeBuilder::new().insert("bold", true).build(),
  33. old_attributes: NodeAttributeBuilder::new().insert("bold", false).build(),
  34. };
  35. let result = serde_json::to_string(&operation).unwrap();
  36. assert_eq!(
  37. result,
  38. r#"{"op":"update","path":[0,1],"attributes":{"bold":true},"oldAttributes":{"bold":false}}"#
  39. );
  40. }
  41. #[test]
  42. fn operation_update_node_body_serialize_test() {
  43. let delta = RichTextDeltaBuilder::new().insert("AppFlowy...").build();
  44. let inverted = delta.invert_str("");
  45. let changeset = NodeBodyChangeset::Delta { delta, inverted };
  46. let insert = NodeOperation::UpdateBody {
  47. path: Path(vec![0, 1]),
  48. changeset,
  49. };
  50. let result = serde_json::to_string(&insert).unwrap();
  51. assert_eq!(
  52. result,
  53. r#"{"op":"update-body","path":[0,1],"changeset":{"delta":{"delta":[{"insert":"AppFlowy..."}],"inverted":[{"delete":11}]}}}"#
  54. );
  55. //
  56. }
  57. #[test]
  58. fn operation_update_node_body_deserialize_test() {
  59. let json_1 = r#"{"op":"update-body","path":[0,1],"changeset":{"delta":{"delta":[{"insert":"AppFlowy..."}],"inverted":[{"delete":11}]}}}"#;
  60. let operation: NodeOperation = serde_json::from_str(json_1).unwrap();
  61. let json_2 = serde_json::to_string(&operation).unwrap();
  62. assert_eq!(json_1, json_2);
  63. }