#![allow(missing_docs)]
use assert_cmd::Command;
use predicates::prelude::*;
fn cli() -> Command {
Command::cargo_bin("bca").unwrap()
}
#[test]
fn no_subcommand_rejected() {
cli()
.assert()
.failure()
.stderr(predicate::str::contains("Usage").or(predicate::str::contains("help")));
}
#[test]
fn two_subcommands_rejected() {
cli()
.args(["dump", "metrics"])
.assert()
.failure()
.stderr(predicate::str::contains("unexpected argument 'metrics'"));
}
#[test]
fn top_rejected_on_metrics() {
cli()
.args(["metrics", "--top", "5"])
.assert()
.failure()
.stderr(predicate::str::contains("--top"));
}
#[test]
fn markdown_rejected_as_metrics_format() {
cli()
.args(["metrics", "-O", "markdown"])
.assert()
.failure()
.stderr(predicate::str::contains("invalid value"));
}
#[test]
fn legacy_metrics_flag_emits_migration_hint() {
cli()
.args(["--metrics", "-O", "markdown"])
.assert()
.failure()
.stderr(predicate::str::contains("report markdown"))
.stderr(predicate::str::contains("subcommands"));
}
#[test]
fn find_without_nodes_rejected() {
cli()
.args(["find"])
.assert()
.failure()
.stderr(predicate::str::contains("<NODES>"));
}
#[test]
fn count_without_nodes_rejected() {
cli()
.args(["count"])
.assert()
.failure()
.stderr(predicate::str::contains("<NODES>"));
}
#[test]
fn metrics_rejects_offender_formats_with_migration_hint() {
for fmt in ["checkstyle", "sarif", "clang-warning", "msvc-warning"] {
cli()
.args(["metrics", "-O", fmt])
.assert()
.failure()
.stderr(predicate::str::contains("bca check"))
.stderr(predicate::str::contains(fmt));
}
}
#[test]
fn ops_rejects_offender_formats_with_migration_hint() {
for fmt in ["checkstyle", "sarif", "clang-warning", "msvc-warning"] {
cli()
.args(["ops", "-O", fmt])
.assert()
.failure()
.stderr(predicate::str::contains("bca check"))
.stderr(predicate::str::contains(fmt));
}
}
#[test]
fn ops_rejects_csv_format_at_runtime() {
cli()
.args(["ops", "-O", "csv"])
.assert()
.failure()
.stderr(predicate::str::contains("not supported by `ops`"))
.stderr(predicate::str::contains("metric-shaped"));
}