extern crate shepherd_core as shepherd;
use shepherd::Harness;
#[test]
fn ff_resolve() {
let _: Option<shepherd::Error> = None;
let _: Option<Harness> = None;
#[cfg(feature = "std")]
{
let _: Option<shepherd::ShepherdConfig> = None;
let _: Option<shepherd::settings::ProjectConfig> = None;
}
}
#[test]
fn harness_is_a_closed_value_set() {
use strum::{EnumCount, VariantNames};
assert_eq!(Harness::COUNT, 4);
assert_eq!(Harness::VARIANTS, ["claude", "codex", "pi", "prime_agent"]);
}
#[test]
fn harness_round_trips_through_its_wire_form() {
use core::str::FromStr;
use strum::VariantNames;
for variant in Harness::VARIANTS {
let parsed = Harness::from_str(variant).expect("variant name must parse");
assert_eq!(parsed.to_string(), *variant);
}
assert_eq!(Harness::from_str("CLAUDE").unwrap(), Harness::ClaudeCode);
assert_eq!(
Harness::from_str("CLAUDE_CODE").expect("the pre-v6.4.5 wire alias stays readable"),
Harness::ClaudeCode,
);
}
#[cfg(feature = "json")]
#[test]
fn harness_json_writes_the_canonical_name_and_reads_the_legacy_alias() {
assert_eq!(
serde_json::to_string(&Harness::ClaudeCode).expect("serialize harness"),
r#""claude""#,
);
assert_eq!(
serde_json::from_str::<Harness>(r#""claude_code""#).expect("read legacy alias"),
Harness::ClaudeCode,
);
}