// #![warn(rust_2018_idioms)] // #![cfg(all(feature = "full", not(target_os = "wasi")))] // WASI does not support all fs operations // use std::io::prelude::*; // use std::io::IoSlice; // use tempfile::NamedTempFile; // use nio::fs::File; // use nio_io::{AsyncReadExt, AsyncSeekExt, AsyncWriteExt, SeekFrom}; // use tokio_test::task; // use tokio::io as nio_io; // const HELLO: &[u8] = b"hello world..."; // #[nio::test] // async fn basic_read() { // let mut tempfile = tempfile(); // tempfile.write_all(HELLO).unwrap(); // let mut file = File::open(tempfile.path()).await.unwrap(); // let mut buf = [0; 1024]; // let n = file.read(&mut buf).await.unwrap(); // assert_eq!(n, HELLO.len()); // assert_eq!(&buf[..n], HELLO); // } // #[nio::test] // async fn basic_write() { // let tempfile = tempfile(); // let mut file = File::create(tempfile.path()).await.unwrap(); // file.write_all(HELLO).await.unwrap(); // file.flush().await.unwrap(); // let file = std::fs::read(tempfile.path()).unwrap(); // assert_eq!(file, HELLO); // } // #[nio::test] // async fn basic_write_and_shutdown() { // let tempfile = tempfile(); // let mut file = File::create(tempfile.path()).await.unwrap(); // file.write_all(HELLO).await.unwrap(); // file.shutdown().await.unwrap(); // let file = std::fs::read(tempfile.path()).unwrap(); // assert_eq!(file, HELLO); // } // #[nio::test] // async fn write_vectored() { // let tempfile = tempfile(); // let mut file = File::create(tempfile.path()).await.unwrap(); // let ret = file // .write_vectored(&[IoSlice::new(HELLO), IoSlice::new(HELLO)]) // .await // .unwrap(); // assert_eq!(ret, HELLO.len() * 2); // file.flush().await.unwrap(); // let file = std::fs::read(tempfile.path()).unwrap(); // assert_eq!(file, [HELLO, HELLO].concat()); // } // #[nio::test] // async fn write_vectored_and_shutdown() { // let tempfile = tempfile(); // let mut file = File::create(tempfile.path()).await.unwrap(); // let ret = file // .write_vectored(&[IoSlice::new(HELLO), IoSlice::new(HELLO)]) // .await // .unwrap(); // assert_eq!(ret, HELLO.len() * 2); // file.shutdown().await.unwrap(); // let file = std::fs::read(tempfile.path()).unwrap(); // assert_eq!(file, [HELLO, HELLO].concat()); // } // #[nio::test] // async fn rewind_seek_position() { // let tempfile = tempfile(); // let mut file = File::create(tempfile.path()).await.unwrap(); // file.seek(SeekFrom::Current(10)).await.unwrap(); // file.rewind().await.unwrap(); // assert_eq!(file.stream_position().await.unwrap(), 0); // } // #[nio::test] // async fn coop() { // let mut tempfile = tempfile(); // tempfile.write_all(HELLO).unwrap(); // let mut task = task::spawn(async { // let mut file = File::open(tempfile.path()).await.unwrap(); // let mut buf = [0; 1024]; // loop { // let _ = file.read(&mut buf).await.unwrap(); // file.seek(std::io::SeekFrom::Start(0)).await.unwrap(); // } // }); // for _ in 0..1_000 { // if task.poll().is_pending() { // return; // } // } // panic!("did not yield"); // } // #[nio::test] // async fn write_to_clone() { // let tempfile = tempfile(); // let file = File::create(tempfile.path()).await.unwrap(); // let mut clone = file.try_clone().await.unwrap(); // clone.write_all(HELLO).await.unwrap(); // clone.flush().await.unwrap(); // let contents = std::fs::read(tempfile.path()).unwrap(); // assert_eq!(contents, HELLO); // } // #[nio::test] // async fn write_into_std() { // let tempfile = tempfile(); // let file = File::create(tempfile.path()).await.unwrap(); // let mut std_file = file.into_std().await; // std_file.write_all(HELLO).unwrap(); // let contents = std::fs::read(tempfile.path()).unwrap(); // assert_eq!(contents, HELLO); // } // #[nio::test] // async fn write_into_std_immediate() { // let tempfile = tempfile(); // let file = File::create(tempfile.path()).await.unwrap(); // let mut std_file = file.try_into_std().unwrap(); // std_file.write_all(HELLO).unwrap(); // let contents = std::fs::read(tempfile.path()).unwrap(); // assert_eq!(contents, HELLO); // } // #[nio::test] // async fn read_file_from_std() { // let mut tempfile = tempfile(); // tempfile.write_all(HELLO).unwrap(); // let std_file = std::fs::File::open(tempfile.path()).unwrap(); // let mut file = File::from(std_file); // let mut buf = [0; 1024]; // let n = file.read(&mut buf).await.unwrap(); // assert_eq!(n, HELLO.len()); // assert_eq!(&buf[..n], HELLO); // } // fn tempfile() -> NamedTempFile { // NamedTempFile::new().unwrap() // } // #[nio::test] // async fn set_max_buf_size_read() { // let mut tempfile = tempfile(); // tempfile.write_all(HELLO).unwrap(); // let mut file = File::open(tempfile.path()).await.unwrap(); // let mut buf = [0; 1024]; // file.set_max_buf_size(1); // // A single read operation reads a maximum of 1 byte. // assert_eq!(file.read(&mut buf).await.unwrap(), 1); // } // #[nio::test] // async fn set_max_buf_size_write() { // let tempfile = tempfile(); // let mut file = File::create(tempfile.path()).await.unwrap(); // file.set_max_buf_size(1); // // A single write operation writes a maximum of 1 byte. // assert_eq!(file.write(HELLO).await.unwrap(), 1); // } // #[nio::test] // #[cfg_attr(miri, ignore)] // #[cfg(unix)] // async fn file_debug_fmt() { // let tempfile = tempfile(); // let file = File::open(tempfile.path()).await.unwrap(); // assert_eq!( // &format!("{:?}", file)[0..33], // "nio::fs::File { std: File { fd:" // ); // } // #[nio::test] // #[cfg(windows)] // async fn file_debug_fmt() { // let tempfile = tempfile(); // let file = File::open(tempfile.path()).await.unwrap(); // assert_eq!( // &format!("{:?}", file)[0..37], // "nio::fs::File { std: File { handle:" // ); // } // #[nio::test] // #[cfg(unix)] // async fn unix_fd_is_valid() { // use std::os::unix::io::AsRawFd; // let tempfile = tempfile(); // let file = File::create(tempfile.path()).await.unwrap(); // assert!(file.as_raw_fd() as u64 > 0); // } // #[nio::test] // #[cfg(unix)] // async fn read_file_from_unix_fd() { // use std::os::unix::io::{FromRawFd, IntoRawFd}; // let mut tempfile = tempfile(); // tempfile.write_all(HELLO).unwrap(); // let file1 = File::open(tempfile.path()).await.unwrap(); // let raw_fd = file1.into_std().await.into_raw_fd(); // assert!(raw_fd > 0); // let mut file2 = unsafe { File::from_raw_fd(raw_fd) }; // let mut buf = [0; 1024]; // let n = file2.read(&mut buf).await.unwrap(); // assert_eq!(n, HELLO.len()); // assert_eq!(&buf[..n], HELLO); // } // #[nio::test] // #[cfg(windows)] // async fn windows_handle() { // use std::os::windows::io::AsRawHandle; // let tempfile = tempfile(); // let file = File::create(tempfile.path()).await.unwrap(); // assert!(file.as_raw_handle() as u64 > 0); // }