use super::*;
#[test]
fn every_open_rust_vocabulary_is_open_in_swift_too() {
let swift = generate_swift();
let rust = generate_rust();
let open_in_rust = [
"HarnAgentTerminalClass",
"HarnAgentTerminalKind",
"HarnAgentTerminalOwner",
"HarnLlmErrorCategory",
"HarnLlmErrorKind",
"HarnLlmErrorReason",
];
for name in open_in_rust {
assert!(
rust.contains(&format!("pub enum {name} {{"))
&& rust.contains(" Unrecognized(String),\n"),
"{name} is not an open enum in the Rust artifact"
);
assert!(
!swift.contains(&format!(
"public enum {name}: String, Codable, Sendable, CaseIterable {{"
)),
"{name} is still a closed Swift enum, so a value a newer Harn adds fails to decode"
);
assert!(
swift.contains(&format!("public struct {name}: RawRepresentable,")),
"{name} is missing the open Swift form"
);
}
assert!(swift
.contains(" public init(rawValue: String) {\n self.rawValue = rawValue\n }"));
assert!(swift.contains(" ].map { Self(rawValue: $0) }\n"));
for value in agent_terminal_kind_values() {
assert!(
swift.contains(&format!("= Self(rawValue: {value:?})")),
"Swift artifact missing terminal kind member for {value}"
);
}
}