#![deny(unused)] #![warn(clippy::all)] #[generic_tests::define(attrs(tokio::test))] mod async_tests { use bytes::{Buf, Bytes}; use tokio::io::{self, AsyncWrite, AsyncWriteExt, Error}; use std::pin::Pin; use std::task::{Context, Poll}; #[tokio::test] async fn async_is_instantiated() -> io::Result<()> { Ok(()) } #[tokio::test(flavor = "multi_thread", worker_threads = 1)] async fn with_worker_threads() -> io::Result<()> { Ok(()) } struct TestSink { data: Vec, ready: bool, } impl TestSink { fn new() -> Self { TestSink { data: Vec::new(), ready: false, } } } impl AsyncWrite for TestSink { fn poll_write( mut self: Pin<&mut Self>, cx: &mut Context, buf: &[u8], ) -> Poll> { if self.ready { self.data.extend_from_slice(buf); Poll::Ready(Ok(buf.len())) } else { self.ready = true; cx.waker().wake_by_ref(); Poll::Pending } } fn poll_flush(self: Pin<&mut Self>, _cx: &mut Context) -> Poll> { Poll::Ready(Ok(())) } fn poll_shutdown(self: Pin<&mut Self>, _cx: &mut Context) -> Poll> { Poll::Ready(Ok(())) } } #[tokio::test] async fn write_buf() -> io::Result<()> where T: From<&'static str>, { let mut buf = T::from("Hello, world!"); let mut sink = TestSink::new(); let n = sink.write_buf(&mut buf).await?; assert_ne!(n, 0); assert_eq!(sink.data[..n], b"Hello, world!"[..n]); Ok(()) } #[instantiate_tests()] mod inst {} }