use crate::core::resolver::{IResolver, orchestrator::LocaleEntry};
use crate::data::swap::IRegistryState;
#[derive(Default)]
pub struct DefaultFallbackResolver;
impl DefaultFallbackResolver {
#[must_use]
pub fn new() -> Self {
Self
}
}
impl IResolver for DefaultFallbackResolver {
fn resolve(
&self,
_tag: &str,
_state: &dyn IRegistryState,
path: &mut Vec<String>,
) -> Option<LocaleEntry> {
path.push("en-US".to_string());
Some(LocaleEntry { id: "en-US".to_string(), resolution_path: path.clone() })
}
fn set_next(&mut self, _next: Box<dyn IResolver>) {
}
}
#[cfg(test)]
mod tests {
use super::*;
use crate::core::resolver::test_utils::*;
#[test]
fn test_fallback_unconditionally_resolves_to_en_us() {
let mock_state = MockRegistryState::new();
let resolver = DefaultFallbackResolver::new();
let mut path = vec!["xx-YY".to_string(), "xx".to_string()];
let entry = resolver
.resolve("xx", &mock_state, &mut path)
.expect("LMS-TEST: Fallback must unconditionally succeed");
assert_eq!(entry.id, "en-US");
assert_eq!(entry.resolution_path.len(), 3);
assert_eq!(entry.resolution_path[2], "en-US");
}
}