use crate::codegen::naming::wire_variant_value;
use crate::core::ir::{EnumDef, EnumVariant};
use super::values::render_sealed_display;
fn variant(name: &str, serde_rename: Option<&str>) -> EnumVariant {
EnumVariant {
name: name.to_string(),
serde_rename: serde_rename.map(str::to_string),
..EnumVariant::default()
}
}
fn fixture_enum(rename_all: Option<&str>) -> EnumDef {
EnumDef {
name: "SealedThing".to_string(),
serde_rename_all: rename_all.map(str::to_string),
variants: vec![
variant("ElementBased", None),
variant("Image", None),
variant("Picture", Some("Image")),
],
..EnumDef::default()
}
}
#[test]
fn display_wire_strings_match_the_production_json_name_seam_under_snake_case() {
let enum_def = fixture_enum(Some("snake_case"));
let display_text = render_sealed_display("SealedThing", &enum_def, &[], "TestNamespace");
for v in &enum_def.variants {
let expected = wire_variant_value(&v.name, v.serde_rename.as_deref(), enum_def.serde_rename_all.as_deref());
assert!(
display_text.contains(&format!("=> \"{expected}\"")),
"variant `{}` should display as \"{expected}\" under snake_case, got:\n{display_text}",
v.name
);
}
assert!(
display_text.contains("SealedThing.Picture => \"Image\","),
"explicit serde(rename = \"Image\") on `Picture` must keep its case, got:\n{display_text}"
);
assert!(
!display_text.contains("SealedThing.Picture => \"image\","),
"explicit serde(rename = \"Image\") on `Picture` must not be lowercased, got:\n{display_text}"
);
}
#[test]
fn display_wire_strings_match_the_production_json_name_seam_under_kebab_case() {
let enum_def = fixture_enum(Some("kebab-case"));
let display_text = render_sealed_display("SealedThing", &enum_def, &[], "TestNamespace");
let expected_element_based = wire_variant_value("ElementBased", None, Some("kebab-case"));
assert_eq!(expected_element_based, "element-based");
assert!(
display_text.contains("=> \"element-based\","),
"ElementBased should display as \"element-based\" under kebab-case, got:\n{display_text}"
);
assert!(
!display_text.contains("=> \"elementbased\","),
"kebab-case must not collapse to the bare lowercased variant name, got:\n{display_text}"
);
}