#![cfg(feature = "uudoc")]
use std::env;
pub const TESTS_BINARY: &str = env!("CARGO_BIN_EXE_uudoc");
#[ctor::ctor]
fn init() {
unsafe {
env::set_var("UUTESTS_BINARY_PATH", TESTS_BINARY);
}
eprintln!("Setting UUTESTS_BINARY_PATH={TESTS_BINARY}");
}
fn run_write_doc() -> Vec<String> {
use std::process::Command;
use uutests::util::TestScenario;
let scenario = TestScenario::new("");
let output = Command::new(&scenario.bin_path).output().unwrap();
assert!(
output.status.success(),
"uudoc command failed: {}",
String::from_utf8_lossy(&output.stderr)
);
String::from_utf8(output.stdout)
.unwrap()
.lines()
.map(String::from)
.filter(|line| line.starts_with("Wrote"))
.collect::<Vec<String>>()
}
fn get_doc_file_from_output(output: &str) -> (String, String) {
let correct_path_test = output
.strip_prefix("Wrote to '")
.unwrap()
.strip_suffix("'")
.unwrap()
.to_string();
let content = std::fs::read_to_string(&correct_path_test);
let content = match content {
Ok(content) => content,
Err(e) => {
panic!(
"Failed to read file {correct_path_test}: {e} from {:?}",
env::current_dir(),
);
}
};
(correct_path_test, content)
}
#[test]
fn uudoc_check_test() {
let pages = run_write_doc();
let path_test = pages.iter().find(|line| line.contains("test.md")).unwrap();
let (correct_path, content) = get_doc_file_from_output(path_test);
assert!(
content.contains(
"```
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
```
",
),
"{correct_path} does not contains the required text"
);
}
#[test]
fn uudoc_check_sums() {
let pages = run_write_doc();
let sums = [
"md5sum",
"sha1sum",
"sha224sum",
"sha256sum",
"sha384sum",
"sha512sum",
"b2sum",
];
for one_sum in sums {
let output_path = pages
.iter()
.find(|one_line| one_line.contains(one_sum))
.unwrap();
let (correct_path, content) = get_doc_file_from_output(output_path);
let formatted = format!("```\n{one_sum} [OPTIONS] [FILE]...\n```");
assert!(
content.contains(&formatted),
"Content of {correct_path} does not contain the expected format: {formatted}",
);
}
}