blob: 4e3c0ab7a955e1a646521028027fd04fecb892b1 [file] [log] [blame]
// 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");
};
}