use std::{ffi::OsString, fs, path::Path, time::SystemTime};
use assert_cmd::Command;
#[path = "cli_check/arguments.rs"]
mod arguments;
#[path = "cli_check/closed_pipe.rs"]
mod closed_pipe;
#[path = "cli_check/exit_status.rs"]
mod exit_status;
#[path = "cli_check/no_write.rs"]
mod no_write;
#[path = "cli_check/ordering.rs"]
mod ordering;
const RAGGED: &str = "|A|B|\n|---|---|\n|1|2|\n";
const CLEAN: &str = "| A | B |\n| --- | --- |\n| 1 | 2 |\n";
const RAGGED_INSERTIONS: i64 = 3;
const RAGGED_DELETIONS: i64 = 3;
fn run_in_os(directory: &Path, args: &[OsString]) -> std::process::Output {
Command::cargo_bin("mdtablefix")
.expect("cargo binary")
.current_dir(directory)
.args(args)
.output()
.expect("run mdtablefix")
}
fn run_in(directory: &Path, args: &[&str]) -> std::process::Output {
let args: Vec<OsString> = args.iter().map(OsString::from).collect();
run_in_os(directory, &args)
}
fn stdout_of(output: &std::process::Output) -> String {
String::from_utf8(output.stdout.clone()).expect("stdout is UTF-8")
}
fn stderr_of(output: &std::process::Output) -> String {
String::from_utf8(output.stderr.clone()).expect("stderr is UTF-8")
}
fn status_of(output: &std::process::Output) -> i32 { output.status.code().unwrap_or(-1) }
type Snapshot = Vec<(String, u64, Option<SystemTime>)>;
fn snapshot(directory: &Path) -> Snapshot {
let mut entries: Snapshot = fs::read_dir(directory)
.expect("read directory")
.map(|entry| {
let entry = entry.expect("read directory entry");
let metadata = entry.metadata().expect("read metadata");
(
entry.file_name().to_string_lossy().into_owned(),
metadata.len(),
metadata.modified().ok(),
)
})
.collect();
entries.sort();
entries
}