| // Copyright 2023 Google LLC |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| use std::task::Poll; |
| |
| use assert_matches::assert_matches; |
| use futures::channel::mpsc::unbounded; |
| use futures::stream::StreamExt; |
| |
| use crate::client::error::Error; |
| use crate::client::event::*; |
| use crate::test_utils::*; |
| use bt_bap::types::BroadcastId; |
| |
| #[test] |
| fn fake_bass_event_stream() { |
| let (sender, receiver) = unbounded(); |
| let mut stream = FakeBassEventStream::new(receiver); |
| |
| let mut noop_cx = futures::task::Context::from_waker(futures::task::noop_waker_ref()); |
| assert!(stream.poll_next_unpin(&mut noop_cx).is_pending()); |
| |
| // Add events. |
| sender |
| .unbounded_send(Ok(Event::SyncedToPa(BroadcastId::try_from(1).unwrap()))) |
| .expect("should succeed"); |
| sender |
| .unbounded_send(Ok(Event::BroadcastCodeRequired(BroadcastId::try_from(1).unwrap()))) |
| .expect("should succeed"); |
| |
| let polled = stream.poll_next_unpin(&mut noop_cx); |
| let Poll::Ready(Some(Ok(event))) = polled else { |
| panic!("Expected to receive event"); |
| }; |
| assert_matches!(event, Event::SyncedToPa(_)); |
| |
| let polled = stream.poll_next_unpin(&mut noop_cx); |
| let Poll::Ready(Some(Ok(event))) = polled else { |
| panic!("Expected to receive event"); |
| }; |
| assert_matches!(event, Event::BroadcastCodeRequired(_)); |
| |
| assert!(stream.poll_next_unpin(&mut noop_cx).is_pending()); |
| |
| sender |
| .unbounded_send(Err(Error::EventStream(Box::new(Error::Generic(format!("some error")))))) |
| .expect("should succeed"); |
| |
| let polled = stream.poll_next_unpin(&mut noop_cx); |
| let Poll::Ready(Some(Err(_))) = polled else { |
| panic!("Expected to receive error"); |
| }; |
| |
| let polled = stream.poll_next_unpin(&mut noop_cx); |
| let Poll::Ready(None) = polled else { |
| panic!("Expected to have terminated"); |
| }; |
| } |