operation_test.rs 2.0 KB

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