main.rs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. use lib_ot::core::{DocumentTree, NodeData, Position, TransactionBuilder};
  2. use std::collections::HashMap;
  3. #[test]
  4. fn main() {
  5. // Create a new arena
  6. let _document = DocumentTree::new();
  7. }
  8. #[test]
  9. fn test_documents() {
  10. let mut document = DocumentTree::new();
  11. let transaction = {
  12. let mut tb = TransactionBuilder::new(&document);
  13. tb.insert_nodes_at_path(&vec![0].into(), &vec![NodeData::new("text")]);
  14. tb.finalize()
  15. };
  16. document.apply(transaction);
  17. assert!(document.node_at_path(&vec![0].into()).is_some());
  18. let node = document.node_at_path(&vec![0].into()).unwrap();
  19. let node_data = document.arena.get(node).unwrap().get();
  20. assert_eq!(node_data.node_type, "text");
  21. let transaction = {
  22. let mut tb = TransactionBuilder::new(&document);
  23. tb.update_attributes_at_path(
  24. &vec![0].into(),
  25. HashMap::from([("subtype".into(), Some("bullet-list".into()))]),
  26. );
  27. tb.finalize()
  28. };
  29. document.apply(transaction);
  30. let transaction = {
  31. let mut tb = TransactionBuilder::new(&document);
  32. tb.delete_node_at_path(&vec![0].into());
  33. tb.finalize()
  34. };
  35. document.apply(transaction);
  36. assert!(document.node_at_path(&vec![0].into()).is_none());
  37. }
  38. #[test]
  39. fn test_inserts_nodes() {
  40. let mut document = DocumentTree::new();
  41. let transaction = {
  42. let mut tb = TransactionBuilder::new(&document);
  43. tb.insert_nodes_at_path(&vec![0].into(), &vec![NodeData::new("text")]);
  44. tb.insert_nodes_at_path(&vec![1].into(), &vec![NodeData::new("text")]);
  45. tb.insert_nodes_at_path(&vec![2].into(), &vec![NodeData::new("text")]);
  46. tb.finalize()
  47. };
  48. document.apply(transaction);
  49. let transaction = {
  50. let mut tb = TransactionBuilder::new(&document);
  51. tb.insert_nodes_at_path(&vec![1].into(), &vec![NodeData::new("text")]);
  52. tb.finalize()
  53. };
  54. document.apply(transaction);
  55. }
  56. #[test]
  57. fn test_update_nodes() {
  58. let mut document = DocumentTree::new();
  59. let transaction = {
  60. let mut tb = TransactionBuilder::new(&document);
  61. tb.insert_nodes_at_path(&vec![0].into(), &vec![NodeData::new("text")]);
  62. tb.insert_nodes_at_path(&vec![1].into(), &vec![NodeData::new("text")]);
  63. tb.insert_nodes_at_path(&vec![2].into(), &vec![NodeData::new("text")]);
  64. tb.finalize()
  65. };
  66. document.apply(transaction);
  67. let transaction = {
  68. let mut tb = TransactionBuilder::new(&document);
  69. tb.update_attributes_at_path(&vec![1].into(), HashMap::from([("bolded".into(), Some("true".into()))]));
  70. tb.finalize()
  71. };
  72. document.apply(transaction);
  73. let node = document.node_at_path(&Position(vec![1])).unwrap();
  74. let node_data = document.arena.get(node).unwrap().get();
  75. let is_bold = node_data.attributes.borrow().0.get("bolded").unwrap().clone();
  76. assert_eq!(is_bold.unwrap(), "true");
  77. }
  78. #[test]
  79. fn test_delete_nodes() {
  80. let mut document = DocumentTree::new();
  81. let transaction = {
  82. let mut tb = TransactionBuilder::new(&document);
  83. tb.insert_nodes_at_path(&vec![0].into(), &vec![NodeData::new("text")]);
  84. tb.insert_nodes_at_path(&vec![1].into(), &vec![NodeData::new("text")]);
  85. tb.insert_nodes_at_path(&vec![2].into(), &vec![NodeData::new("text")]);
  86. tb.finalize()
  87. };
  88. document.apply(transaction);
  89. let transaction = {
  90. let mut tb = TransactionBuilder::new(&document);
  91. tb.delete_node_at_path(&Position(vec![1]));
  92. tb.finalize()
  93. };
  94. document.apply(transaction);
  95. let len = document.root.children(&document.arena).fold(0, |count, _| count + 1);
  96. assert_eq!(len, 2);
  97. }