registry.rs (9947B)
1 use l10nregistry_tests::{FileSource, RegistrySetup, TestFileFetcher}; 2 use unic_langid::LanguageIdentifier; 3 4 static FTL_RESOURCE_TOOLKIT: &str = "toolkit/global/textActions.ftl"; 5 static FTL_RESOURCE_BROWSER: &str = "branding/brand.ftl"; 6 7 #[test] 8 fn test_get_sources_for_resource() { 9 let en_us: LanguageIdentifier = "en-US".parse().unwrap(); 10 let setup = RegistrySetup::new( 11 "test", 12 vec![ 13 FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"), 14 FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"), 15 ], 16 vec![en_us.clone()], 17 ); 18 let fetcher = TestFileFetcher::new(); 19 let (_, reg) = fetcher.get_registry_and_environment(setup); 20 21 { 22 let metasources = reg 23 .try_borrow_metasources() 24 .expect("Unable to borrow metasources."); 25 26 let toolkit = metasources.file_source_by_name(0, "toolkit").unwrap(); 27 let browser = metasources.file_source_by_name(0, "browser").unwrap(); 28 let toolkit_resource_id = FTL_RESOURCE_TOOLKIT.into(); 29 30 let mut i = metasources.get_sources_for_resource(0, &en_us, &toolkit_resource_id); 31 32 assert_eq!(i.next(), Some(toolkit)); 33 assert_eq!(i.next(), Some(browser)); 34 assert_eq!(i.next(), None); 35 36 assert!(browser 37 .fetch_file_sync(&en_us, &FTL_RESOURCE_TOOLKIT.into(), false) 38 .is_none()); 39 40 let mut i = metasources.get_sources_for_resource(0, &en_us, &toolkit_resource_id); 41 assert_eq!(i.next(), Some(toolkit)); 42 assert_eq!(i.next(), None); 43 44 assert!(toolkit 45 .fetch_file_sync(&en_us, &FTL_RESOURCE_TOOLKIT.into(), false) 46 .is_some()); 47 48 let mut i = metasources.get_sources_for_resource(0, &en_us, &toolkit_resource_id); 49 assert_eq!(i.next(), Some(toolkit)); 50 assert_eq!(i.next(), None); 51 } 52 } 53 54 #[test] 55 fn test_generate_bundles_for_lang_sync() { 56 let en_us: LanguageIdentifier = "en-US".parse().unwrap(); 57 let setup = RegistrySetup::new( 58 "test", 59 vec![ 60 FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"), 61 FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"), 62 ], 63 vec![en_us.clone()], 64 ); 65 let fetcher = TestFileFetcher::new(); 66 let (_, reg) = fetcher.get_registry_and_environment(setup); 67 68 let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()]; 69 let mut i = reg.generate_bundles_for_lang_sync(en_us.clone(), paths); 70 71 assert!(i.next().is_some()); 72 assert!(i.next().is_none()); 73 } 74 75 #[test] 76 fn test_generate_bundles_sync() { 77 let en_us: LanguageIdentifier = "en-US".parse().unwrap(); 78 let setup = RegistrySetup::new( 79 "test", 80 vec![ 81 FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"), 82 FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"), 83 ], 84 vec![en_us.clone()], 85 ); 86 let fetcher = TestFileFetcher::new(); 87 let (_, reg) = fetcher.get_registry_and_environment(setup); 88 89 let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()]; 90 let lang_ids = vec![en_us]; 91 let mut i = reg.generate_bundles_sync(lang_ids.into_iter(), paths); 92 93 assert!(i.next().is_some()); 94 assert!(i.next().is_none()); 95 } 96 97 #[tokio::test] 98 async fn test_generate_bundles_for_lang() { 99 use futures::stream::StreamExt; 100 101 let en_us: LanguageIdentifier = "en-US".parse().unwrap(); 102 let setup = RegistrySetup::new( 103 "test", 104 vec![ 105 FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"), 106 FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"), 107 ], 108 vec![en_us.clone()], 109 ); 110 let fetcher = TestFileFetcher::new(); 111 let (_, reg) = fetcher.get_registry_and_environment(setup); 112 113 let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()]; 114 let mut i = reg 115 .generate_bundles_for_lang(en_us, paths) 116 .expect("Failed to get GenerateBundles."); 117 118 assert!(i.next().await.is_some()); 119 assert!(i.next().await.is_none()); 120 } 121 122 #[tokio::test] 123 async fn test_generate_bundles() { 124 use futures::stream::StreamExt; 125 126 let en_us: LanguageIdentifier = "en-US".parse().unwrap(); 127 let setup = RegistrySetup::new( 128 "test", 129 vec![ 130 FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"), 131 FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"), 132 ], 133 vec![en_us.clone()], 134 ); 135 let fetcher = TestFileFetcher::new(); 136 let (_, reg) = fetcher.get_registry_and_environment(setup); 137 138 let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()]; 139 let langs = vec![en_us]; 140 let mut i = reg 141 .generate_bundles(langs.into_iter(), paths) 142 .expect("Failed to get GenerateBundles."); 143 144 assert!(i.next().await.is_some()); 145 assert!(i.next().await.is_none()); 146 } 147 148 #[test] 149 fn test_manage_sources() { 150 let en_us: LanguageIdentifier = "en-US".parse().unwrap(); 151 let setup = RegistrySetup::new( 152 "test", 153 vec![ 154 FileSource::new("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"), 155 FileSource::new("browser", None, vec![en_us.clone()], "browser/{locale}/"), 156 ], 157 vec![en_us.clone()], 158 ); 159 let fetcher = TestFileFetcher::new(); 160 let (_, reg) = fetcher.get_registry_and_environment(setup); 161 162 let lang_ids = vec![en_us]; 163 164 let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()]; 165 166 let mut i = reg.generate_bundles_sync(lang_ids.clone().into_iter(), paths); 167 168 assert!(i.next().is_some()); 169 assert!(i.next().is_none()); 170 171 reg.clone() 172 .remove_sources(vec!["toolkit"]) 173 .expect("Failed to remove a source."); 174 175 let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()]; 176 let mut i = reg.generate_bundles_sync(lang_ids.clone().into_iter(), paths); 177 assert!(i.next().is_none()); 178 179 let paths = vec![FTL_RESOURCE_BROWSER.into()]; 180 let mut i = reg.generate_bundles_sync(lang_ids.clone().into_iter(), paths); 181 assert!(i.next().is_some()); 182 assert!(i.next().is_none()); 183 184 reg.register_sources(vec![fetcher.get_test_file_source( 185 "toolkit", 186 None, 187 lang_ids.clone(), 188 "browser/{locale}/", 189 )]) 190 .expect("Failed to register a source."); 191 192 let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()]; 193 let mut i = reg.generate_bundles_sync(lang_ids.clone().into_iter(), paths); 194 assert!(i.next().is_none()); 195 196 reg.update_sources(vec![fetcher.get_test_file_source( 197 "toolkit", 198 None, 199 lang_ids.clone(), 200 "toolkit/{locale}/", 201 )]) 202 .expect("Failed to update a source."); 203 204 let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()]; 205 let mut i = reg.generate_bundles_sync(lang_ids.clone().into_iter(), paths); 206 assert!(i.next().is_some()); 207 assert!(i.next().is_none()); 208 } 209 210 #[test] 211 fn test_generate_bundles_with_metasources_sync() { 212 let en_us: LanguageIdentifier = "en-US".parse().unwrap(); 213 let setup = RegistrySetup::new( 214 "test", 215 vec![ 216 FileSource::new( 217 "toolkit", 218 Some("app"), 219 vec![en_us.clone()], 220 "toolkit/{locale}/", 221 ), 222 FileSource::new( 223 "browser", 224 Some("app"), 225 vec![en_us.clone()], 226 "browser/{locale}/", 227 ), 228 FileSource::new( 229 "toolkit", 230 Some("langpack"), 231 vec![en_us.clone()], 232 "toolkit/{locale}/", 233 ), 234 FileSource::new( 235 "browser", 236 Some("langpack"), 237 vec![en_us.clone()], 238 "browser/{locale}/", 239 ), 240 ], 241 vec![en_us.clone()], 242 ); 243 let fetcher = TestFileFetcher::new(); 244 let (_, reg) = fetcher.get_registry_and_environment(setup); 245 246 let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()]; 247 let lang_ids = vec![en_us]; 248 let mut i = reg.generate_bundles_sync(lang_ids.into_iter(), paths); 249 250 assert!(i.next().is_some()); 251 assert!(i.next().is_some()); 252 assert!(i.next().is_none()); 253 } 254 255 #[tokio::test] 256 async fn test_generate_bundles_with_metasources() { 257 use futures::stream::StreamExt; 258 259 let en_us: LanguageIdentifier = "en-US".parse().unwrap(); 260 261 let setup = RegistrySetup::new( 262 "test", 263 vec![ 264 FileSource::new( 265 "toolkit", 266 Some("app"), 267 vec![en_us.clone()], 268 "toolkit/{locale}/", 269 ), 270 FileSource::new( 271 "browser", 272 Some("app"), 273 vec![en_us.clone()], 274 "browser/{locale}/", 275 ), 276 FileSource::new( 277 "toolkit", 278 Some("langpack"), 279 vec![en_us.clone()], 280 "toolkit/{locale}/", 281 ), 282 FileSource::new( 283 "browser", 284 Some("langpack"), 285 vec![en_us.clone()], 286 "browser/{locale}/", 287 ), 288 ], 289 vec![en_us.clone()], 290 ); 291 292 let fetcher = TestFileFetcher::new(); 293 let (_, reg) = fetcher.get_registry_and_environment(setup); 294 295 let paths = vec![FTL_RESOURCE_TOOLKIT.into(), FTL_RESOURCE_BROWSER.into()]; 296 let langs = vec![en_us]; 297 let mut i = reg 298 .generate_bundles(langs.into_iter(), paths) 299 .expect("Failed to get GenerateBundles."); 300 301 assert!(i.next().await.is_some()); 302 assert!(i.next().await.is_some()); 303 assert!(i.next().await.is_none()); 304 }