use std::process::Command;
use serde_json::Value;
fn pinned_contract() -> Value {
serde_json::from_str(include_str!("../contract/gcode.contract.json")).expect("pinned contract")
}
#[test]
fn contract_builder_matches_pinned_json() {
let actual = serde_json::to_value(gobby_code::contract::contract()).expect("contract json");
assert_eq!(actual, pinned_contract());
}
#[test]
fn contract_command_emits_pinned_json() {
let output = Command::new(env!("CARGO_BIN_EXE_gcode"))
.args(["contract", "--format", "json"])
.output()
.expect("run gcode contract");
assert!(
output.status.success(),
"gcode contract failed\nstdout:\n{}\nstderr:\n{}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
let actual: Value = serde_json::from_slice(&output.stdout).expect("contract stdout json");
assert_eq!(actual, pinned_contract());
}