use fluent_fallback::types::{ResourceType, ToResourceId}; use futures::future::join_all; use l10nregistry_tests::TestFileFetcher; use unic_langid::LanguageIdentifier; static FTL_RESOURCE_PRESENT: &str = "toolkit/global/textActions.ftl"; static FTL_RESOURCE_MISSING: &str = "missing.ftl"; #[test] fn test_fetch_sync() { let fetcher = TestFileFetcher::new(); let en_us: LanguageIdentifier = "en-US".parse().unwrap(); let fs1 = fetcher.get_test_file_source("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"); let file = fs1.fetch_file_sync(&en_us, &FTL_RESOURCE_PRESENT.into(), false); assert!(file.is_some()); assert!(!file.is_none()); assert!(!file.is_required_and_missing()); let file = fs1.fetch_file_sync( &en_us, &FTL_RESOURCE_PRESENT.to_resource_id(ResourceType::Required), false, ); assert!(file.is_some()); assert!(!file.is_none()); assert!(!file.is_required_and_missing()); let file = fs1.fetch_file_sync( &en_us, &FTL_RESOURCE_PRESENT.to_resource_id(ResourceType::Optional), false, ); assert!(file.is_some()); assert!(!file.is_none()); assert!(!file.is_required_and_missing()); let file = fs1.fetch_file_sync(&en_us, &FTL_RESOURCE_MISSING.into(), false); assert!(!file.is_some()); assert!(file.is_none()); assert!(file.is_required_and_missing()); let file = fs1.fetch_file_sync( &en_us, &FTL_RESOURCE_MISSING.to_resource_id(ResourceType::Required), false, ); assert!(!file.is_some()); assert!(file.is_none()); assert!(file.is_required_and_missing()); let file = fs1.fetch_file_sync( &en_us, &FTL_RESOURCE_MISSING.to_resource_id(ResourceType::Optional), false, ); assert!(!file.is_some()); assert!(file.is_none()); assert!(!file.is_required_and_missing()); } #[tokio::test] async fn test_fetch_async() { let fetcher = TestFileFetcher::new(); let en_us: LanguageIdentifier = "en-US".parse().unwrap(); let fs1 = fetcher.get_test_file_source("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"); let file = fs1.fetch_file(&en_us, &FTL_RESOURCE_PRESENT.into()).await; assert!(file.is_some()); assert!(!file.is_none()); assert!(!file.is_required_and_missing()); let file = fs1 .fetch_file( &en_us, &FTL_RESOURCE_PRESENT.to_resource_id(ResourceType::Required), ) .await; assert!(file.is_some()); assert!(!file.is_none()); assert!(!file.is_required_and_missing()); let file = fs1 .fetch_file( &en_us, &FTL_RESOURCE_PRESENT.to_resource_id(ResourceType::Optional), ) .await; assert!(file.is_some()); assert!(!file.is_none()); assert!(!file.is_required_and_missing()); let file = fs1.fetch_file(&en_us, &FTL_RESOURCE_MISSING.into()).await; assert!(!file.is_some()); assert!(file.is_none()); assert!(file.is_required_and_missing()); let file = fs1 .fetch_file( &en_us, &FTL_RESOURCE_MISSING.to_resource_id(ResourceType::Required), ) .await; assert!(!file.is_some()); assert!(file.is_none()); assert!(file.is_required_and_missing()); let file = fs1 .fetch_file( &en_us, &FTL_RESOURCE_MISSING.to_resource_id(ResourceType::Optional), ) .await; assert!(!file.is_some()); assert!(file.is_none()); assert!(!file.is_required_and_missing()); } #[tokio::test] async fn test_fetch_sync_2_async() { let fetcher = TestFileFetcher::new(); let en_us: LanguageIdentifier = "en-US".parse().unwrap(); let fs1 = fetcher.get_test_file_source("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"); assert!(fs1 .fetch_file_sync(&en_us, &FTL_RESOURCE_PRESENT.into(), false) .is_some()); assert!(fs1 .fetch_file(&en_us, &FTL_RESOURCE_PRESENT.into()) .await .is_some()); assert!(fs1 .fetch_file_sync(&en_us, &FTL_RESOURCE_PRESENT.into(), false) .is_some()); } #[tokio::test] async fn test_fetch_async_2_sync() { let fetcher = TestFileFetcher::new(); let en_us: LanguageIdentifier = "en-US".parse().unwrap(); let fs1 = fetcher.get_test_file_source("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"); assert!(fs1 .fetch_file(&en_us, &FTL_RESOURCE_PRESENT.into()) .await .is_some()); assert!(fs1 .fetch_file_sync(&en_us, &FTL_RESOURCE_PRESENT.into(), false) .is_some()); } #[test] fn test_fetch_has_value_required_sync() { let fetcher = TestFileFetcher::new(); let en_us: LanguageIdentifier = "en-US".parse().unwrap(); let path = FTL_RESOURCE_PRESENT.into(); let path_missing = FTL_RESOURCE_MISSING.into(); let fs1 = fetcher.get_test_file_source("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"); assert_eq!(fs1.has_file(&en_us, &path), None); assert!(fs1.fetch_file_sync(&en_us, &path, false).is_some()); assert_eq!(fs1.has_file(&en_us, &path), Some(true)); assert_eq!(fs1.has_file(&en_us, &path_missing), None); assert!(fs1.fetch_file_sync(&en_us, &path_missing, false).is_none()); assert_eq!(fs1.has_file(&en_us, &path_missing), Some(false)); } #[test] fn test_fetch_has_value_optional_sync() { let fetcher = TestFileFetcher::new(); let en_us: LanguageIdentifier = "en-US".parse().unwrap(); let path = FTL_RESOURCE_PRESENT.to_resource_id(ResourceType::Optional); let path_missing = FTL_RESOURCE_MISSING.to_resource_id(ResourceType::Optional); let fs1 = fetcher.get_test_file_source("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"); assert_eq!(fs1.has_file(&en_us, &path), None); assert!(fs1.fetch_file_sync(&en_us, &path, false).is_some()); assert_eq!(fs1.has_file(&en_us, &path), Some(true)); assert_eq!(fs1.has_file(&en_us, &path_missing), None); assert!(fs1.fetch_file_sync(&en_us, &path_missing, false).is_none()); assert_eq!(fs1.has_file(&en_us, &path_missing), Some(false)); } #[tokio::test] async fn test_fetch_has_value_required_async() { let fetcher = TestFileFetcher::new(); let en_us: LanguageIdentifier = "en-US".parse().unwrap(); let path = FTL_RESOURCE_PRESENT.into(); let path_missing = FTL_RESOURCE_MISSING.into(); let fs1 = fetcher.get_test_file_source("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"); assert_eq!(fs1.has_file(&en_us, &path), None); assert!(fs1.fetch_file(&en_us, &path).await.is_some()); println!("Completed"); assert_eq!(fs1.has_file(&en_us, &path), Some(true)); assert_eq!(fs1.has_file(&en_us, &path_missing), None); assert!(fs1.fetch_file(&en_us, &path_missing).await.is_none()); assert!(fs1 .fetch_file(&en_us, &path_missing) .await .is_required_and_missing()); assert_eq!(fs1.has_file(&en_us, &path_missing), Some(false)); assert!(fs1.fetch_file_sync(&en_us, &path_missing, false).is_none()); assert!(fs1 .fetch_file_sync(&en_us, &path_missing, false) .is_required_and_missing()); } #[tokio::test] async fn test_fetch_has_value_optional_async() { let fetcher = TestFileFetcher::new(); let en_us: LanguageIdentifier = "en-US".parse().unwrap(); let path = FTL_RESOURCE_PRESENT.to_resource_id(ResourceType::Optional); let path_missing = FTL_RESOURCE_MISSING.to_resource_id(ResourceType::Optional); let fs1 = fetcher.get_test_file_source("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"); assert_eq!(fs1.has_file(&en_us, &path), None); assert!(fs1.fetch_file(&en_us, &path).await.is_some()); println!("Completed"); assert_eq!(fs1.has_file(&en_us, &path), Some(true)); assert_eq!(fs1.has_file(&en_us, &path_missing), None); assert!(fs1.fetch_file(&en_us, &path_missing).await.is_none()); assert!(!fs1 .fetch_file(&en_us, &path_missing) .await .is_required_and_missing()); assert_eq!(fs1.has_file(&en_us, &path_missing), Some(false)); assert!(fs1.fetch_file_sync(&en_us, &path_missing, false).is_none()); assert!(!fs1 .fetch_file_sync(&en_us, &path_missing, false) .is_required_and_missing()); } #[tokio::test] async fn test_fetch_async_consecutive() { let fetcher = TestFileFetcher::new(); let en_us: LanguageIdentifier = "en-US".parse().unwrap(); let fs1 = fetcher.get_test_file_source("toolkit", None, vec![en_us.clone()], "toolkit/{locale}/"); let results = join_all(vec![ fs1.fetch_file(&en_us, &FTL_RESOURCE_PRESENT.into()), fs1.fetch_file(&en_us, &FTL_RESOURCE_PRESENT.into()), ]) .await; assert!(results[0].is_some()); assert!(results[1].is_some()); assert!(fs1 .fetch_file(&en_us, &FTL_RESOURCE_PRESENT.into()) .await .is_some()); } #[test] fn test_indexed() { let fetcher = TestFileFetcher::new(); let en_us: LanguageIdentifier = "en-US".parse().unwrap(); let path = FTL_RESOURCE_PRESENT; let path_missing = FTL_RESOURCE_MISSING; let fs1 = fetcher.get_test_file_source_with_index( "toolkit", None, vec![en_us.clone()], "toolkit/{locale}/", vec!["toolkit/en-US/toolkit/global/textActions.ftl"], ); assert_eq!(fs1.has_file(&en_us, &path.into()), Some(true)); assert!(fs1.fetch_file_sync(&en_us, &path.into(), false).is_some()); assert_eq!(fs1.has_file(&en_us, &path.into()), Some(true)); assert_eq!(fs1.has_file(&en_us, &path_missing.into()), Some(false)); assert!(fs1 .fetch_file_sync(&en_us, &path_missing.into(), false) .is_none()); assert_eq!(fs1.has_file(&en_us, &path_missing.into()), Some(false)); }