use assert_cmd::cargo::cargo_bin_cmd;
use predicates::prelude::*;
use tempfile::TempDir;
#[test]
fn test_extensions_parameter_single() {
let temp_dir = TempDir::new().unwrap();
std::fs::write(temp_dir.path().join("test.txt"), "content\n").unwrap();
std::fs::write(temp_dir.path().join("test.rs"), "content \n").unwrap();
std::fs::write(temp_dir.path().join("test.py"), "content\n").unwrap();
let mut cmd = cargo_bin_cmd!("lineguard");
cmd.arg(temp_dir.path());
cmd.arg("--recursive");
cmd.arg("--extensions").arg("txt");
cmd.arg("--format").arg("json");
cmd.assert()
.success()
.stdout(predicate::str::contains("\"files_checked\": 1")); }
#[test]
fn test_extensions_parameter_multiple() {
let temp_dir = TempDir::new().unwrap();
std::fs::write(temp_dir.path().join("test.txt"), "content\n").unwrap();
std::fs::write(temp_dir.path().join("test.rs"), "content \n").unwrap();
std::fs::write(temp_dir.path().join("test.py"), "content\n").unwrap();
std::fs::write(temp_dir.path().join("test.md"), "content \n").unwrap();
let mut cmd = cargo_bin_cmd!("lineguard");
cmd.arg(temp_dir.path());
cmd.arg("--recursive");
cmd.arg("--extensions").arg("txt,py");
cmd.arg("--format").arg("json");
cmd.assert()
.success()
.stdout(predicate::str::contains("\"files_checked\": 2")); }
#[test]
fn test_extensions_includes_hidden_files_by_default() {
let temp_dir = TempDir::new().unwrap();
std::fs::write(temp_dir.path().join("test.txt"), "content\n").unwrap();
std::fs::write(temp_dir.path().join(".hidden.txt"), "content \n").unwrap();
let mut cmd = cargo_bin_cmd!("lineguard");
cmd.arg(temp_dir.path());
cmd.arg("--recursive");
cmd.arg("--extensions").arg("txt");
cmd.arg("--format").arg("json");
cmd.assert()
.failure() .stdout(predicate::str::contains("\"files_checked\": 2")) .stdout(predicate::str::contains(".hidden.txt")); }
#[test]
fn test_extensions_combines_with_ignore() {
let temp_dir = TempDir::new().unwrap();
std::fs::write(temp_dir.path().join("test.txt"), "content\n").unwrap();
std::fs::write(temp_dir.path().join("ignore.txt"), "content \n").unwrap();
std::fs::write(temp_dir.path().join("test.rs"), "content\n").unwrap();
let mut cmd = cargo_bin_cmd!("lineguard");
cmd.arg(temp_dir.path());
cmd.arg("--recursive");
cmd.arg("--extensions").arg("txt");
cmd.arg("--ignore").arg("ignore.txt");
cmd.arg("--format").arg("json");
cmd.assert()
.success()
.stdout(predicate::str::contains("\"files_checked\": 1")) .stdout(predicate::str::contains("ignore.txt").not());
}