use assert_cmd::Command;
use predicates::prelude::*;
fn cmd() -> Command {
Command::cargo_bin("arborist").unwrap()
}
#[test]
fn directory_recursive_analysis() {
cmd()
.arg("tests/fixtures/nested_project/src/")
.assert()
.success()
.stdout(predicate::str::contains("lib.rs"))
.stdout(predicate::str::contains("main.rs"))
.stdout(predicate::str::contains("compute"))
.stdout(predicate::str::contains("transform"))
.stdout(predicate::str::contains("main"));
}
#[test]
fn directory_gitignore_excludes() {
let output = cmd()
.args(["tests/fixtures/nested_project/", "--gitignore"])
.output()
.unwrap();
assert!(output.status.success());
let stdout = String::from_utf8(output.stdout).unwrap();
assert!(
!stdout.contains("generated"),
"gitignored file should be excluded"
);
assert!(
stdout.contains("compute"),
"non-ignored files should be included"
);
}
#[test]
fn directory_language_filter() {
let output = cmd()
.args(["tests/fixtures/", "--languages", "rust"])
.output()
.unwrap();
assert!(output.status.success());
let stdout = String::from_utf8(output.stdout).unwrap();
assert!(stdout.contains("Rust"), "should include Rust files");
assert!(
!stdout.contains("Python"),
"should not include Python files"
);
}
#[test]
fn directory_no_recognized_files() {
cmd()
.args([
"tests/fixtures/nested_project/",
"--languages",
"javascript",
])
.assert()
.success();
}