operation_test.rs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. use lib_ot::core::AttributeBuilder;
  2. use lib_ot::{
  3. core::{NodeBodyChangeset, NodeData, NodeDataBuilder, NodeOperation, Path},
  4. text_delta::TextDeltaBuilder,
  5. };
  6. #[test]
  7. fn operation_insert_node_serde_test() {
  8. let insert = NodeOperation::Insert {
  9. path: Path(vec![0, 1]),
  10. nodes: vec![NodeData::new("text".to_owned())],
  11. };
  12. let result = serde_json::to_string(&insert).unwrap();
  13. assert_eq!(result, r#"{"op":"insert","path":[0,1],"nodes":[{"type":"text"}]}"#);
  14. }
  15. #[test]
  16. fn operation_insert_node_with_children_serde_test() {
  17. let node = NodeDataBuilder::new("text")
  18. .add_node(NodeData::new("sub_text".to_owned()))
  19. .build();
  20. let insert = NodeOperation::Insert {
  21. path: Path(vec![0, 1]),
  22. nodes: vec![node],
  23. };
  24. assert_eq!(
  25. serde_json::to_string(&insert).unwrap(),
  26. r#"{"op":"insert","path":[0,1],"nodes":[{"type":"text","children":[{"type":"sub_text"}]}]}"#
  27. );
  28. }
  29. #[test]
  30. fn operation_update_node_attributes_serde_test() {
  31. let operation = NodeOperation::UpdateAttributes {
  32. path: Path(vec![0, 1]),
  33. attributes: AttributeBuilder::new().insert("bold", true).build(),
  34. old_attributes: AttributeBuilder::new().insert("bold", false).build(),
  35. };
  36. let result = serde_json::to_string(&operation).unwrap();
  37. assert_eq!(
  38. result,
  39. r#"{"op":"update","path":[0,1],"attributes":{"bold":true},"oldAttributes":{"bold":false}}"#
  40. );
  41. }
  42. #[test]
  43. fn operation_update_node_body_serialize_test() {
  44. let delta = TextDeltaBuilder::new().insert("AppFlowy...").build();
  45. let inverted = delta.invert_str("");
  46. let changeset = NodeBodyChangeset::Delta { delta, inverted };
  47. let insert = NodeOperation::UpdateBody {
  48. path: Path(vec![0, 1]),
  49. changeset,
  50. };
  51. let result = serde_json::to_string(&insert).unwrap();
  52. assert_eq!(
  53. result,
  54. r#"{"op":"update-body","path":[0,1],"changeset":{"delta":{"delta":[{"insert":"AppFlowy..."}],"inverted":[{"delete":11}]}}}"#
  55. );
  56. //
  57. }
  58. #[test]
  59. fn operation_update_node_body_deserialize_test() {
  60. let json_1 = r#"{"op":"update-body","path":[0,1],"changeset":{"delta":{"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. }