local_revision_test.rs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. use crate::revision_test::script::{RevisionScript::*, RevisionTest};
  2. use flowy_revision::REVISION_WRITE_INTERVAL_IN_MILLIS;
  3. #[tokio::test]
  4. async fn revision_sync_test() {
  5. let test = RevisionTest::new().await;
  6. let (base_rev_id, rev_id) = test.next_rev_id_pair();
  7. test.run_script(AddLocalRevision {
  8. content: "123".to_string(),
  9. base_rev_id,
  10. rev_id,
  11. })
  12. .await;
  13. test.run_script(AssertNextSyncRevisionId { rev_id: Some(rev_id) }).await;
  14. test.run_script(AckRevision { rev_id }).await;
  15. test.run_script(AssertNextSyncRevisionId { rev_id: None }).await;
  16. }
  17. #[tokio::test]
  18. async fn revision_sync_multiple_revisions() {
  19. let test = RevisionTest::new().await;
  20. let (base_rev_id, rev_id_1) = test.next_rev_id_pair();
  21. test.run_script(AddLocalRevision {
  22. content: "123".to_string(),
  23. base_rev_id,
  24. rev_id: rev_id_1,
  25. })
  26. .await;
  27. let (base_rev_id, rev_id_2) = test.next_rev_id_pair();
  28. test.run_script(AddLocalRevision {
  29. content: "456".to_string(),
  30. base_rev_id,
  31. rev_id: rev_id_2,
  32. })
  33. .await;
  34. test.run_scripts(vec![
  35. AssertNextSyncRevisionId { rev_id: Some(rev_id_1) },
  36. AckRevision { rev_id: rev_id_1 },
  37. AssertNextSyncRevisionId { rev_id: Some(rev_id_2) },
  38. AckRevision { rev_id: rev_id_2 },
  39. AssertNextSyncRevisionId { rev_id: None },
  40. ])
  41. .await;
  42. }
  43. #[tokio::test]
  44. async fn revision_compress_two_revisions_test() {
  45. let test = RevisionTest::new().await;
  46. let (base_rev_id, rev_id_1) = test.next_rev_id_pair();
  47. test.run_script(AddLocalRevision {
  48. content: "123".to_string(),
  49. base_rev_id,
  50. rev_id: rev_id_1,
  51. })
  52. .await;
  53. // rev_id_2 will be merged with rev_id_3
  54. let (base_rev_id, rev_id_2) = test.next_rev_id_pair();
  55. test.run_script(AddLocalRevision {
  56. content: "456".to_string(),
  57. base_rev_id,
  58. rev_id: rev_id_2,
  59. })
  60. .await;
  61. let (base_rev_id, rev_id_3) = test.next_rev_id_pair();
  62. test.run_script(AddLocalRevision {
  63. content: "789".to_string(),
  64. base_rev_id,
  65. rev_id: rev_id_3,
  66. })
  67. .await;
  68. test.run_scripts(vec![
  69. Wait {
  70. milliseconds: REVISION_WRITE_INTERVAL_IN_MILLIS,
  71. },
  72. AssertNextSyncRevisionId { rev_id: Some(rev_id_1) },
  73. AckRevision { rev_id: rev_id_1 },
  74. AssertNextSyncRevisionId { rev_id: Some(rev_id_2) },
  75. AssertNextSyncRevisionContent {
  76. expected: "456789".to_string(),
  77. },
  78. ])
  79. .await;
  80. }
  81. #[tokio::test]
  82. async fn revision_compress_multiple_revisions_test() {
  83. let test = RevisionTest::new().await;
  84. let mut expected = "".to_owned();
  85. for i in 0..100 {
  86. let content = format!("{}", i);
  87. if i != 0 {
  88. expected.push_str(&content);
  89. }
  90. let (base_rev_id, rev_id) = test.next_rev_id_pair();
  91. test.run_script(AddLocalRevision {
  92. content,
  93. base_rev_id,
  94. rev_id,
  95. })
  96. .await;
  97. }
  98. test.run_scripts(vec![
  99. Wait {
  100. milliseconds: REVISION_WRITE_INTERVAL_IN_MILLIS,
  101. },
  102. AssertNextSyncRevisionId { rev_id: Some(1) },
  103. AckRevision { rev_id: 1 },
  104. AssertNextSyncRevisionId { rev_id: Some(2) },
  105. AssertNextSyncRevisionContent { expected },
  106. ])
  107. .await;
  108. }