aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/common.rs19
-rw-r--r--tests/scripts.rs8
2 files changed, 27 insertions, 0 deletions
diff --git a/tests/common.rs b/tests/common.rs
new file mode 100644
index 0000000..210b92a
--- /dev/null
+++ b/tests/common.rs
@@ -0,0 +1,19 @@
+#[cfg(test)]
+pub fn test_case(_name: &str, script: &[u8], expected_output: &[u8]) {
+ use pish::parse::Parse;
+ use pish::rw::*;
+ use std::io::Read;
+ use std::sync::{Arc, Mutex};
+
+ let session = Arc::new(Mutex::new(pish::Session::new_noninteractive()));
+ let script = pish::parse::Script::parse_from_bytes(script).unwrap();
+ let (stdin, _c1) = InputReader::new(Input::Null);
+ let (mut pr, pw) = std::io::pipe().unwrap();
+ let (stdout, _c2) = OutputWriter::new(Output::Pipe(pw));
+ let mut exec = pish::run::Executor::new(session.clone());
+ let mut spawned = exec.execute_script(script, stdin, stdout);
+ let _res = spawned.join_timeout(1000);
+ let mut actual_output = Vec::new();
+ pr.read_to_end(&mut actual_output).unwrap();
+ assert_eq!(expected_output, actual_output);
+}
diff --git a/tests/scripts.rs b/tests/scripts.rs
new file mode 100644
index 0000000..9b82ed1
--- /dev/null
+++ b/tests/scripts.rs
@@ -0,0 +1,8 @@
+//! This file is generated by running `bash test-cases/generate.sh` - do not manually adjust.
+mod common;
+
+#[test]
+fn fun0() {
+ common::test_case("fun0", include_bytes!("../test-cases/fun0/script.sh"), include_bytes!("../test-cases/fun0/stdout.txt"));
+}
+