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:
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);