use assert_cmd::Command;
use predicates::prelude::*;
fn diffx() -> Command {
Command::cargo_bin("diffx").unwrap()
}
fn fixtures(name: &str) -> String {
format!("tests/fixtures/{name}")
}
#[test]
fn directory_requires_recursive_flag() {
diffx()
.arg(fixtures("dir1"))
.arg(fixtures("dir2"))
.assert()
.failure()
.code(2)
.stderr(predicate::str::contains("--recursive").or(predicate::str::contains("-r")));
}
#[test]
fn directory_recursive_long_form() {
diffx()
.arg("--recursive")
.arg(fixtures("dir1"))
.arg(fixtures("dir2"))
.assert()
.failure()
.code(1); }
#[test]
fn directory_recursive_short_form() {
diffx()
.arg("-r")
.arg(fixtures("dir1"))
.arg(fixtures("dir2"))
.assert()
.failure()
.code(1);
}
#[test]
fn directory_identical() {
diffx()
.arg("-r")
.arg(fixtures("dir1"))
.arg(fixtures("dir1"))
.assert()
.success()
.code(0);
}
#[test]
fn directory_with_differences() {
let output = diffx()
.arg("-r")
.arg(fixtures("dir1"))
.arg(fixtures("dir2"))
.output()
.unwrap();
assert_eq!(output.status.code(), Some(1));
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(!stdout.is_empty(), "Should output differences");
}
#[test]
fn directory_with_json_output() {
diffx()
.arg("-r")
.arg("--output")
.arg("json")
.arg(fixtures("dir1"))
.arg(fixtures("dir2"))
.assert()
.failure()
.code(1)
.stdout(predicate::str::starts_with("["));
}
#[test]
fn directory_file_vs_dir_error() {
diffx()
.arg("-r")
.arg(fixtures("file1.json"))
.arg(fixtures("dir1"))
.assert()
.failure()
.code(2); }
#[test]
fn directory_nested_subdirs() {
let output = diffx()
.arg("-r")
.arg(fixtures("dir1"))
.arg(fixtures("dir2"))
.output()
.unwrap();
assert_eq!(output.status.code(), Some(1));
}