mirror of
https://github.com/nushell/nushell
synced 2024-12-28 05:53:09 +00:00
356e05177c
I wanted to get the infrastructure in place for starters for our *nu-cmd-extra* crate... The plan is to put inside here the following commands... * bits * bytes * math I thought it would be easier to do one at a time as well as get the nu-cmd-extra crate out there on crates.io for this upcoming release... Once this lands the infrastructure will be in place to move over the other noted commands for now... And then add other stuff we do NOT want to be in 1.0.
181 lines
4.2 KiB
Rust
181 lines
4.2 KiB
Rust
#[cfg(feature = "extra")]
|
|
mod test_bits;
|
|
mod test_cell_path;
|
|
mod test_commandline;
|
|
mod test_conditionals;
|
|
mod test_config_path;
|
|
mod test_converters;
|
|
mod test_custom_commands;
|
|
mod test_engine;
|
|
mod test_env;
|
|
mod test_help;
|
|
mod test_hiding;
|
|
mod test_ide;
|
|
mod test_iteration;
|
|
mod test_known_external;
|
|
mod test_math;
|
|
mod test_modules;
|
|
mod test_parser;
|
|
mod test_ranges;
|
|
mod test_regex;
|
|
mod test_signatures;
|
|
mod test_stdlib;
|
|
mod test_strings;
|
|
mod test_table_operations;
|
|
mod test_type_check;
|
|
|
|
use assert_cmd::prelude::*;
|
|
use pretty_assertions::assert_eq;
|
|
use std::collections::HashMap;
|
|
use std::io::Write;
|
|
use std::process::Command;
|
|
use tempfile::NamedTempFile;
|
|
|
|
pub type TestResult = Result<(), Box<dyn std::error::Error>>;
|
|
|
|
pub fn run_test_with_env(input: &str, expected: &str, env: &HashMap<&str, &str>) -> TestResult {
|
|
let mut file = NamedTempFile::new()?;
|
|
let name = file.path();
|
|
|
|
let mut cmd = Command::cargo_bin("nu")?;
|
|
cmd.arg(name).envs(env);
|
|
|
|
writeln!(file, "{input}")?;
|
|
|
|
run_cmd_and_assert(cmd, expected)
|
|
}
|
|
|
|
#[cfg(test)]
|
|
pub fn run_test(input: &str, expected: &str) -> TestResult {
|
|
let mut file = NamedTempFile::new()?;
|
|
let name = file.path();
|
|
|
|
let mut cmd = Command::cargo_bin("nu")?;
|
|
cmd.arg("--no-std-lib");
|
|
cmd.arg(name);
|
|
cmd.env(
|
|
"PWD",
|
|
std::env::current_dir().expect("Can't get current dir"),
|
|
);
|
|
|
|
writeln!(file, "{input}")?;
|
|
|
|
run_cmd_and_assert(cmd, expected)
|
|
}
|
|
|
|
#[cfg(test)]
|
|
pub fn run_test_std(input: &str, expected: &str) -> TestResult {
|
|
let mut file = NamedTempFile::new()?;
|
|
let name = file.path();
|
|
|
|
let mut cmd = Command::cargo_bin("nu")?;
|
|
cmd.arg(name);
|
|
cmd.env(
|
|
"PWD",
|
|
std::env::current_dir().expect("Can't get current dir"),
|
|
);
|
|
|
|
writeln!(file, "{input}")?;
|
|
|
|
run_cmd_and_assert(cmd, expected)
|
|
}
|
|
|
|
#[cfg(test)]
|
|
fn run_cmd_and_assert(mut cmd: Command, expected: &str) -> TestResult {
|
|
let output = cmd.output()?;
|
|
|
|
let stderr = String::from_utf8_lossy(&output.stderr).to_string();
|
|
let stdout = String::from_utf8_lossy(&output.stdout).to_string();
|
|
|
|
println!("stdout: {stdout}");
|
|
println!("stderr: {stderr}");
|
|
|
|
assert!(output.status.success());
|
|
|
|
assert_eq!(stdout.trim(), expected);
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(test)]
|
|
pub fn run_test_contains(input: &str, expected: &str) -> TestResult {
|
|
let mut file = NamedTempFile::new()?;
|
|
let name = file.path();
|
|
|
|
let mut cmd = Command::cargo_bin("nu")?;
|
|
cmd.arg("--no-std-lib");
|
|
cmd.arg(name);
|
|
|
|
writeln!(file, "{input}")?;
|
|
|
|
let output = cmd.output()?;
|
|
|
|
let stderr = String::from_utf8_lossy(&output.stderr).to_string();
|
|
let stdout = String::from_utf8_lossy(&output.stdout).to_string();
|
|
|
|
println!("stdout: {stdout}");
|
|
println!("stderr: {stderr}");
|
|
|
|
assert!(output.status.success());
|
|
|
|
assert!(stdout.contains(expected));
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(test)]
|
|
pub fn test_ide_contains(input: &str, ide_commands: &[&str], expected: &str) -> TestResult {
|
|
let mut file = NamedTempFile::new()?;
|
|
let name = file.path();
|
|
|
|
let mut cmd = Command::cargo_bin("nu")?;
|
|
cmd.arg("--no-std-lib");
|
|
for ide_command in ide_commands {
|
|
cmd.arg(ide_command);
|
|
}
|
|
cmd.arg(name);
|
|
|
|
writeln!(file, "{input}")?;
|
|
|
|
let output = cmd.output()?;
|
|
|
|
let stderr = String::from_utf8_lossy(&output.stderr).to_string();
|
|
let stdout = String::from_utf8_lossy(&output.stdout).to_string();
|
|
|
|
println!("stdout: {stdout}");
|
|
println!("stderr: {stderr}");
|
|
|
|
assert!(output.status.success());
|
|
|
|
assert!(stdout.contains(expected));
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[cfg(test)]
|
|
pub fn fail_test(input: &str, expected: &str) -> TestResult {
|
|
let mut file = NamedTempFile::new()?;
|
|
let name = file.path();
|
|
|
|
let mut cmd = Command::cargo_bin("nu")?;
|
|
cmd.arg("--no-std-lib");
|
|
cmd.arg(name);
|
|
cmd.env(
|
|
"PWD",
|
|
std::env::current_dir().expect("Can't get current dir"),
|
|
);
|
|
|
|
writeln!(file, "{input}")?;
|
|
|
|
let output = cmd.output()?;
|
|
|
|
let stderr = String::from_utf8_lossy(&output.stderr).to_string();
|
|
let stdout = String::from_utf8_lossy(&output.stdout).to_string();
|
|
|
|
println!("stdout: {stdout}");
|
|
println!("stderr: {stderr}");
|
|
|
|
assert!(!stderr.is_empty() && stderr.contains(expected));
|
|
|
|
Ok(())
|
|
}
|