use es_fluent::__manager_core::{
FluentManager, I18nModule, I18nModuleDescriptor, I18nModuleRegistration, LocalizationError,
Localizer, ModuleData,
};
use es_fluent::{
FluentValue, GlobalLocalizationError, localize, select_language, set_shared_context,
try_set_shared_context,
};
use std::collections::HashMap;
use std::sync::Arc;
use unic_langid::langid;
struct SharedModule;
struct SharedLocalizer;
static SHARED_MODULE_DATA: ModuleData = ModuleData {
name: "es-fluent-shared-context-test",
domain: "es-fluent-shared-context-test",
supported_languages: &[],
namespaces: &[],
};
impl Localizer for SharedLocalizer {
fn select_language(
&self,
_lang: &unic_langid::LanguageIdentifier,
) -> Result<(), LocalizationError> {
Ok(())
}
fn localize<'a>(
&self,
id: &str,
_args: Option<&HashMap<&str, FluentValue<'a>>>,
) -> Option<String> {
if id == "shared-key" {
Some("from-shared-context".to_string())
} else {
None
}
}
}
impl I18nModuleDescriptor for SharedModule {
fn data(&self) -> &'static ModuleData {
&SHARED_MODULE_DATA
}
}
impl I18nModule for SharedModule {
fn create_localizer(&self) -> Box<dyn Localizer> {
Box::new(SharedLocalizer)
}
}
static SHARED_MODULE: SharedModule = SharedModule;
es_fluent::__inventory::submit! {
&SHARED_MODULE as &dyn I18nModuleRegistration
}
#[test]
fn shared_context_localizes_and_rejects_second_set() {
let manager = Arc::new(FluentManager::new_with_discovered_modules());
set_shared_context(manager);
select_language(&langid!("en-US")).expect("shared context should allow language selection");
assert_eq!(localize("shared-key", None), "from-shared-context");
let second_set = try_set_shared_context(Arc::new(FluentManager::new_with_discovered_modules()))
.expect_err("second shared context install should fail");
assert!(matches!(
second_set,
GlobalLocalizationError::ContextAlreadyInitialized
));
}