brick/tests/setup_cli.rs

58 lines
1.7 KiB
Rust

use serde_json::Value;
use std::process::Command;
#[test]
fn setup_reports_tree_sitter_p4_capability() {
let output = Command::new(env!("CARGO_BIN_EXE_brick"))
.args(["setup", "--json"])
.output()
.unwrap();
assert!(
output.status.success(),
"{}",
String::from_utf8_lossy(&output.stderr)
);
let report: Value = serde_json::from_slice(&output.stdout).unwrap();
assert_eq!(report["setup_schema_version"], 1);
assert_eq!(
report["tree_sitter_p4_pilot"]["available"],
cfg!(feature = "tree-sitter-p4-pilot")
);
assert_eq!(
report["tree_sitter_p4_pilot"]["cargo_feature"],
"tree-sitter-p4-pilot"
);
assert_eq!(
report["tree_sitter_p4_pilot"]["grammar_commit"],
"19b9dbdc2a2fb1d6c1b5346a75537434892a94b1"
);
assert_eq!(
report["tree_sitter_p4_pilot"]["reason"].is_null(),
cfg!(feature = "tree-sitter-p4-pilot")
);
}
#[test]
fn setup_can_require_tree_sitter_p4_capability() {
let output = Command::new(env!("CARGO_BIN_EXE_brick"))
.args(["setup", "--require-tree-sitter-p4-pilot"])
.output()
.unwrap();
assert_eq!(
output.status.success(),
cfg!(feature = "tree-sitter-p4-pilot"),
"stdout={}\nstderr={}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
if cfg!(feature = "tree-sitter-p4-pilot") {
assert!(String::from_utf8_lossy(&output.stdout).contains("available"));
} else {
assert!(
String::from_utf8_lossy(&output.stderr)
.contains("tree-sitter P4 pilot is required but unavailable")
);
}
}