#[cfg(test)]
mod tests {
use enshwick::abi::Status;
use enshwick::{Load, Mod, Off};
struct Lanterns;
impl Mod for Lanterns {
fn manifest() -> &'static enshwick::abi::Manifest {
enshwick::manifest!(id: "you.lanterns", side: SERVER)
}
fn init(load: &mut Load<'_>) -> Result<Self, Off> {
let _texts = load.texts(TEXTS)?;
Err(Off::text("lanterns.off", &[("lit", "20")]))
}
}
const TEXTS: &str = "[en]\n\"lanterns.off\" = \"{lit} lanterns are lit, too many.\"\n\
[uk]\n\"lanterns.off\" = \"Горить {lit} ліхтарів, забагато.\"\n";
enshwick::declare_mod!(Lanterns);
#[test]
fn an_init_that_turns_the_mod_off_tells_the_loader_why_in_its_texts() {
let loader = enshwick::test::FakeHost::new().install();
let status = unsafe { loader.start(enshwick_mod_init, enshwick_mod_ready) };
assert_eq!(status, Status::REFUSED);
let faults = loader.faults();
let [sent] = faults.as_slice() else {
panic!("one reason, got {faults:?}");
};
let texts = enshwick::i18n::Texts::parse(&loader.published_texts().unwrap_or_default())
.unwrap_or_default();
assert_eq!(
texts
.reason(sent, enshwick::i18n::Language::UK_UA)
.as_deref(),
Some("Горить 20 ліхтарів, забагато.")
);
assert_eq!(
texts
.reason(sent, enshwick::i18n::Language::FALLBACK)
.as_deref(),
Some("20 lanterns are lit, too many.")
);
}
}