Test both structs and enums in `l10n_embed_derive`

finchie
Aug 13, 2025, 3:49 AM
F64TRIFZZYRZJTM3OWBI7IEKY3S37GGH2KKKS65HRKIOZZOKPFJQC

Dependencies

  • [2] RUCC2HKZ Rename from `fluent_embed` to `l10n_embed`
  • [3] Y6YSEDJM Fix bug preventing structs from using selectors
  • [4] KF65O6OD Add tests for placeables
  • [5] S26YOXQI Update `Cargo.toml` in workspace and packages
  • [6] S2444K42 Refactor selectors test to not rely on funciton calls
  • [7] MABGENI7 Refactor `fluent_embed_derive` tests
  • [8] AAERM7PB Add selector tests for the `fr` locale
  • [9] 7FYXVNAB Ignore comments in Fluent source code
  • [10] 6ABVDTXZ Improve `fluent_embed_derive` test suite
  • [11] 6XEMHUGS Use full `Locale` instead of `LanguageIdentifier` subset
  • [12] 7M4UI3TW Update dependencies to latest versions
  • [13] JWZT34UC Add `Localize`` trait bound for each field in the derived item
  • [*] XEEXWJLG Add simple end-to-end test for selectors

Change contents

  • replacement in l10n_embed_derive/tests/selectors.rs at line 39
    [4.1190][3.117:359]()
    let enum_data = MessageEnum::Emails { unread_emails };
    compare_message(enum_data, expected_message.clone(), locale.clone());
    let struct_data = Emails { unread_emails };
    compare_message(struct_data, expected_message, locale);
    [4.1190]
    [4.124]
    compare_message(Emails { unread_emails }, &expected_message, locale.clone());
    compare_message(
    MessageEnum::Emails { unread_emails },
    expected_message,
    locale,
    );
  • replacement in l10n_embed_derive/tests/placeables.rs at line 6
    [4.436][4.671:695](),[4.70][4.671:695]()
    use icu_locale::locale;
    [4.42]
    [2.583]
    use icu_locale::{Locale, locale};
  • edit in l10n_embed_derive/tests/placeables.rs at line 9
    [4.253]
    [4.290]
    const DEFAULT_LOCALE: Locale = locale!("en-US");
  • edit in l10n_embed_derive/tests/placeables.rs at line 17
    [4.179]
    [4.602]
    }
    #[localize("tests/locale/**/placeables.ftl")]
    pub struct OpenTabs {
    quantity: u64,
  • edit in l10n_embed_derive/tests/placeables.rs at line 24
    [4.605]
    [4.617]
    #[localize("tests/locale/**/placeables.ftl")]
    pub struct Person {
    name: String,
    }
    #[localize("tests/locale/**/placeables.ftl")]
    pub struct TabStatus {
    name: String,
    quantity: u64,
    }
  • replacement in l10n_embed_derive/tests/placeables.rs at line 40
    [4.345][4.345:448](),[4.448][4.696:722](),[4.722][4.474:480](),[4.474][4.474:480]()
    compare_message(
    Message::OpenTabs { quantity },
    format!("{expected} tabs open."),
    locale!("en-US"),
    )
    [4.345]
    [4.779]
    let expected = format!("{expected} tabs open.");
    compare_message(OpenTabs { quantity }, &expected, DEFAULT_LOCALE);
    compare_message(Message::OpenTabs { quantity }, expected, DEFAULT_LOCALE);
  • replacement in l10n_embed_derive/tests/placeables.rs at line 53
    [4.624][4.624:750](),[4.750][4.723:749](),[4.749][4.776:782](),[4.776][4.776:782]()
    compare_message(
    Message::Person { name: name.clone() },
    format!("How many tabs does {name} have open?"),
    locale!("en-US"),
    )
    [4.624]
    [4.1210]
    let expected = format!("How many tabs does {name} have open?");
    compare_message(Person { name: name.clone() }, &expected, DEFAULT_LOCALE);
    compare_message(Message::Person { name }, expected, DEFAULT_LOCALE);
  • replacement in l10n_embed_derive/tests/placeables.rs at line 63
    [4.926][4.926:1022]()
    fn numbers_and_strings(#[case] quantity: u64, #[case] expected: String, #[case] name: String) {
    [4.926]
    [4.1022]
    fn numbers_and_strings(#[case] quantity: u64, #[case] tab_count: String, #[case] name: String) {
    let expected = format!("{name} has {tab_count} tabs open!");
  • replacement in l10n_embed_derive/tests/placeables.rs at line 67
    [4.1043][4.1043:1072]()
    Message::TabStatus {
    [4.1043]
    [4.1072]
    TabStatus {
  • replacement in l10n_embed_derive/tests/placeables.rs at line 71
    [4.1137][4.1137:1190](),[4.1190][4.750:776]()
    format!("{name} has {expected} tabs open!"),
    locale!("en-US"),
    [4.1137]
    [4.2015]
    &expected,
    DEFAULT_LOCALE,
    );
    compare_message(
    Message::TabStatus { name, quantity },
    expected,
    DEFAULT_LOCALE,
  • replacement in l10n_embed_derive/tests/lifetimes.rs at line 6
    [4.472][4.777:801](),[4.1434][4.777:801]()
    use icu_locale::locale;
    [4.1406]
    [2.692]
    use icu_locale::{Locale, locale};
  • edit in l10n_embed_derive/tests/lifetimes.rs at line 8
    [2.725]
    [4.1458]
    const DEFAULT_LOCALE: Locale = locale!("en-US");
  • replacement in l10n_embed_derive/tests/lifetimes.rs at line 16
    [4.1548][4.1548:1677](),[4.1677][4.802:828](),[4.828][4.1703:1709](),[4.1703][4.1703:1709]()
    #[test]
    fn local_str() {
    let name = "hi";
    compare_message(
    Greeting { name },
    format!("Hello, {name}!"),
    locale!("en-US"),
    )
    [4.1548]
    [4.1709]
    #[localize("tests/locale/**/basic.ftl")]
    pub enum Message<'a> {
    Greeting { name: &'a str },
  • replacement in l10n_embed_derive/tests/lifetimes.rs at line 23
    [4.1738][4.1738:1864](),[4.1864][4.829:855](),[4.855][4.1890:1896](),[4.1890][4.1890:1896]()
    const NAME: &'static str = "hi";
    compare_message(
    Greeting { name: NAME },
    format!("Hello, {NAME}!"),
    locale!("en-US"),
    )
    [4.1738]
    [4.1896]
    let name = "Ferris";
    let expected = "Hello, Ferris!";
    compare_message(Greeting { name }, expected, DEFAULT_LOCALE);
    compare_message(Message::Greeting { name }, expected, DEFAULT_LOCALE);
  • replacement in l10n_embed_derive/tests/generics.rs at line 6
    [4.508][4.856:880](),[4.2083][4.856:880]()
    use icu_locale::locale;
    [4.2055]
    [2.801]
    use icu_locale::{Locale, locale};
  • edit in l10n_embed_derive/tests/generics.rs at line 9
    [4.2108]
    [4.2108]
    const DEFAULT_LOCALE: Locale = locale!("en-US");
  • edit in l10n_embed_derive/tests/generics.rs at line 14
    [4.2187]
    [4.2187]
    }
    #[localize("tests/locale/**/basic.ftl")]
    pub enum Message<T> {
    Greeting { name: T },
  • replacement in l10n_embed_derive/tests/generics.rs at line 24
    [4.2237][4.881:956]()
    compare_message(Greeting { name }, "Hello, Ferris!", locale!("en-US"))
    [4.2237]
    [4.2312]
    let expected = "Hello, Ferris!";
    compare_message(Greeting { name }, expected, DEFAULT_LOCALE);
    compare_message(Message::Greeting { name }, expected, DEFAULT_LOCALE);
  • replacement in l10n_embed_derive/tests/generics.rs at line 33
    [4.2355][4.957:1036]()
    compare_message(Greeting { name }, format!("Hello, 2!"), locale!("en-US"))
    [4.2355]
    [4.2434]
    let expected = "Hello, 2!";
    compare_message(Greeting { name }, expected, DEFAULT_LOCALE);
    compare_message(Message::Greeting { name }, expected, DEFAULT_LOCALE);
  • replacement in l10n_embed_derive/tests/empty_fields.rs at line 6
    [4.544][4.1037:1061](),[4.2645][4.1037:1061]()
    use icu_locale::locale;
    [4.2617]
    [2.930]
    use icu_locale::{Locale, locale};
  • edit in l10n_embed_derive/tests/empty_fields.rs at line 8
    [2.963]
    [4.2669]
    const DEFAULT_LOCALE: Locale = locale!("en-US");
  • replacement in l10n_embed_derive/tests/empty_fields.rs at line 21
    [4.2833][4.1062:1126]()
    compare_message(Message, "Hello, world!", locale!("en-US"))
    [4.2833]
    [4.2897]
    compare_message(Message, "Hello, world!", DEFAULT_LOCALE);
  • replacement in l10n_embed_derive/tests/empty_fields.rs at line 26
    [4.2928][4.1127:1198]()
    compare_message(Empty::Message, "Hello, world!", locale!("en-US"))
    [4.2928]
    [4.2999]
    compare_message(Empty::Message, "Hello, world!", DEFAULT_LOCALE);