scenarios_sync.rs (3579B)
1 use fluent_bundle::FluentArgs; 2 use fluent_fallback::Localization; 3 use fluent_testing::get_scenarios; 4 use l10nregistry::fluent::FluentBundle; 5 use l10nregistry::registry::BundleAdapter; 6 use l10nregistry_tests::{RegistrySetup, TestFileFetcher}; 7 8 #[derive(Clone)] 9 struct ScenarioBundleAdapter {} 10 11 impl BundleAdapter for ScenarioBundleAdapter { 12 fn adapt_bundle(&self, bundle: &mut FluentBundle) { 13 bundle.set_use_isolating(false); 14 bundle 15 .add_function("PLATFORM", |_positional, _named| "linux".into()) 16 .expect("Failed to add a function to the bundle."); 17 } 18 } 19 20 #[test] 21 fn scenarios_sync() { 22 use fluent_testing::scenarios::structs::Scenario; 23 let fetcher = TestFileFetcher::new(); 24 25 let scenarios = get_scenarios(); 26 27 let adapter = ScenarioBundleAdapter {}; 28 29 let cannot_produce_bundle = |scenario: &Scenario| { 30 scenario 31 .queries 32 .iter() 33 .any(|query| query.exceptional_context.blocks_bundle_generation()) 34 }; 35 36 for scenario in scenarios { 37 println!("scenario: {}", scenario.name); 38 let setup: RegistrySetup = (&scenario).into(); 39 let (env, reg) = fetcher.get_registry_and_environment_with_adapter(setup, adapter.clone()); 40 41 let loc = Localization::with_env(scenario.res_ids.clone(), true, env.clone(), reg); 42 let bundles = loc.bundles(); 43 let no_bundles = cannot_produce_bundle(&scenario); 44 45 let mut errors = vec![]; 46 47 for query in scenario.queries.iter() { 48 let errors_start_len = errors.len(); 49 50 let args = query.input.args.as_ref().map(|args| { 51 let mut result = FluentArgs::new(); 52 for arg in args.as_slice() { 53 result.set(arg.id.clone(), arg.value.clone()); 54 } 55 result 56 }); 57 58 if let Some(output) = &query.output { 59 if let Some(value) = &output.value { 60 let v = bundles.format_value_sync(&query.input.id, args.as_ref(), &mut errors); 61 if no_bundles || query.exceptional_context.causes_failed_value_lookup() { 62 assert!(v.is_err() || v.unwrap().is_none()); 63 if no_bundles { 64 continue; 65 } 66 } else { 67 assert_eq!(v.unwrap().unwrap(), value.as_str()) 68 } 69 } 70 } 71 72 if query.exceptional_context.causes_reported_format_error() { 73 assert!( 74 errors.len() > errors_start_len, 75 "expected reported errors for query {:#?}", 76 query 77 ); 78 } else { 79 assert_eq!( 80 errors.len(), 81 errors_start_len, 82 "expected no reported errors for query {:#?}", 83 query 84 ); 85 } 86 } 87 88 if scenario 89 .queries 90 .iter() 91 .any(|query| query.exceptional_context.missing_required_resource()) 92 { 93 assert!( 94 !env.errors().is_empty(), 95 "expected errors for scenario {{ {} }}, but found none", 96 scenario.name 97 ); 98 } else { 99 assert!( 100 env.errors().is_empty(), 101 "expected no errors for scenario {{ {} }}, but found {:#?}", 102 scenario.name, 103 env.errors() 104 ); 105 } 106 } 107 }