mod common;
use common::compare_message;
use icu_locale::{Locale, locale};
use l10n_embed_derive::localize;
use rstest::rstest;
const DEFAULT_LOCALE: Locale = locale!("en-US");
#[localize("tests/locale/**/functions.ftl")]
pub enum MessageEnum {
Length { items: Vec<String> },
Numbers { items: Vec<String> },
Plurals { items: Vec<String> },
}
#[localize("tests/locale/**/functions.ftl")]
pub struct Length {
items: Vec<String>,
}
#[localize("tests/locale/**/functions.ftl")]
pub struct Numbers {
items: Vec<String>,
}
#[localize("tests/locale/**/functions.ftl")]
pub struct Plurals {
items: Vec<String>,
}
#[rstest]
#[case::zero(0)]
#[case::one(1)]
#[case::two(2)]
fn len(#[case] item_count: usize) {
let items: Vec<String> = (0..item_count)
.map(|index| format!("Item {index}"))
.collect();
compare_message(
MessageEnum::Length {
items: items.clone(),
},
format!("Item count: {item_count}"),
DEFAULT_LOCALE,
);
compare_message(
Length { items },
format!("Item count: {item_count}"),
DEFAULT_LOCALE,
);
}
#[rstest]
#[case::zero(0, "No items")]
#[case::one(1, "One item")]
#[case::two(2, "2 items")]
fn numbers(#[case] item_count: usize, #[case] expected: &str) {
let items: Vec<String> = (0..item_count)
.map(|index| format!("Item {index}"))
.collect();
compare_message(
MessageEnum::Numbers {
items: items.clone(),
},
expected,
DEFAULT_LOCALE,
);
compare_message(Numbers { items }, expected, DEFAULT_LOCALE);
}
#[rstest]
#[case::zero(0, "0 items")]
#[case::one(1, "One item")]
#[case::two(2, "2 items")]
fn plurals(#[case] item_count: usize, #[case] expected: &str) {
let items: Vec<String> = (0..item_count)
.map(|index| format!("Item {index}"))
.collect();
compare_message(
MessageEnum::Plurals {
items: items.clone(),
},
expected,
DEFAULT_LOCALE,
);
compare_message(Plurals { items }, expected, DEFAULT_LOCALE);
}