From c5839c94ca3e520bd5c25e0266384a4d9b102356 Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Tue, 8 Oct 2019 13:25:34 -0700 Subject: [PATCH] Add test-only MessageQueue::subscribe_any. This makes writing tests that do async things easier. --- src/message_queue.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/message_queue.rs b/src/message_queue.rs index 23c6cd94..6591e0c7 100644 --- a/src/message_queue.rs +++ b/src/message_queue.rs @@ -61,6 +61,7 @@ impl MessageQueue { mem::replace::>(&mut message_listeners, remaining_listeners); } + /// Subscribe to any messages occurring after the given message cursor. pub fn subscribe(&self, cursor: u32, sender: oneshot::Sender<(u32, Vec)>) { let listener = { let listener = Listener { sender, cursor }; @@ -77,6 +78,22 @@ impl MessageQueue { message_listeners.push(listener); } + /// Subscribe to any messages being pushed into the queue. + /// + /// This method is only useful in tests. Non-test code should use subscribe + /// instead. + #[cfg(test)] + pub fn subscribe_any(&self) -> oneshot::Receiver<(u32, Vec)> { + let cursor = { + let messages = self.messages.read().unwrap(); + messages.len() as u32 + }; + let (sender, receiver) = oneshot::channel(); + + self.subscribe(cursor, sender); + receiver + } + pub fn cursor(&self) -> u32 { self.messages.read().unwrap().len() as u32 }