305 lines
9.7 KiB
Rust
305 lines
9.7 KiB
Rust
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));
|
|
}
|