use std::time::Duration; use async_std::io; use async_std::task; #[test] #[should_panic(expected = "timed out")] #[cfg(not(any( target_os = "unknown", target_arch = "arm", target_arch = "mips", target_arch = "powerpc", target_arch = "powerpc64", target_arch = "x86", )))] // stdin tests fail when running through cross fn io_timeout_timedout() { task::block_on(async { io::timeout(Duration::from_secs(1), async { let stdin = io::stdin(); let mut line = String::new(); let _n = stdin.read_line(&mut line).await?; Ok(()) }) .await .unwrap(); // We should panic with a timeout error }); } #[test] #[should_panic(expected = "My custom error")] fn io_timeout_future_err() { task::block_on(async { io::timeout(Duration::from_secs(1), async { Err::<(), io::Error>(io::Error::new(io::ErrorKind::Other, "My custom error")) }) .await .unwrap(); // We should panic with our own error }); } #[test] fn io_timeout_future_ok() { task::block_on(async { io::timeout(Duration::from_secs(1), async { Ok(()) }) .await .unwrap(); // We shouldn't panic at all }); }