notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

commit 26143cad5461fc6855e1164aac86dde797f8f748
parent 549fdc5da82b291bd1e811fed9aee3fa34acbb9b
Author: William Casarin <jb55@jb55.com>
Date:   Tue, 22 Jul 2025 13:24:43 -0700

i18n: disable bidi for tests

> This is important for cases such as when a right-to-left user name is
presented in the left-to-right message.

> In some cases, such as testing, the user may want to disable the
isolating.

See: https://docs.rs/fluent/latest/fluent/bundle/struct.FluentBundle.html#method.set_use_isolating
Signed-off-by: William Casarin <jb55@jb55.com>

Diffstat:
Mcrates/notedeck/src/i18n/manager.rs | 19+++++++++++++++++--
Mcrates/notedeck/src/time.rs | 20++++++++++----------
2 files changed, 27 insertions(+), 12 deletions(-)

diff --git a/crates/notedeck/src/i18n/manager.rs b/crates/notedeck/src/i18n/manager.rs @@ -62,6 +62,8 @@ pub struct Localization { normalized_key_cache: HashMap<String, IntlKeyBuf>, /// Bundles bundles: HashMap<LanguageIdentifier, Bundle>, + + use_isolating: bool, } impl Default for Localization { @@ -84,6 +86,7 @@ impl Default for Localization { current_locale: default_locale.to_owned(), available_locales, fallback_locale, + use_isolating: true, normalized_key_cache: HashMap::new(), string_cache: HashMap::new(), bundles: HashMap::new(), @@ -97,6 +100,14 @@ impl Localization { Localization::default() } + /// Disable bidirectional isolation markers. mostly useful for tests + pub fn no_bidi() -> Self { + Localization { + use_isolating: false, + ..Localization::default() + } + } + /// Gets a localized string by its ID pub fn get_string(&mut self, id: IntlKey<'_>) -> Result<String, IntlError> { self.get_cached_string(id, None) @@ -152,8 +163,11 @@ impl Localization { } fn try_load_bundle(&mut self, lang: &LanguageIdentifier) -> Result<(), IntlError> { - self.bundles - .insert(lang.to_owned(), Self::load_bundle(lang)?); + let mut bundle = Self::load_bundle(lang)?; + if !self.use_isolating { + bundle.set_use_isolating(false); + } + self.bundles.insert(lang.to_owned(), bundle); Ok(()) } @@ -228,6 +242,7 @@ impl Localization { ); self.try_load_bundle(&locale) .expect("failed to load fallback bundle!?"); + Ok(()) } diff --git a/crates/notedeck/src/time.rs b/crates/notedeck/src/time.rs @@ -107,7 +107,7 @@ mod tests { #[test] fn test_now_condition() { let now = get_current_timestamp(); - let mut intl = Localization::default(); + let mut intl = Localization::no_bidi(); // Test 0 seconds ago let result = time_ago_between(&mut intl, now, now); @@ -137,7 +137,7 @@ mod tests { #[test] fn test_seconds_condition() { let now = get_current_timestamp(); - let mut i18n = Localization::default(); + let mut i18n = Localization::no_bidi(); // Test 3 seconds ago let result = time_ago_between(&mut i18n, now - 3, now); @@ -163,7 +163,7 @@ mod tests { #[test] fn test_minutes_condition() { let now = get_current_timestamp(); - let mut i18n = Localization::default(); + let mut i18n = Localization::no_bidi(); // Test 1 minute ago let result = time_ago_between(&mut i18n, now - ONE_MINUTE_IN_SECONDS, now); @@ -189,7 +189,7 @@ mod tests { #[test] fn test_hours_condition() { let now = get_current_timestamp(); - let mut i18n = Localization::default(); + let mut i18n = Localization::no_bidi(); // Test 1 hour ago let result = time_ago_between(&mut i18n, now - ONE_HOUR_IN_SECONDS, now); @@ -215,7 +215,7 @@ mod tests { #[test] fn test_days_condition() { let now = get_current_timestamp(); - let mut i18n = Localization::default(); + let mut i18n = Localization::no_bidi(); // Test 1 day ago let result = time_ago_between(&mut i18n, now - ONE_DAY_IN_SECONDS, now); @@ -233,7 +233,7 @@ mod tests { #[test] fn test_weeks_condition() { let now = get_current_timestamp(); - let mut i18n = Localization::default(); + let mut i18n = Localization::no_bidi(); // Test 1 week ago let result = time_ago_between(&mut i18n, now - ONE_WEEK_IN_SECONDS, now); @@ -247,7 +247,7 @@ mod tests { #[test] fn test_months_condition() { let now = get_current_timestamp(); - let mut i18n = Localization::default(); + let mut i18n = Localization::no_bidi(); // Test 1 month ago let result = time_ago_between(&mut i18n, now - ONE_MONTH_IN_SECONDS, now); @@ -265,7 +265,7 @@ mod tests { #[test] fn test_years_condition() { let now = get_current_timestamp(); - let mut i18n = Localization::default(); + let mut i18n = Localization::no_bidi(); // Test 1 year ago let result = time_ago_between(&mut i18n, now - ONE_YEAR_IN_SECONDS, now); @@ -287,7 +287,7 @@ mod tests { #[test] fn test_future_timestamps() { let now = get_current_timestamp(); - let mut i18n = Localization::default(); + let mut i18n = Localization::no_bidi(); // Test 1 minute in the future let result = time_ago_between(&mut i18n, now + ONE_MINUTE_IN_SECONDS, now); @@ -317,7 +317,7 @@ mod tests { #[test] fn test_boundary_conditions() { let now = get_current_timestamp(); - let mut i18n = Localization::default(); + let mut i18n = Localization::no_bidi(); // Test boundary between seconds and minutes let result = time_ago_between(&mut i18n, now - 60, now);