diff --git a/src/tests.rs b/src/tests.rs index 30f87d4..063025f 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -1,11 +1,24 @@ #[cfg(test)] use crate::*; +use std::process::Command; use std::{ fs::remove_file, hash::{BuildHasher, Hasher, RandomState}, }; use std::{fs::File, os::unix::fs::FileExt, thread::sleep}; -use std::process::Command; +use crate::command; + +#[macro_export] +macro_rules! command { + ($command:expr, $($args:expr),*) => { + { + Command::new($command) + $( + .arg($args) + )* + } + }; +} /// Tests what stdout prints #[test] @@ -34,14 +47,14 @@ fn stderr_content() { // `>&2` redirects to stderr assert_eq!( expected, - run(&mut Command::new("bash") - .arg("-c") - .arg("echo -n 'helloooooooooo\nhiiiiiiiiiiiii' >&2")) - .stderr() - .unwrap() - .into_iter() - .map(|line| { line.content }) - .collect::<Vec<String>>() + run(&mut Command::new("bash") + .arg("-c") + .arg("echo -n 'helloooooooooo\nhiiiiiiiiiiiii' >&2")) + .stderr() + .unwrap() + .into_iter() + .map(|line| { line.content }) + .collect::<Vec<String>>() ); } @@ -89,8 +102,8 @@ fn shuffle_vec<T>(vec: &mut [T]) { #[test] fn test_run_funcs() { - let _ = thread::spawn(|| { - let _ = run_funcs( + let threads = thread::spawn(|| { + return run_funcs( Command::new("bash") .arg("-c") .arg("echo hi; >&2 echo hello"), @@ -98,9 +111,7 @@ fn test_run_funcs() { |stdout_lines| { sleep(Duration::from_secs(1)); for _ in stdout_lines { - Command::new("bash") - .arg("-c") - .arg("echo stdout >> ./tmp-run_runcs") + command!("bash", "-c", "echo stdout >> ./tmp-run_funcs") // col .output() .unwrap(); } @@ -110,9 +121,7 @@ fn test_run_funcs() { |stderr_lines| { sleep(Duration::from_secs(3)); for _ in stderr_lines { - Command::new("bash") - .arg("-c") - .arg("echo stderr >> ./tmp-run_runcs") + command!("bash", "-c", "echo stderr >> ./tmp-run_funcs") // col .output() .unwrap(); } @@ -121,7 +130,7 @@ fn test_run_funcs() { ); }); sleep(Duration::from_secs(2)); - let f = File::open("./tmp-run_runcs").unwrap(); + let f = File::open("./tmp-run_funcs").unwrap(); let mut buf: [u8; 14] = [0u8; 14]; f.read_at(&mut buf, 0).unwrap(); assert_eq!(buf, [115, 116, 100, 111, 117, 116, 10, 0, 0, 0, 0, 0, 0, 0]); @@ -133,48 +142,53 @@ fn test_run_funcs() { [115, 116, 100, 111, 117, 116, 10, 115, 116, 100, 101, 114, 114, 10] ); - remove_file("./tmp-run_runcs").unwrap(); + remove_file("./tmp-run_funcs").unwrap(); + + let output = threads.join().unwrap(); + assert_eq!(output.clone().lines(), None); } #[test] fn test_run_funcs_with_lines() { - let _ = thread::spawn(|| { - let _ = run_funcs_with_lines( + let threads = thread::spawn(|| { + return run_funcs_with_lines( Command::new("bash") .arg("-c") .arg("echo hi; >&2 echo hello"), { |stdout_lines| { + let mut lines: Vec<Line> = Vec::new(); sleep(Duration::from_secs(1)); for line in stdout_lines { - assert_eq!(line.unwrap(), "hi"); - Command::new("bash") - .arg("-c") - .arg("echo stdout >> ./tmp-run_runcs_with_lines") + let line = line.unwrap(); + lines.push(Line::from_stdout(&line)); + assert_eq!(&line, "hi"); + command!("bash", "-c", "echo stdout >> ./tmp-run_funcs_with_lines") .output() .unwrap(); } - return Vec::new(); + return lines; } }, { |stderr_lines| { + let mut lines: Vec<Line> = Vec::new(); sleep(Duration::from_secs(3)); for line in stderr_lines { - assert_eq!(line.unwrap(), "hello"); - Command::new("bash") - .arg("-c") - .arg("echo stderr >> ./tmp-run_runcs_with_lines") + let line = line.unwrap(); + lines.push(Line::from_stdout(&line)); + assert_eq!(line, "hello"); + command!("bash", "-c", "echo stderr >> ./tmp-run_funcs_with_lines") // col .output() - .unwrap(); + .unwrap(); // oops sorry lol } - return Vec::new(); + return lines; } }, ); }); sleep(Duration::from_secs(2)); - let f = File::open("./tmp-run_runcs_with_lines").unwrap(); + let f = File::open("./tmp-run_funcs_with_lines").unwrap(); let mut buf: [u8; 14] = [0u8; 14]; f.read_at(&mut buf, 0).unwrap(); assert_eq!(buf, [115, 116, 100, 111, 117, 116, 10, 0, 0, 0, 0, 0, 0, 0]); @@ -186,5 +200,12 @@ fn test_run_funcs_with_lines() { [115, 116, 100, 111, 117, 116, 10, 115, 116, 100, 101, 114, 114, 10] ); - remove_file("./tmp-run_runcs_with_lines").unwrap(); + remove_file("./tmp-run_funcs_with_lines").unwrap(); + + let output = threads.join().unwrap(); + + println!("{:?}", output); + + assert_eq!(output.clone().lines().unwrap()[0].content, "hi"); + assert_eq!(output.lines().unwrap()[1].content, "hello"); }