mod common;
use assert_cmd::prelude::*;
use common::dircat_cmd;
use predicates::prelude::*;
use std::fs;
use std::io::Write; use tempfile::tempdir;
#[test]
fn test_summary() -> Result<(), Box<dyn std::error::Error>> {
let temp = tempdir()?;
let sub = temp.path().join("sub");
fs::create_dir(&sub)?;
let content_z = "Z";
let content_a = "A";
fs::write(temp.path().join("z.txt"), content_z)?;
fs::write(sub.join("a.rs"), content_a)?;
dircat_cmd()
.arg("-s") .current_dir(temp.path())
.assert()
.success()
.stdout(predicate::str::contains("## File: sub/a.rs")) .stdout(predicate::str::contains("## File: z.txt"))
.stdout(predicate::str::contains(content_a)) .stdout(predicate::str::contains(content_z))
.stdout(predicate::str::contains("\n---\nProcessed Files: (2)\n")) .stdout(predicate::str::contains("- sub/a.rs\n")) .stdout(predicate::str::contains("- z.txt\n"));
temp.close()?;
Ok(())
}
#[test]
fn test_summary_with_counts() -> Result<(), Box<dyn std::error::Error>> {
let temp = tempdir()?;
let content = "One two\nThree"; fs::write(temp.path().join("file.txt"), content)?;
dircat_cmd()
.arg("--counts") .arg("-s") .current_dir(temp.path())
.assert()
.success()
.stdout(predicate::str::contains("## File: file.txt")) .stdout(predicate::str::contains(content)) .stdout(predicate::str::contains("\n---\nProcessed Files: (1)\n")) .stdout(predicate::str::contains("- file.txt (L:2 C:13 W:3)\n"));
temp.close()?;
Ok(())
}
#[test]
fn test_summary_with_counts_and_binary() -> Result<(), Box<dyn std::error::Error>> {
let temp = tempdir()?;
let text_content = "One two"; let binary_content = b"Binary\0Data"; fs::write(temp.path().join("text.txt"), text_content)?;
fs::File::create(temp.path().join("binary.bin"))?.write_all(binary_content)?;
dircat_cmd()
.arg("--counts")
.arg("-s")
.arg("--include-binary") .current_dir(temp.path())
.assert()
.success()
.stdout(predicate::str::contains("## File: text.txt"))
.stdout(predicate::str::contains(text_content))
.stdout(predicate::str::contains("## File: binary.bin"))
.stdout(predicate::str::contains(
String::from_utf8_lossy(binary_content).to_string(), ))
.stdout(predicate::str::contains("\n---\nProcessed Files: (2)\n"))
.stdout(predicate::str::contains("- binary.bin (Binary C:11)\n"))
.stdout(predicate::str::contains("- text.txt (L:1 C:7 W:2)\n"));
temp.close()?;
Ok(())
}