aboutsummaryrefslogtreecommitdiffstats
path: root/tests/split.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/split.rs')
-rw-r--r--tests/split.rs237
1 files changed, 111 insertions, 126 deletions
diff --git a/tests/split.rs b/tests/split.rs
index f537f17..fc9b9d0 100644
--- a/tests/split.rs
+++ b/tests/split.rs
@@ -1,108 +1,82 @@
mod helpers;
#[cfg(feature = "async")]
+#[tokio::main]
#[test]
-fn test_split() {
+async fn test_split() {
use futures::stream::StreamExt as _;
use tokio::io::AsyncWriteExt as _;
- let rt = tokio::runtime::Builder::new_multi_thread()
- .enable_all()
- .build()
- .unwrap();
- rt.block_on(async {
- let mut pty = pty_process::Pty::new().unwrap();
- let pts = pty.pts().unwrap();
- pty.resize(pty_process::Size::new(24, 80)).unwrap();
- let mut cmd = pty_process::Command::new("perl");
- cmd.args(["-plE", "BEGIN { $SIG{WINCH} = sub { say 'WINCH' } }"]);
- let mut child = cmd.spawn(&pts).unwrap();
-
- {
- pty.write_all(b"foo\n").await.unwrap();
- let (pty_r, _) = pty.split();
- let mut output = helpers::output_async(pty_r);
- assert_eq!(output.next().await.unwrap(), "foo\r\n");
- assert_eq!(output.next().await.unwrap(), "foo\r\n");
- }
-
- {
- let (pty_r, mut pty_w) = pty.split();
- pty_w.write_all(b"foo\n").await.unwrap();
- let mut output = helpers::output_async(pty_r);
- assert_eq!(output.next().await.unwrap(), "foo\r\n");
- assert_eq!(output.next().await.unwrap(), "foo\r\n");
- }
-
- {
- let (pty_r, pty_w) = pty.split();
- pty_w.resize(pty_process::Size::new(25, 80)).unwrap();
- let mut output = helpers::output_async(pty_r);
- assert_eq!(output.next().await.unwrap(), "WINCH\r\n");
- }
-
- pty.write_all(&[4u8]).await.unwrap();
- child.wait().await.unwrap()
- });
+ let mut pty = pty_process::Pty::new().unwrap();
+ let pts = pty.pts().unwrap();
+ pty.resize(pty_process::Size::new(24, 80)).unwrap();
+ let mut cmd = pty_process::Command::new("perl");
+ cmd.args(["-plE", "BEGIN { $SIG{WINCH} = sub { say 'WINCH' } }"]);
+ let mut child = cmd.spawn(&pts).unwrap();
+
+ {
+ pty.write_all(b"foo\n").await.unwrap();
+ let (pty_r, _) = pty.split();
+ let mut output = helpers::output_async(pty_r);
+ assert_eq!(output.next().await.unwrap(), "foo\r\n");
+ assert_eq!(output.next().await.unwrap(), "foo\r\n");
+ }
+
+ {
+ let (pty_r, mut pty_w) = pty.split();
+ pty_w.write_all(b"foo\n").await.unwrap();
+ let mut output = helpers::output_async(pty_r);
+ assert_eq!(output.next().await.unwrap(), "foo\r\n");
+ assert_eq!(output.next().await.unwrap(), "foo\r\n");
+ }
+
+ {
+ let (pty_r, pty_w) = pty.split();
+ pty_w.resize(pty_process::Size::new(25, 80)).unwrap();
+ let mut output = helpers::output_async(pty_r);
+ assert_eq!(output.next().await.unwrap(), "WINCH\r\n");
+ }
+
+ pty.write_all(&[4u8]).await.unwrap();
+ child.wait().await.unwrap();
}
#[cfg(feature = "async")]
+#[tokio::main]
#[test]
-fn test_into_split() {
+async fn test_into_split() {
use tokio::io::{AsyncBufReadExt as _, AsyncWriteExt as _};
- let rt = tokio::runtime::Builder::new_multi_thread()
- .enable_all()
- .build()
- .unwrap();
- rt.block_on(async {
- let mut pty = pty_process::Pty::new().unwrap();
- let pts = pty.pts().unwrap();
- pty.resize(pty_process::Size::new(24, 80)).unwrap();
- let mut cmd = pty_process::Command::new("perl");
- cmd.args(["-plE", "BEGIN { $SIG{WINCH} = sub { say 'WINCH' } }"]);
- let mut child = cmd.spawn(&pts).unwrap();
-
- {
- pty.write_all(b"foo\n").await.unwrap();
- let (pty_r, pty_w) = pty.into_split();
- let mut ptybuf = tokio::io::BufReader::new(pty_r);
- for _ in 0..2 {
- let mut buf = vec![];
- tokio::time::timeout(
- std::time::Duration::from_secs(5),
- ptybuf.read_until(b'\n', &mut buf),
- )
- .await
- .unwrap()
- .unwrap();
- assert_eq!(&buf[..], b"foo\r\n");
- }
- pty = ptybuf.into_inner().unsplit(pty_w).unwrap();
- }
-
- {
- let (pty_r, mut pty_w) = pty.into_split();
- pty_w.write_all(b"foo\n").await.unwrap();
- let mut ptybuf = tokio::io::BufReader::new(pty_r);
- for _ in 0..2 {
- let mut buf = vec![];
- tokio::time::timeout(
- std::time::Duration::from_secs(5),
- ptybuf.read_until(b'\n', &mut buf),
- )
- .await
- .unwrap()
- .unwrap();
- assert_eq!(&buf[..], b"foo\r\n");
- }
- pty = ptybuf.into_inner().unsplit(pty_w).unwrap();
+ let mut pty = pty_process::Pty::new().unwrap();
+ let pts = pty.pts().unwrap();
+ pty.resize(pty_process::Size::new(24, 80)).unwrap();
+ let mut cmd = pty_process::Command::new("perl");
+ cmd.args(["-plE", "BEGIN { $SIG{WINCH} = sub { say 'WINCH' } }"]);
+ let mut child = cmd.spawn(&pts).unwrap();
+
+ {
+ pty.write_all(b"foo\n").await.unwrap();
+ let (pty_r, pty_w) = pty.into_split();
+ let mut ptybuf = tokio::io::BufReader::new(pty_r);
+ for _ in 0..2 {
+ let mut buf = vec![];
+ tokio::time::timeout(
+ std::time::Duration::from_secs(5),
+ ptybuf.read_until(b'\n', &mut buf),
+ )
+ .await
+ .unwrap()
+ .unwrap();
+ assert_eq!(&buf[..], b"foo\r\n");
}
-
- {
- let (pty_r, pty_w) = pty.into_split();
- pty_w.resize(pty_process::Size::new(25, 80)).unwrap();
- let mut ptybuf = tokio::io::BufReader::new(pty_r);
+ pty = ptybuf.into_inner().unsplit(pty_w).unwrap();
+ }
+
+ {
+ let (pty_r, mut pty_w) = pty.into_split();
+ pty_w.write_all(b"foo\n").await.unwrap();
+ let mut ptybuf = tokio::io::BufReader::new(pty_r);
+ for _ in 0..2 {
let mut buf = vec![];
tokio::time::timeout(
std::time::Duration::from_secs(5),
@@ -111,45 +85,56 @@ fn test_into_split() {
.await
.unwrap()
.unwrap();
- assert_eq!(&buf[..], b"WINCH\r\n");
- pty = ptybuf.into_inner().unsplit(pty_w).unwrap();
+ assert_eq!(&buf[..], b"foo\r\n");
}
+ pty = ptybuf.into_inner().unsplit(pty_w).unwrap();
+ }
+
+ {
+ let (pty_r, pty_w) = pty.into_split();
+ pty_w.resize(pty_process::Size::new(25, 80)).unwrap();
+ let mut ptybuf = tokio::io::BufReader::new(pty_r);
+ let mut buf = vec![];
+ tokio::time::timeout(
+ std::time::Duration::from_secs(5),
+ ptybuf.read_until(b'\n', &mut buf),
+ )
+ .await
+ .unwrap()
+ .unwrap();
+ assert_eq!(&buf[..], b"WINCH\r\n");
+ pty = ptybuf.into_inner().unsplit(pty_w).unwrap();
+ }
- pty.write_all(&[4u8]).await.unwrap();
- child.wait().await.unwrap()
- });
+ pty.write_all(&[4u8]).await.unwrap();
+ child.wait().await.unwrap();
}
#[cfg(feature = "async")]
+#[tokio::main]
#[test]
-fn test_into_split_error() {
- let rt = tokio::runtime::Builder::new_multi_thread()
- .enable_all()
- .build()
- .unwrap();
- rt.block_on(async {
- let pty1 = pty_process::Pty::new().unwrap();
- let pty2 = pty_process::Pty::new().unwrap();
-
- let (pty1_r, pty1_w) = pty1.into_split();
- let (pty2_r, pty2_w) = pty2.into_split();
-
- let (pty1_r, pty2_w) = if let Err(pty_process::Error::Unsplit(r, w)) =
- pty1_r.unsplit(pty2_w)
- {
- (r, w)
- } else {
- panic!("fail");
- };
- let (pty2_r, pty1_w) = if let Err(pty_process::Error::Unsplit(r, w)) =
- pty2_r.unsplit(pty1_w)
- {
- (r, w)
- } else {
- panic!("fail");
- };
-
- let _pty1 = pty1_r.unsplit(pty1_w).unwrap();
- let _pty2 = pty2_r.unsplit(pty2_w).unwrap();
- });
+async fn test_into_split_error() {
+ let pty1 = pty_process::Pty::new().unwrap();
+ let pty2 = pty_process::Pty::new().unwrap();
+
+ let (pty1_r, pty1_w) = pty1.into_split();
+ let (pty2_r, pty2_w) = pty2.into_split();
+
+ let (pty1_r, pty2_w) = if let Err(pty_process::Error::Unsplit(r, w)) =
+ pty1_r.unsplit(pty2_w)
+ {
+ (r, w)
+ } else {
+ panic!("fail");
+ };
+ let (pty2_r, pty1_w) = if let Err(pty_process::Error::Unsplit(r, w)) =
+ pty2_r.unsplit(pty1_w)
+ {
+ (r, w)
+ } else {
+ panic!("fail");
+ };
+
+ let _pty1 = pty1_r.unsplit(pty1_w).unwrap();
+ let _pty2 = pty2_r.unsplit(pty2_w).unwrap();
}