mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-09-18 07:24:55 +08:00
补充 JSON/compact catalog 的 provider ID、bundle name、资源类型、hash、size、CRC 和依赖字段,并贯通 ResourceEntry、SQLite 资源索引和回归 golden。对 compact extra data 与 resource type index 的损坏返回明确错误,不再把 bundle name 当作 hash fallback。\n\n验证:cargo fmt --check;cargo test -p bat-core --locked;cargo test -p bat-adapters --locked;cargo test -p bat-infrastructure --locked;git diff --check。\n\nClippy 仍受既有 core/src/domain/game_client.rs:141 的 needless-question-mark 和 items-after-test-module 基线问题影响,未混入本 issue 修复。\n\nFixes #2
94 lines
2.9 KiB
Rust
94 lines
2.9 KiB
Rust
use bat_adapters::manifest::ManifestDriverRegistry;
|
|
use bat_core::domain::ResourceType;
|
|
|
|
#[tokio::test]
|
|
async fn parses_current_catalog_fixture_with_resource_categories() {
|
|
let manifest = ManifestDriverRegistry::with_defaults()
|
|
.parse(include_bytes!(
|
|
"fixtures/addressables_regression/current_catalog.json"
|
|
))
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(manifest.resources.len(), 4);
|
|
assert_eq!(
|
|
manifest.resources[0].resource_type,
|
|
ResourceType::TableBundle
|
|
);
|
|
assert_eq!(manifest.resources[1].resource_type, ResourceType::Media);
|
|
assert_eq!(manifest.resources[2].resource_type, ResourceType::TextAsset);
|
|
assert_eq!(
|
|
manifest.resources[3].dependencies,
|
|
vec!["shared_dependencies.bundle".to_string()]
|
|
);
|
|
assert_eq!(
|
|
manifest.resources[0].provider_id.as_deref(),
|
|
Some("provider-table")
|
|
);
|
|
assert_eq!(
|
|
manifest.resources[0].bundle_name.as_deref(),
|
|
Some("table-bundle")
|
|
);
|
|
assert_eq!(manifest.resources[0].crc, Some(0x1234_5678));
|
|
assert_eq!(
|
|
manifest.resources[3].provider_id.as_deref(),
|
|
Some("provider-bundle")
|
|
);
|
|
assert_eq!(
|
|
manifest.metadata.cdn_prefixes,
|
|
vec!["https://fixture.invalid/current/".to_string()]
|
|
);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn parses_previous_catalog_fixture_using_internal_ids() {
|
|
let manifest = ManifestDriverRegistry::with_defaults()
|
|
.parse(include_bytes!(
|
|
"fixtures/addressables_regression/previous_catalog.json"
|
|
))
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(manifest.resources.len(), 3);
|
|
assert_eq!(
|
|
manifest.resources[0].resource_type,
|
|
ResourceType::AssetBundle
|
|
);
|
|
assert_eq!(manifest.resources[1].resource_type, ResourceType::Manifest);
|
|
assert_eq!(
|
|
manifest.resources[2].resource_type,
|
|
ResourceType::TableBundle
|
|
);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn parses_catalog_structure_change_with_alias_fields() {
|
|
let manifest = ManifestDriverRegistry::with_defaults()
|
|
.parse(include_bytes!(
|
|
"fixtures/addressables_regression/structure_changed_catalog.json"
|
|
))
|
|
.await
|
|
.unwrap();
|
|
|
|
assert_eq!(manifest.resources.len(), 2);
|
|
assert_eq!(manifest.resources[0].resource_type, ResourceType::Media);
|
|
assert_eq!(
|
|
manifest.resources[0].dependencies,
|
|
vec!["shared_assets_current.bundle".to_string()]
|
|
);
|
|
assert_eq!(
|
|
manifest.resources[0].provider_id.as_deref(),
|
|
Some("provider-android")
|
|
);
|
|
assert_eq!(
|
|
manifest.resources[0].bundle_name.as_deref(),
|
|
Some("title-android-bundle")
|
|
);
|
|
assert_eq!(manifest.resources[1].resource_type, ResourceType::TextAsset);
|
|
assert_eq!(manifest.resources[1].address.as_deref(), Some("lesson"));
|
|
assert_eq!(
|
|
manifest.resources[1].provider_id.as_deref(),
|
|
Some("provider-text")
|
|
);
|
|
}
|