main.rs 4.2 KB

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