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") ); } }