helper.rs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. use crate::helper::TestServer;
  2. use flowy_ws::{WsController, WsModule, WsSender, WsState};
  3. use parking_lot::RwLock;
  4. use std::sync::Arc;
  5. pub struct WsTest {
  6. server: TestServer,
  7. ws_controller: Arc<RwLock<WsController>>,
  8. }
  9. #[derive(Clone)]
  10. pub enum WsScript {
  11. SendText(&'static str),
  12. SendBinary(Vec<u8>),
  13. Disconnect(&'static str),
  14. }
  15. impl WsTest {
  16. pub async fn new(scripts: Vec<WsScript>) -> Self {
  17. let server = TestServer::new().await;
  18. let ws_controller = Arc::new(RwLock::new(WsController::new()));
  19. ws_controller
  20. .write()
  21. .state_callback(move |state| match state {
  22. WsState::Connected(sender) => {
  23. WsScriptRunner {
  24. scripts: scripts.clone(),
  25. sender: sender.clone(),
  26. source: WsModule::Doc,
  27. }
  28. .run();
  29. },
  30. _ => {},
  31. })
  32. .await;
  33. Self {
  34. server,
  35. ws_controller,
  36. }
  37. }
  38. pub async fn run_scripts(&mut self) {
  39. let addr = self.server.ws_addr();
  40. self.ws_controller
  41. .write()
  42. .connect(addr)
  43. .unwrap()
  44. .await
  45. .unwrap();
  46. }
  47. }
  48. struct WsScriptRunner {
  49. scripts: Vec<WsScript>,
  50. sender: Arc<WsSender>,
  51. source: WsModule,
  52. }
  53. impl WsScriptRunner {
  54. fn run(self) {
  55. for script in self.scripts {
  56. match script {
  57. WsScript::SendText(text) => {
  58. self.sender.send_text(&self.source, text).unwrap();
  59. },
  60. WsScript::SendBinary(bytes) => {
  61. self.sender.send_binary(&self.source, bytes).unwrap();
  62. },
  63. WsScript::Disconnect(reason) => {
  64. self.sender.send_disconnect(reason).unwrap();
  65. },
  66. }
  67. }
  68. }
  69. }