mod common;
use assert_cmd::prelude::*;
use common::dircat_cmd;
use predicates::prelude::*;
use std::fs;
use tempfile::tempdir;
#[test]
fn test_process_last_glob() -> Result<(), Box<dyn std::error::Error>> {
let temp = tempdir()?;
let sub = temp.path().join("sub");
fs::create_dir(&sub)?;
fs::write(temp.path().join("a.txt"), "A")?;
fs::write(sub.join("b.rs"), "B")?;
fs::write(temp.path().join("last.md"), "LAST_MD")?;
fs::write(sub.join("final.rs"), "FINAL_RS")?;
dircat_cmd()
.arg("-z")
.arg("*.md") .arg("-z")
.arg("sub/*.rs") .current_dir(temp.path())
.assert()
.success()
.stdout(predicate::function(|output: &str| {
let pos_a = output.find("## File: a.txt").unwrap_or(usize::MAX);
let pos_last_md = output.find("## File: last.md").unwrap_or(usize::MAX);
let pos_sub_b = output.find("## File: sub/b.rs").unwrap_or(usize::MAX);
let pos_sub_final = output.find("## File: sub/final.rs").unwrap_or(usize::MAX);
let normal_ok = pos_a < pos_last_md && pos_a < pos_sub_b && pos_a < pos_sub_final;
let glob1_ok = pos_last_md < pos_sub_b && pos_last_md < pos_sub_final;
let glob2_order_ok = pos_sub_b < pos_sub_final;
normal_ok && glob1_ok && glob2_order_ok
}));
temp.close()?;
Ok(())
}
#[test]
fn test_only_last_glob() -> Result<(), Box<dyn std::error::Error>> {
let temp = tempdir()?;
let sub = temp.path().join("sub");
fs::create_dir(&sub)?;
fs::write(temp.path().join("a.txt"), "A")?;
fs::write(sub.join("b.rs"), "B")?;
fs::write(temp.path().join("last.md"), "LAST")?;
dircat_cmd()
.arg("-z")
.arg("*.md")
.arg("-Z") .current_dir(temp.path())
.assert()
.success()
.stdout(predicate::str::contains("## File: last.md"))
.stdout(predicate::str::contains("LAST"))
.stdout(predicate::str::contains("## File: a.txt").not())
.stdout(predicate::str::contains("## File: sub/b.rs").not());
temp.close()?;
Ok(())
}