forked from extern/nushell
Add first integration test
This commit is contained in:
parent
be5fd58cca
commit
040c3a5e9c
@ -17,6 +17,7 @@ mod parser;
|
|||||||
mod prelude;
|
mod prelude;
|
||||||
mod shell;
|
mod shell;
|
||||||
mod stream;
|
mod stream;
|
||||||
|
mod tests;
|
||||||
|
|
||||||
use clap::{App, Arg};
|
use clap::{App, Arg};
|
||||||
use log::LevelFilter;
|
use log::LevelFilter;
|
||||||
|
61
src/tests.rs
Normal file
61
src/tests.rs
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use std::path::PathBuf;
|
||||||
|
use std::io::prelude::*;
|
||||||
|
use std::process::{Command, Stdio};
|
||||||
|
use std::error::Error;
|
||||||
|
|
||||||
|
fn test_helper(test_name: &str) {
|
||||||
|
let mut baseline_path = PathBuf::new();
|
||||||
|
baseline_path.push("tests");
|
||||||
|
baseline_path.push(test_name);
|
||||||
|
baseline_path.set_extension("out");
|
||||||
|
|
||||||
|
let mut txt_path = PathBuf::new();
|
||||||
|
txt_path.push("tests");
|
||||||
|
txt_path.push(test_name);
|
||||||
|
txt_path.set_extension("txt");
|
||||||
|
|
||||||
|
let executable = {
|
||||||
|
let mut buf = PathBuf::new();
|
||||||
|
buf.push("target");
|
||||||
|
buf.push("debug");
|
||||||
|
buf.push("nu");
|
||||||
|
buf
|
||||||
|
};
|
||||||
|
|
||||||
|
let process = match Command::new(executable)
|
||||||
|
.stdin(Stdio::piped())
|
||||||
|
.stdout(Stdio::piped())
|
||||||
|
.spawn() {
|
||||||
|
|
||||||
|
Ok(process) => process,
|
||||||
|
Err(why) => panic!("Can't run test {}", why.description())
|
||||||
|
};
|
||||||
|
|
||||||
|
let baseline_out = std::fs::read_to_string(baseline_path).unwrap();
|
||||||
|
let baseline_out = baseline_out.replace("\r\n", "\n");
|
||||||
|
let input_commands = std::fs::read_to_string(txt_path).unwrap();
|
||||||
|
|
||||||
|
match process.stdin.unwrap().write_all(input_commands.as_bytes()) {
|
||||||
|
Err(why) => panic!("couldn't write to wc stdin: {}",
|
||||||
|
why.description()),
|
||||||
|
Ok(_) => println!("sent pangram to wc"),
|
||||||
|
}
|
||||||
|
|
||||||
|
let mut s = String::new();
|
||||||
|
match process.stdout.unwrap().read_to_string(&mut s) {
|
||||||
|
Err(why) => panic!("couldn't read stdout: {}",
|
||||||
|
why.description()),
|
||||||
|
Ok(_) => {
|
||||||
|
let s = s.replace("\r\n", "\n");
|
||||||
|
assert_eq!(s, baseline_out);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_toml() {
|
||||||
|
test_helper("open_toml");
|
||||||
|
}
|
||||||
|
}
|
1
tests/open_toml.out
Normal file
1
tests/open_toml.out
Normal file
@ -0,0 +1 @@
|
|||||||
|
2018
|
2
tests/open_toml.txt
Normal file
2
tests/open_toml.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
open tests\test.toml | select package.edition | echo $it
|
||||||
|
exit
|
Loading…
Reference in New Issue
Block a user