Translate asset and material parity tests
Some checks failed
Rust API gates / api-gates (push) Has been cancelled
Some checks failed
Rust API gates / api-gates (push) Has been cancelled
This commit is contained in:
@@ -59,9 +59,9 @@ The current workspace is a structural baseline, not a working client:
|
|||||||
members with real fields/constants/enum values and standardized failing
|
members with real fields/constants/enum values and standardized failing
|
||||||
bodies;
|
bodies;
|
||||||
- all 1,289 discovered NUnit `[Test]`/`[TestCase]` cases have compiling Rust test
|
- all 1,289 discovered NUnit `[Test]`/`[TestCase]` cases have compiling Rust test
|
||||||
entries; 149 cases are semantically translated, three live-grid cases are
|
entries; 205 cases are semantically translated, three live-grid cases are
|
||||||
reviewed and ignored by default, four benchmarks are reviewed, and the other
|
reviewed and ignored by default, four benchmarks are reviewed, and the other
|
||||||
1,133 intentionally panic with their source identity and body hash;
|
1,077 intentionally panic with their source identity and body hash;
|
||||||
- all nine sample/tool projects have compiling Rust binary targets;
|
- all nine sample/tool projects have compiling Rust binary targets;
|
||||||
- the 128 TestClient command source files are retained as a command inventory.
|
- the 128 TestClient command source files are retained as a command inventory.
|
||||||
|
|
||||||
@@ -332,8 +332,8 @@ markers in hand-written Rust files, so regeneration writes only unresolved
|
|||||||
placeholders and fails on body drift. The checked-in audit reports pending,
|
placeholders and fails on body drift. The checked-in audit reports pending,
|
||||||
translated, ignored-live, benchmark, drifted, missing, duplicate, stale, and
|
translated, ignored-live, benchmark, drifted, missing, duplicate, stale, and
|
||||||
unreviewed cases. The initial handover contained 1,289 unreviewed cases; the
|
unreviewed cases. The initial handover contained 1,289 unreviewed cases; the
|
||||||
current ledger contains 149 translated, three ignored-live, four
|
current ledger contains 205 translated, three ignored-live, four
|
||||||
benchmark-reviewed, and 1,133 pending cases.
|
benchmark-reviewed, and 1,077 pending cases.
|
||||||
|
|
||||||
The Rust tests must call the public APIs rather than internal replacements.
|
The Rust tests must call the public APIs rather than internal replacements.
|
||||||
Where the C# tests call internal members through friend-assembly access, record
|
Where the C# tests call internal members through friend-assembly access, record
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ External member APIs are not copied. Each signature type resolves to Rust core/s
|
|||||||
- Properties/indexers/events: **5,090 / 11 / 268**
|
- Properties/indexers/events: **5,090 / 11 / 268**
|
||||||
- Delegates and flags enums: **40 / 46**
|
- Delegates and flags enums: **40 / 46**
|
||||||
- Optional/ref/out/in parameters: **470 / 6,144 / 555 / 0**
|
- Optional/ref/out/in parameters: **470 / 6,144 / 555 / 0**
|
||||||
- Async Rust signatures: **334**
|
- Async Rust signatures: **332**
|
||||||
- Descriptively renamed overloads: **7,151**
|
- Descriptively renamed overloads: **7,151**
|
||||||
- Explicit CLR delegate APM differences: **80**
|
- Explicit CLR delegate APM differences: **80**
|
||||||
|
|
||||||
|
|||||||
@@ -10473,7 +10473,7 @@ M:LibreMetaverse.AssetCache.TryGetCachedAssetBytes(LibreMetaverse.UUID,System.By
|
|||||||
M:LibreMetaverse.AssetCache.TryGetCachedAssetBytesAsync(LibreMetaverse.UUID,System.Threading.CancellationToken) method System.Threading.Tasks.Task<System.ValueTuple<System.Boolean, System.Byte[]>> LibreMetaverse.AssetCache.TryGetCachedAssetBytesAsync(LibreMetaverse.UUID assetID, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::AssetCache::try_get_cached_asset_bytes_with_uuid_cancellation_token pub async fn try_get_cached_asset_bytes_with_uuid_cancellation_token(&self, asset_id: libremetaverse_types::UUID, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<(bool, Option<Vec<u8>>), crate::Error> shared_self,owned,optional_owned async Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.AssetCache.TryGetCachedAssetBytesAsync(LibreMetaverse.UUID,System.Threading.CancellationToken) method System.Threading.Tasks.Task<System.ValueTuple<System.Boolean, System.Byte[]>> LibreMetaverse.AssetCache.TryGetCachedAssetBytesAsync(LibreMetaverse.UUID assetID, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::AssetCache::try_get_cached_asset_bytes_with_uuid_cancellation_token pub async fn try_get_cached_asset_bytes_with_uuid_cancellation_token(&self, asset_id: libremetaverse_types::UUID, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<(bool, Option<Vec<u8>>), crate::Error> shared_self,owned,optional_owned async Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
M:LibreMetaverse.AssetCacheSettings.#ctor constructor LibreMetaverse.AssetCacheSettings() libremetaverse libremetaverse::AssetCacheSettings::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.AssetCacheSettings.#ctor constructor LibreMetaverse.AssetCacheSettings() libremetaverse libremetaverse::AssetCacheSettings::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.AssetDownload.#ctor constructor LibreMetaverse.AssetDownload() libremetaverse libremetaverse::AssetDownload::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.AssetDownload.#ctor constructor LibreMetaverse.AssetDownload() libremetaverse libremetaverse::AssetDownload::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.AssetManager.#ctor(LibreMetaverse.GridClient) constructor LibreMetaverse.AssetManager(LibreMetaverse.GridClient client) libremetaverse libremetaverse::AssetManager::new pub fn new(client: libremetaverse::GridClient) -> Result<Self, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.AssetManager.#ctor(LibreMetaverse.GridClient) constructor LibreMetaverse.AssetManager(LibreMetaverse.GridClient client) libremetaverse libremetaverse::AssetManager::new pub fn new(client: Option<libremetaverse::GridClient>) -> Result<Self, crate::Error> optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.AssetManager.AssetTypeToString(LibreMetaverse.AssetType) method System.String LibreMetaverse.AssetManager.AssetTypeToString(LibreMetaverse.AssetType assetType) libremetaverse libremetaverse::AssetManager::asset_type_to_string pub fn asset_type_to_string(&self, asset_type: libremetaverse_types::AssetType) -> Result<String, crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.AssetManager.AssetTypeToString(LibreMetaverse.AssetType) method System.String LibreMetaverse.AssetManager.AssetTypeToString(LibreMetaverse.AssetType assetType) libremetaverse libremetaverse::AssetManager::asset_type_to_string pub fn asset_type_to_string(&self, asset_type: libremetaverse_types::AssetType) -> Result<String, crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.AssetManager.CreateAssetWrapper(LibreMetaverse.AssetType) method LibreMetaverse.Assets.Asset LibreMetaverse.AssetManager.CreateAssetWrapper(LibreMetaverse.AssetType type) libremetaverse libremetaverse::AssetManager::create_asset_wrapper pub fn create_asset_wrapper(&self, type_: libremetaverse_types::AssetType) -> Result<libremetaverse::assets::Asset, crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.AssetManager.CreateAssetWrapper(LibreMetaverse.AssetType) method LibreMetaverse.Assets.Asset LibreMetaverse.AssetManager.CreateAssetWrapper(LibreMetaverse.AssetType type) libremetaverse libremetaverse::AssetManager::create_asset_wrapper pub fn create_asset_wrapper(&self, type_: libremetaverse_types::AssetType) -> Result<libremetaverse::assets::Asset, crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.AssetManager.GetTextureUploadCost(System.Int32) method System.Int32 LibreMetaverse.AssetManager.GetTextureUploadCost(System.Int32 widthPixels) libremetaverse libremetaverse::AssetManager::get_texture_upload_cost pub fn get_texture_upload_cost(&self, width_pixels: i32) -> Result<i32, crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.AssetManager.GetTextureUploadCost(System.Int32) method System.Int32 LibreMetaverse.AssetManager.GetTextureUploadCost(System.Int32 widthPixels) libremetaverse libremetaverse::AssetManager::get_texture_upload_cost pub fn get_texture_upload_cost(&self, width_pixels: i32) -> Result<i32, crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
@@ -10520,22 +10520,22 @@ M:LibreMetaverse.Assets.AssetLandmark.Decode method System.Boolean LibreMetavers
|
|||||||
M:LibreMetaverse.Assets.AssetLandmark.Encode method System.Void LibreMetaverse.Assets.AssetLandmark.Encode() libremetaverse assets libremetaverse::assets::AssetLandmark::encode pub fn encode(&self) -> Result<(), crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetLandmark.Encode method System.Void LibreMetaverse.Assets.AssetLandmark.Encode() libremetaverse assets libremetaverse::assets::AssetLandmark::encode pub fn encode(&self) -> Result<(), crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.#ctor constructor LibreMetaverse.Assets.AssetMaterial() libremetaverse assets libremetaverse::assets::AssetMaterial::new_with_constructor pub fn new_with_constructor() -> Result<Self, crate::Error> none sync Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.#ctor constructor LibreMetaverse.Assets.AssetMaterial() libremetaverse assets libremetaverse::assets::AssetMaterial::new_with_constructor pub fn new_with_constructor() -> Result<Self, crate::Error> none sync Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.#ctor(LibreMetaverse.UUID,System.Byte[]) constructor LibreMetaverse.Assets.AssetMaterial(LibreMetaverse.UUID assetId, System.Byte[] assetData) libremetaverse assets libremetaverse::assets::AssetMaterial::new_with_uuid_bytes pub fn new_with_uuid_bytes(asset_id: libremetaverse_types::UUID, asset_data: Vec<u8>) -> Result<Self, crate::Error> owned,owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.#ctor(LibreMetaverse.UUID,System.Byte[]) constructor LibreMetaverse.Assets.AssetMaterial(LibreMetaverse.UUID assetId, System.Byte[] assetData) libremetaverse assets libremetaverse::assets::AssetMaterial::new_with_uuid_bytes pub fn new_with_uuid_bytes(asset_id: libremetaverse_types::UUID, asset_data: Vec<u8>) -> Result<Self, crate::Error> owned,owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.ApplyOverride(LibreMetaverse.Assets.AssetMaterial) method System.Void LibreMetaverse.Assets.AssetMaterial.ApplyOverride(LibreMetaverse.Assets.AssetMaterial overrideMat) libremetaverse assets libremetaverse::assets::AssetMaterial::apply_override pub fn apply_override(&self, override_mat: libremetaverse::assets::AssetMaterial) -> Result<(), crate::Error> shared_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.ApplyOverride(LibreMetaverse.Assets.AssetMaterial) method System.Void LibreMetaverse.Assets.AssetMaterial.ApplyOverride(LibreMetaverse.Assets.AssetMaterial overrideMat) libremetaverse assets libremetaverse::assets::AssetMaterial::apply_override pub fn apply_override(&mut self, override_mat: libremetaverse::assets::AssetMaterial) -> Result<(), crate::Error> mutable_self,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.Decode method System.Boolean LibreMetaverse.Assets.AssetMaterial.Decode() libremetaverse assets libremetaverse::assets::AssetMaterial::decode pub fn decode(&self) -> Result<bool, crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.Decode method System.Boolean LibreMetaverse.Assets.AssetMaterial.Decode() libremetaverse assets libremetaverse::assets::AssetMaterial::decode pub fn decode(&mut self) -> Result<bool, crate::Error> mutable_self sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.Encode method System.Void LibreMetaverse.Assets.AssetMaterial.Encode() libremetaverse assets libremetaverse::assets::AssetMaterial::encode pub fn encode(&self) -> Result<(), crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.Encode method System.Void LibreMetaverse.Assets.AssetMaterial.Encode() libremetaverse assets libremetaverse::assets::AssetMaterial::encode pub fn encode(&mut self) -> Result<(), crate::Error> mutable_self sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.FromOverrideOsd(LibreMetaverse.StructuredData.OSDMap) method LibreMetaverse.Assets.AssetMaterial LibreMetaverse.Assets.AssetMaterial.FromOverrideOsd(LibreMetaverse.StructuredData.OSDMap data) libremetaverse assets libremetaverse::assets::AssetMaterial::from_override_osd pub fn from_override_osd(data: libremetaverse_structured_data::OSDMap) -> Result<libremetaverse::assets::AssetMaterial, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.FromOverrideOsd(LibreMetaverse.StructuredData.OSDMap) method LibreMetaverse.Assets.AssetMaterial LibreMetaverse.Assets.AssetMaterial.FromOverrideOsd(LibreMetaverse.StructuredData.OSDMap data) libremetaverse assets libremetaverse::assets::AssetMaterial::from_override_osd pub fn from_override_osd(data: libremetaverse_structured_data::OSDMap) -> Result<libremetaverse::assets::AssetMaterial, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetAlphaCutoff(System.Single,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetAlphaCutoff(System.Single cutoff, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_alpha_cutoff_with_single_boolean pub fn set_alpha_cutoff_with_single_boolean(&self, cutoff: f32, for_override: Option<bool>) -> Result<(), crate::Error> shared_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetAlphaCutoff(System.Single,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetAlphaCutoff(System.Single cutoff, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_alpha_cutoff_with_single_boolean pub fn set_alpha_cutoff_with_single_boolean(&mut self, cutoff: f32, for_override: Option<bool>) -> Result<(), crate::Error> mutable_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetAlphaMode(LibreMetaverse.Assets.GltfAlphaMode,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetAlphaMode(LibreMetaverse.Assets.GltfAlphaMode mode, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_alpha_mode_with_gltf_alpha_mode_boolean pub fn set_alpha_mode_with_gltf_alpha_mode_boolean(&self, mode: libremetaverse::assets::GltfAlphaMode, for_override: Option<bool>) -> Result<(), crate::Error> shared_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetAlphaMode(LibreMetaverse.Assets.GltfAlphaMode,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetAlphaMode(LibreMetaverse.Assets.GltfAlphaMode mode, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_alpha_mode_with_gltf_alpha_mode_boolean pub fn set_alpha_mode_with_gltf_alpha_mode_boolean(&mut self, mode: libremetaverse::assets::GltfAlphaMode, for_override: Option<bool>) -> Result<(), crate::Error> mutable_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetBaseColorFactor(LibreMetaverse.Color4,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetBaseColorFactor(LibreMetaverse.Color4 color, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_base_color_factor_with_color4_boolean pub fn set_base_color_factor_with_color4_boolean(&self, color: libremetaverse_types::Color4, for_override: Option<bool>) -> Result<(), crate::Error> shared_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetBaseColorFactor(LibreMetaverse.Color4,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetBaseColorFactor(LibreMetaverse.Color4 color, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_base_color_factor_with_color4_boolean pub fn set_base_color_factor_with_color4_boolean(&mut self, color: libremetaverse_types::Color4, for_override: Option<bool>) -> Result<(), crate::Error> mutable_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetBaseMaterial method System.Void LibreMetaverse.Assets.AssetMaterial.SetBaseMaterial() libremetaverse assets libremetaverse::assets::AssetMaterial::set_base_material pub fn set_base_material(&self) -> Result<(), crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetBaseMaterial method System.Void LibreMetaverse.Assets.AssetMaterial.SetBaseMaterial() libremetaverse assets libremetaverse::assets::AssetMaterial::set_base_material pub fn set_base_material(&mut self) -> Result<(), crate::Error> mutable_self sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetDoubleSided(System.Boolean,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetDoubleSided(System.Boolean doubleSided, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_double_sided_with_boolean_boolean pub fn set_double_sided_with_boolean_boolean(&self, double_sided: bool, for_override: Option<bool>) -> Result<(), crate::Error> shared_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetDoubleSided(System.Boolean,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetDoubleSided(System.Boolean doubleSided, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_double_sided_with_boolean_boolean pub fn set_double_sided_with_boolean_boolean(&mut self, double_sided: bool, for_override: Option<bool>) -> Result<(), crate::Error> mutable_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetEmissiveFactor(LibreMetaverse.Vector3,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetEmissiveFactor(LibreMetaverse.Vector3 color, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_emissive_factor_with_vector3_boolean pub fn set_emissive_factor_with_vector3_boolean(&self, color: libremetaverse_types::Vector3, for_override: Option<bool>) -> Result<(), crate::Error> shared_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetEmissiveFactor(LibreMetaverse.Vector3,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetEmissiveFactor(LibreMetaverse.Vector3 color, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_emissive_factor_with_vector3_boolean pub fn set_emissive_factor_with_vector3_boolean(&mut self, color: libremetaverse_types::Vector3, for_override: Option<bool>) -> Result<(), crate::Error> mutable_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetMetallicFactor(System.Single,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetMetallicFactor(System.Single metallic, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_metallic_factor_with_single_boolean pub fn set_metallic_factor_with_single_boolean(&self, metallic: f32, for_override: Option<bool>) -> Result<(), crate::Error> shared_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetMetallicFactor(System.Single,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetMetallicFactor(System.Single metallic, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_metallic_factor_with_single_boolean pub fn set_metallic_factor_with_single_boolean(&mut self, metallic: f32, for_override: Option<bool>) -> Result<(), crate::Error> mutable_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetRoughnessFactor(System.Single,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetRoughnessFactor(System.Single roughness, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_roughness_factor_with_single_boolean pub fn set_roughness_factor_with_single_boolean(&self, roughness: f32, for_override: Option<bool>) -> Result<(), crate::Error> shared_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetRoughnessFactor(System.Single,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetRoughnessFactor(System.Single roughness, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_roughness_factor_with_single_boolean pub fn set_roughness_factor_with_single_boolean(&mut self, roughness: f32, for_override: Option<bool>) -> Result<(), crate::Error> mutable_self,owned,optional_owned sync Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetTextureId(System.Int32,LibreMetaverse.UUID,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetTextureId(System.Int32 slot, LibreMetaverse.UUID id, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_texture_id pub fn set_texture_id(&self, slot: i32, id: libremetaverse_types::UUID, for_override: Option<bool>) -> Result<(), crate::Error> shared_self,owned,owned,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetTextureId(System.Int32,LibreMetaverse.UUID,System.Boolean) method System.Void LibreMetaverse.Assets.AssetMaterial.SetTextureId(System.Int32 slot, LibreMetaverse.UUID id, System.Boolean forOverride = default) libremetaverse assets libremetaverse::assets::AssetMaterial::set_texture_id pub fn set_texture_id(&mut self, slot: i32, id: libremetaverse_types::UUID, for_override: Option<bool>) -> Result<(), crate::Error> mutable_self,owned,owned,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetTextureOffset(System.Int32,LibreMetaverse.Vector2) method System.Void LibreMetaverse.Assets.AssetMaterial.SetTextureOffset(System.Int32 slot, LibreMetaverse.Vector2 offset) libremetaverse assets libremetaverse::assets::AssetMaterial::set_texture_offset pub fn set_texture_offset(&self, slot: i32, offset: libremetaverse_types::Vector2) -> Result<(), crate::Error> shared_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetTextureOffset(System.Int32,LibreMetaverse.Vector2) method System.Void LibreMetaverse.Assets.AssetMaterial.SetTextureOffset(System.Int32 slot, LibreMetaverse.Vector2 offset) libremetaverse assets libremetaverse::assets::AssetMaterial::set_texture_offset pub fn set_texture_offset(&mut self, slot: i32, offset: libremetaverse_types::Vector2) -> Result<(), crate::Error> mutable_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetTextureRotation(System.Int32,System.Single) method System.Void LibreMetaverse.Assets.AssetMaterial.SetTextureRotation(System.Int32 slot, System.Single rotation) libremetaverse assets libremetaverse::assets::AssetMaterial::set_texture_rotation pub fn set_texture_rotation(&self, slot: i32, rotation: f32) -> Result<(), crate::Error> shared_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetTextureRotation(System.Int32,System.Single) method System.Void LibreMetaverse.Assets.AssetMaterial.SetTextureRotation(System.Int32 slot, System.Single rotation) libremetaverse assets libremetaverse::assets::AssetMaterial::set_texture_rotation pub fn set_texture_rotation(&mut self, slot: i32, rotation: f32) -> Result<(), crate::Error> mutable_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.SetTextureScale(System.Int32,LibreMetaverse.Vector2) method System.Void LibreMetaverse.Assets.AssetMaterial.SetTextureScale(System.Int32 slot, LibreMetaverse.Vector2 scale) libremetaverse assets libremetaverse::assets::AssetMaterial::set_texture_scale pub fn set_texture_scale(&self, slot: i32, scale: libremetaverse_types::Vector2) -> Result<(), crate::Error> shared_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.SetTextureScale(System.Int32,LibreMetaverse.Vector2) method System.Void LibreMetaverse.Assets.AssetMaterial.SetTextureScale(System.Int32 slot, LibreMetaverse.Vector2 scale) libremetaverse assets libremetaverse::assets::AssetMaterial::set_texture_scale pub fn set_texture_scale(&mut self, slot: i32, scale: libremetaverse_types::Vector2) -> Result<(), crate::Error> mutable_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.ToJson method System.String LibreMetaverse.Assets.AssetMaterial.ToJson() libremetaverse assets libremetaverse::assets::AssetMaterial::to_json pub fn to_json(&self) -> Result<String, crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.ToJson method System.String LibreMetaverse.Assets.AssetMaterial.ToJson() libremetaverse assets libremetaverse::assets::AssetMaterial::to_json pub fn to_json(&self) -> Result<String, crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMaterial.ToOverrideOsd method LibreMetaverse.StructuredData.OSDMap LibreMetaverse.Assets.AssetMaterial.ToOverrideOsd() libremetaverse assets libremetaverse::assets::AssetMaterial::to_override_osd pub fn to_override_osd(&self) -> Result<libremetaverse_structured_data::OSDMap, crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.Assets.AssetMaterial.ToOverrideOsd method LibreMetaverse.StructuredData.OSDMap LibreMetaverse.Assets.AssetMaterial.ToOverrideOsd() libremetaverse assets libremetaverse::assets::AssetMaterial::to_override_osd pub fn to_override_osd(&self) -> Result<libremetaverse_structured_data::OSDMap, crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.Assets.AssetMesh.#ctor constructor LibreMetaverse.Assets.AssetMesh() libremetaverse assets libremetaverse::assets::AssetMesh::new_with_constructor pub fn new_with_constructor() -> Result<Self, crate::Error> none sync Result<_, crate::Error> descriptive_overload_name method mapped
|
M:LibreMetaverse.Assets.AssetMesh.#ctor constructor LibreMetaverse.Assets.AssetMesh() libremetaverse assets libremetaverse::assets::AssetMesh::new_with_constructor pub fn new_with_constructor() -> Result<Self, crate::Error> none sync Result<_, crate::Error> descriptive_overload_name method mapped
|
||||||
@@ -24948,8 +24948,8 @@ M:LibreMetaverse.TerrainCompressor.DecodePatchHeader(LibreMetaverse.BitPack,Syst
|
|||||||
M:LibreMetaverse.TerrainCompressor.DecompressPatch(System.Int32[],LibreMetaverse.TerrainPatch.Header,LibreMetaverse.TerrainPatch.GroupHeader) method System.Single[] LibreMetaverse.TerrainCompressor.DecompressPatch(System.Int32[] patches, LibreMetaverse.TerrainPatch.Header header, LibreMetaverse.TerrainPatch.GroupHeader group) libremetaverse libremetaverse::TerrainCompressor::decompress_patch pub fn decompress_patch(patches: Vec<i32>, header: libremetaverse::TerrainPatchHeader, group: libremetaverse::TerrainPatchGroupHeader) -> Result<Vec<f32>, crate::Error> owned,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.TerrainCompressor.DecompressPatch(System.Int32[],LibreMetaverse.TerrainPatch.Header,LibreMetaverse.TerrainPatch.GroupHeader) method System.Single[] LibreMetaverse.TerrainCompressor.DecompressPatch(System.Int32[] patches, LibreMetaverse.TerrainPatch.Header header, LibreMetaverse.TerrainPatch.GroupHeader group) libremetaverse libremetaverse::TerrainCompressor::decompress_patch pub fn decompress_patch(patches: Vec<i32>, header: libremetaverse::TerrainPatchHeader, group: libremetaverse::TerrainPatchGroupHeader) -> Result<Vec<f32>, crate::Error> owned,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.TerrainManager.#ctor(LibreMetaverse.GridClient) constructor LibreMetaverse.TerrainManager(LibreMetaverse.GridClient client) libremetaverse libremetaverse::TerrainManager::new pub fn new(client: libremetaverse::GridClient) -> Result<Self, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.TerrainManager.#ctor(LibreMetaverse.GridClient) constructor LibreMetaverse.TerrainManager(LibreMetaverse.GridClient client) libremetaverse libremetaverse::TerrainManager::new pub fn new(client: libremetaverse::GridClient) -> Result<Self, crate::Error> owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.TerrainManager.Dispose method System.Void LibreMetaverse.TerrainManager.Dispose() libremetaverse libremetaverse::TerrainManager::dispose pub fn dispose(&self) -> Result<(), crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.TerrainManager.Dispose method System.Void LibreMetaverse.TerrainManager.Dispose() libremetaverse libremetaverse::TerrainManager::dispose pub fn dispose(&self) -> Result<(), crate::Error> shared_self sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken) method System.Threading.Tasks.Task<LibreMetaverse.Assets.AssetMaterial[]> LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::TerrainManager::get_terrain_material_overrides pub async fn get_terrain_material_overrides(&self, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<Option<Vec<libremetaverse::assets::AssetMaterial>>, crate::Error> shared_self,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken) method System.Threading.Tasks.Task<LibreMetaverse.Assets.AssetMaterial[]> LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::TerrainManager::get_terrain_material_overrides pub async fn get_terrain_material_overrides(&self, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<Option<Vec<Option<libremetaverse::assets::AssetMaterial>>>, crate::Error> shared_self,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[],System.Threading.CancellationToken) method System.Threading.Tasks.Task<System.Boolean> LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[] overrides, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::TerrainManager::set_terrain_material_overrides pub async fn set_terrain_material_overrides(&self, overrides: Vec<libremetaverse::assets::AssetMaterial>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<bool, crate::Error> shared_self,owned,optional_owned async Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[],System.Threading.CancellationToken) method System.Threading.Tasks.Task<System.Boolean> LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[] overrides, System.Threading.CancellationToken cancellationToken = default) libremetaverse libremetaverse::TerrainManager::set_terrain_material_overrides pub async fn set_terrain_material_overrides(&self, overrides: Vec<Option<libremetaverse::assets::AssetMaterial>>, cancellation_token: Option<libremetaverse_types::compat::CancellationToken>) -> Result<bool, crate::Error> shared_self,owned,optional_owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.TerrainPatch.#ctor constructor LibreMetaverse.TerrainPatch() libremetaverse libremetaverse::TerrainPatch::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.TerrainPatch.#ctor constructor LibreMetaverse.TerrainPatch() libremetaverse libremetaverse::TerrainPatch::new pub fn new() -> Result<Self, crate::Error> none sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.TerrainPatch.Header.setPatchIDs(System.Int32,System.Int32) method System.Int32 LibreMetaverse.TerrainPatch.Header.setPatchIDs(System.Int32 xx, System.Int32 yy) libremetaverse libremetaverse::TerrainPatchHeader::set_patch_i_ds pub fn set_patch_i_ds(&mut self, xx: i32, yy: i32) -> Result<i32, crate::Error> mutable_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.TerrainPatch.Header.setPatchIDs(System.Int32,System.Int32) method System.Int32 LibreMetaverse.TerrainPatch.Header.setPatchIDs(System.Int32 xx, System.Int32 yy) libremetaverse libremetaverse::TerrainPatchHeader::set_patch_i_ds pub fn set_patch_i_ds(&mut self, xx: i32, yy: i32) -> Result<i32, crate::Error> mutable_self,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
M:LibreMetaverse.TerseObjectUpdateEventArgs.#ctor(LibreMetaverse.Simulator,LibreMetaverse.Primitive,LibreMetaverse.ObjectMovementUpdate,System.UInt16) constructor LibreMetaverse.TerseObjectUpdateEventArgs(LibreMetaverse.Simulator simulator, LibreMetaverse.Primitive prim, LibreMetaverse.ObjectMovementUpdate update, System.UInt16 timeDilation) libremetaverse libremetaverse::TerseObjectUpdateEventArgs::new pub fn new(simulator: libremetaverse::Simulator, prim: libremetaverse::Primitive, update: libremetaverse::ObjectMovementUpdate, time_dilation: u16) -> Result<Self, crate::Error> owned,owned,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
M:LibreMetaverse.TerseObjectUpdateEventArgs.#ctor(LibreMetaverse.Simulator,LibreMetaverse.Primitive,LibreMetaverse.ObjectMovementUpdate,System.UInt16) constructor LibreMetaverse.TerseObjectUpdateEventArgs(LibreMetaverse.Simulator simulator, LibreMetaverse.Primitive prim, LibreMetaverse.ObjectMovementUpdate update, System.UInt16 timeDilation) libremetaverse libremetaverse::TerseObjectUpdateEventArgs::new pub fn new(simulator: libremetaverse::Simulator, prim: libremetaverse::Primitive, update: libremetaverse::ObjectMovementUpdate, time_dilation: u16) -> Result<Self, crate::Error> owned,owned,owned,owned sync Result<_, crate::Error> direct_snake_case method mapped
|
||||||
|
|||||||
|
Can't render this file because it is too large.
|
@@ -51,6 +51,8 @@ pub enum Error {
|
|||||||
ArgumentNull,
|
ArgumentNull,
|
||||||
/// An argument value or length was invalid.
|
/// An argument value or length was invalid.
|
||||||
Argument,
|
Argument,
|
||||||
|
/// The requested operation was not valid in the object's current state.
|
||||||
|
InvalidOperation,
|
||||||
/// An index or destination buffer boundary was exceeded.
|
/// An index or destination buffer boundary was exceeded.
|
||||||
IndexOutOfRange,
|
IndexOutOfRange,
|
||||||
/// An operation observed a requested cancellation.
|
/// An operation observed a requested cancellation.
|
||||||
@@ -63,7 +65,11 @@ impl Error {
|
|||||||
pub const fn csharp_member(self) -> Option<&'static str> {
|
pub const fn csharp_member(self) -> Option<&'static str> {
|
||||||
match self {
|
match self {
|
||||||
Self::NotImplemented(error) => Some(error.csharp_member()),
|
Self::NotImplemented(error) => Some(error.csharp_member()),
|
||||||
Self::ArgumentNull | Self::Argument | Self::IndexOutOfRange | Self::Cancelled => None,
|
Self::ArgumentNull
|
||||||
|
| Self::Argument
|
||||||
|
| Self::InvalidOperation
|
||||||
|
| Self::IndexOutOfRange
|
||||||
|
| Self::Cancelled => None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -80,6 +86,7 @@ impl fmt::Display for Error {
|
|||||||
Self::NotImplemented(error) => error.fmt(formatter),
|
Self::NotImplemented(error) => error.fmt(formatter),
|
||||||
Self::ArgumentNull => formatter.write_str("required argument was null"),
|
Self::ArgumentNull => formatter.write_str("required argument was null"),
|
||||||
Self::Argument => formatter.write_str("argument was invalid"),
|
Self::Argument => formatter.write_str("argument was invalid"),
|
||||||
|
Self::InvalidOperation => formatter.write_str("operation was invalid for this state"),
|
||||||
Self::IndexOutOfRange => formatter.write_str("index was out of range"),
|
Self::IndexOutOfRange => formatter.write_str("index was out of range"),
|
||||||
Self::Cancelled => formatter.write_str("operation was cancelled"),
|
Self::Cancelled => formatter.write_str("operation was cancelled"),
|
||||||
}
|
}
|
||||||
@@ -152,5 +159,9 @@ mod tests {
|
|||||||
.expect("placeholder panic must retain its visible marker");
|
.expect("placeholder panic must retain its visible marker");
|
||||||
assert_eq!(message, &format!("{PANIC_PREFIX}{MEMBER}"));
|
assert_eq!(message, &format!("{PANIC_PREFIX}{MEMBER}"));
|
||||||
assert!(not_implemented::<()>(MEMBER).is_err());
|
assert!(not_implemented::<()>(MEMBER).is_err());
|
||||||
|
assert_eq!(
|
||||||
|
Error::InvalidOperation.to_string(),
|
||||||
|
"operation was invalid for this state"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
92
crates/libremetaverse/src/asset_archive_semantics.rs
Normal file
92
crates/libremetaverse/src/asset_archive_semantics.rs
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
// The upstream tests reach the internal OarFile.LoadTerrain member via reflection.
|
||||||
|
// Keep the equivalent Rust seam private to the owning crate.
|
||||||
|
// BSD-3-Clause source (see LICENSE.md): LibreMetaverse.Tests/OarFileTerrainTests.cs
|
||||||
|
// SHA-256: 19c42f7f132b97dc1667208f1e9b49df8ff6db96265c22b1c1ef5498e3c5c75d
|
||||||
|
|
||||||
|
#![allow(clippy::float_cmp)]
|
||||||
|
|
||||||
|
use crate::Error;
|
||||||
|
use crate::assets::OarFile;
|
||||||
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
|
type Terrain = Vec<Vec<f32>>;
|
||||||
|
type TerrainLoaded = Box<dyn Fn(Terrain, i64, i64) + Send + Sync>;
|
||||||
|
|
||||||
|
impl OarFile {
|
||||||
|
fn load_terrain(
|
||||||
|
_file_path: &str,
|
||||||
|
_data: Vec<u8>,
|
||||||
|
_callback: TerrainLoaded,
|
||||||
|
_bytes_read: i64,
|
||||||
|
_total_bytes: i64,
|
||||||
|
) -> Result<bool, Error> {
|
||||||
|
libremetaverse_types::not_implemented(
|
||||||
|
"M:LibreMetaverse.Assets.OarFile.LoadTerrain(System.String,System.Byte[],LibreMetaverse.Assets.OarFile.TerrainLoadedCallback,System.Int64,System.Int64)",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn raw_terrain(side: usize, fill: f32) -> Vec<u8> {
|
||||||
|
fill.to_le_bytes().repeat(side * side)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn invoke_load_terrain(file_path: &str, data: Vec<u8>) -> (bool, Option<Terrain>) {
|
||||||
|
let captured = Arc::new(Mutex::new(None));
|
||||||
|
let callback_capture = Arc::clone(&captured);
|
||||||
|
let total_bytes = i64::try_from(data.len()).expect("terrain byte count fits i64");
|
||||||
|
let loaded = OarFile::load_terrain(
|
||||||
|
file_path,
|
||||||
|
data,
|
||||||
|
Box::new(move |terrain, _, _| {
|
||||||
|
*callback_capture.lock().expect("terrain capture") = Some(terrain);
|
||||||
|
}),
|
||||||
|
0,
|
||||||
|
total_bytes,
|
||||||
|
)
|
||||||
|
.expect("OarFile.LoadTerrain");
|
||||||
|
let terrain = captured.lock().expect("terrain capture").take();
|
||||||
|
(loaded, terrain)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fixture SHA-256: fcdd41fbadfe6a69d9687b3777692c2de82c831856fa8bcef978c3c17b0117fa
|
||||||
|
// parity-case: LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_StandardRegion_Loads256x256::test c4e3a994baf06b0106a6614e9c3efbcc27e45ff1725f5470d2db6ded1fff6014 translated
|
||||||
|
#[test]
|
||||||
|
fn load_standard_region_terrain() {
|
||||||
|
let (loaded, terrain) = invoke_load_terrain("terrains/region.r32", raw_terrain(256, 21.0));
|
||||||
|
assert!(loaded);
|
||||||
|
let terrain = terrain.expect("terrain callback");
|
||||||
|
assert_eq!(terrain.len(), 256);
|
||||||
|
assert!(terrain.iter().all(|row| row.len() == 256));
|
||||||
|
assert_eq!(terrain[0][0], 21.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fixture SHA-256: c07500b6f966d65dda9261e3e701fb5bb13e31239ff3a89d74c0046d0ba4ec12
|
||||||
|
// parity-case: LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_Varregion_Loads512x512::test 4820338f10acbb4987e26992d7a7957be58ab6bc548674bf18943ef312962894 translated
|
||||||
|
#[test]
|
||||||
|
fn load_varregion_terrain() {
|
||||||
|
let (loaded, terrain) = invoke_load_terrain("terrains/megaregion.f32", raw_terrain(512, 30.0));
|
||||||
|
assert!(loaded);
|
||||||
|
let terrain = terrain.expect("terrain callback");
|
||||||
|
assert_eq!(terrain.len(), 512);
|
||||||
|
assert!(terrain.iter().all(|row| row.len() == 512));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fixture SHA-256: 2dc88437e482fdaa5613df885d49c2b19bd623ecfc387a72338d2367d4b3b451
|
||||||
|
// parity-case: LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_WrongByteCount_FailsGracefully::test ff6fb4feb2773c93397d412d0ecf6aef1f3636e823dabb729a7a6cbe94d1513f translated
|
||||||
|
#[test]
|
||||||
|
fn reject_terrain_with_wrong_byte_count() {
|
||||||
|
let (loaded, terrain) =
|
||||||
|
invoke_load_terrain("terrains/broken.r32", vec![0; 256_usize * 256 * 4 + 3]);
|
||||||
|
assert!(!loaded);
|
||||||
|
assert!(terrain.is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fixture SHA-256: 9b94b83334ada38b48b53f19ef2c45abc9f84fb723564671290a556f75d6fdc8
|
||||||
|
// parity-case: LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_NonSquarePostCount_FailsGracefully::test 218754e53232cd10318668c70b94ae9d7d541d09598b0490082e023e76d6045f translated
|
||||||
|
#[test]
|
||||||
|
fn reject_terrain_with_non_square_post_count() {
|
||||||
|
let (loaded, terrain) =
|
||||||
|
invoke_load_terrain("terrains/nonsquare.r32", vec![0; 257_usize * 256 * 4]);
|
||||||
|
assert!(!loaded);
|
||||||
|
assert!(terrain.is_none());
|
||||||
|
}
|
||||||
@@ -5042,7 +5042,7 @@ impl AssetManager {
|
|||||||
libremetaverse_types::unimplemented_api!("E:LibreMetaverse.AssetManager.XferReceived")
|
libremetaverse_types::unimplemented_api!("E:LibreMetaverse.AssetManager.XferReceived")
|
||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.AssetManager.#ctor(LibreMetaverse.GridClient)`.
|
/// C# member: `M:LibreMetaverse.AssetManager.#ctor(LibreMetaverse.GridClient)`.
|
||||||
pub fn new(client: libremetaverse::GridClient) -> Result<Self, crate::Error> {
|
pub fn new(client: Option<libremetaverse::GridClient>) -> Result<Self, crate::Error> {
|
||||||
libremetaverse_types::not_implemented(
|
libremetaverse_types::not_implemented(
|
||||||
"M:LibreMetaverse.AssetManager.#ctor(LibreMetaverse.GridClient)",
|
"M:LibreMetaverse.AssetManager.#ctor(LibreMetaverse.GridClient)",
|
||||||
)
|
)
|
||||||
@@ -27523,7 +27523,7 @@ impl TerrainManager {
|
|||||||
pub async fn get_terrain_material_overrides(
|
pub async fn get_terrain_material_overrides(
|
||||||
&self,
|
&self,
|
||||||
cancellation_token: Option<libremetaverse_types::compat::CancellationToken>,
|
cancellation_token: Option<libremetaverse_types::compat::CancellationToken>,
|
||||||
) -> Result<Option<Vec<libremetaverse::assets::AssetMaterial>>, crate::Error> {
|
) -> Result<Option<Vec<Option<libremetaverse::assets::AssetMaterial>>>, crate::Error> {
|
||||||
libremetaverse_types::not_implemented(
|
libremetaverse_types::not_implemented(
|
||||||
"M:LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken)",
|
"M:LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken)",
|
||||||
)
|
)
|
||||||
@@ -27531,7 +27531,7 @@ impl TerrainManager {
|
|||||||
/// C# member: `M:LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[],System.Threading.CancellationToken)`.
|
/// C# member: `M:LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[],System.Threading.CancellationToken)`.
|
||||||
pub async fn set_terrain_material_overrides(
|
pub async fn set_terrain_material_overrides(
|
||||||
&self,
|
&self,
|
||||||
overrides: Vec<libremetaverse::assets::AssetMaterial>,
|
overrides: Vec<Option<libremetaverse::assets::AssetMaterial>>,
|
||||||
cancellation_token: Option<libremetaverse_types::compat::CancellationToken>,
|
cancellation_token: Option<libremetaverse_types::compat::CancellationToken>,
|
||||||
) -> Result<bool, crate::Error> {
|
) -> Result<bool, crate::Error> {
|
||||||
libremetaverse_types::not_implemented(
|
libremetaverse_types::not_implemented(
|
||||||
@@ -29804,7 +29804,7 @@ pub mod assets {
|
|||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.ApplyOverride(LibreMetaverse.Assets.AssetMaterial)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.ApplyOverride(LibreMetaverse.Assets.AssetMaterial)`.
|
||||||
pub fn apply_override(
|
pub fn apply_override(
|
||||||
&self,
|
&mut self,
|
||||||
override_mat: libremetaverse::assets::AssetMaterial,
|
override_mat: libremetaverse::assets::AssetMaterial,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<(), crate::Error> {
|
||||||
libremetaverse_types::not_implemented(
|
libremetaverse_types::not_implemented(
|
||||||
@@ -29812,11 +29812,11 @@ pub mod assets {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.Decode`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.Decode`.
|
||||||
pub fn decode(&self) -> Result<bool, crate::Error> {
|
pub fn decode(&mut self) -> Result<bool, crate::Error> {
|
||||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Assets.AssetMaterial.Decode")
|
libremetaverse_types::not_implemented("M:LibreMetaverse.Assets.AssetMaterial.Decode")
|
||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.Encode`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.Encode`.
|
||||||
pub fn encode(&self) -> Result<(), crate::Error> {
|
pub fn encode(&mut self) -> Result<(), crate::Error> {
|
||||||
libremetaverse_types::not_implemented("M:LibreMetaverse.Assets.AssetMaterial.Encode")
|
libremetaverse_types::not_implemented("M:LibreMetaverse.Assets.AssetMaterial.Encode")
|
||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.FromOverrideOsd(LibreMetaverse.StructuredData.OSDMap)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.FromOverrideOsd(LibreMetaverse.StructuredData.OSDMap)`.
|
||||||
@@ -29829,7 +29829,7 @@ pub mod assets {
|
|||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetAlphaCutoff(System.Single,System.Boolean)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetAlphaCutoff(System.Single,System.Boolean)`.
|
||||||
pub fn set_alpha_cutoff_with_single_boolean(
|
pub fn set_alpha_cutoff_with_single_boolean(
|
||||||
&self,
|
&mut self,
|
||||||
cutoff: f32,
|
cutoff: f32,
|
||||||
for_override: Option<bool>,
|
for_override: Option<bool>,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<(), crate::Error> {
|
||||||
@@ -29839,7 +29839,7 @@ pub mod assets {
|
|||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetAlphaMode(LibreMetaverse.Assets.GltfAlphaMode,System.Boolean)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetAlphaMode(LibreMetaverse.Assets.GltfAlphaMode,System.Boolean)`.
|
||||||
pub fn set_alpha_mode_with_gltf_alpha_mode_boolean(
|
pub fn set_alpha_mode_with_gltf_alpha_mode_boolean(
|
||||||
&self,
|
&mut self,
|
||||||
mode: libremetaverse::assets::GltfAlphaMode,
|
mode: libremetaverse::assets::GltfAlphaMode,
|
||||||
for_override: Option<bool>,
|
for_override: Option<bool>,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<(), crate::Error> {
|
||||||
@@ -29849,7 +29849,7 @@ pub mod assets {
|
|||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetBaseColorFactor(LibreMetaverse.Color4,System.Boolean)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetBaseColorFactor(LibreMetaverse.Color4,System.Boolean)`.
|
||||||
pub fn set_base_color_factor_with_color4_boolean(
|
pub fn set_base_color_factor_with_color4_boolean(
|
||||||
&self,
|
&mut self,
|
||||||
color: libremetaverse_types::Color4,
|
color: libremetaverse_types::Color4,
|
||||||
for_override: Option<bool>,
|
for_override: Option<bool>,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<(), crate::Error> {
|
||||||
@@ -29858,14 +29858,14 @@ pub mod assets {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetBaseMaterial`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetBaseMaterial`.
|
||||||
pub fn set_base_material(&self) -> Result<(), crate::Error> {
|
pub fn set_base_material(&mut self) -> Result<(), crate::Error> {
|
||||||
libremetaverse_types::not_implemented(
|
libremetaverse_types::not_implemented(
|
||||||
"M:LibreMetaverse.Assets.AssetMaterial.SetBaseMaterial",
|
"M:LibreMetaverse.Assets.AssetMaterial.SetBaseMaterial",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetDoubleSided(System.Boolean,System.Boolean)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetDoubleSided(System.Boolean,System.Boolean)`.
|
||||||
pub fn set_double_sided_with_boolean_boolean(
|
pub fn set_double_sided_with_boolean_boolean(
|
||||||
&self,
|
&mut self,
|
||||||
double_sided: bool,
|
double_sided: bool,
|
||||||
for_override: Option<bool>,
|
for_override: Option<bool>,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<(), crate::Error> {
|
||||||
@@ -29875,7 +29875,7 @@ pub mod assets {
|
|||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetEmissiveFactor(LibreMetaverse.Vector3,System.Boolean)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetEmissiveFactor(LibreMetaverse.Vector3,System.Boolean)`.
|
||||||
pub fn set_emissive_factor_with_vector3_boolean(
|
pub fn set_emissive_factor_with_vector3_boolean(
|
||||||
&self,
|
&mut self,
|
||||||
color: libremetaverse_types::Vector3,
|
color: libremetaverse_types::Vector3,
|
||||||
for_override: Option<bool>,
|
for_override: Option<bool>,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<(), crate::Error> {
|
||||||
@@ -29885,7 +29885,7 @@ pub mod assets {
|
|||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetMetallicFactor(System.Single,System.Boolean)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetMetallicFactor(System.Single,System.Boolean)`.
|
||||||
pub fn set_metallic_factor_with_single_boolean(
|
pub fn set_metallic_factor_with_single_boolean(
|
||||||
&self,
|
&mut self,
|
||||||
metallic: f32,
|
metallic: f32,
|
||||||
for_override: Option<bool>,
|
for_override: Option<bool>,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<(), crate::Error> {
|
||||||
@@ -29895,7 +29895,7 @@ pub mod assets {
|
|||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetRoughnessFactor(System.Single,System.Boolean)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetRoughnessFactor(System.Single,System.Boolean)`.
|
||||||
pub fn set_roughness_factor_with_single_boolean(
|
pub fn set_roughness_factor_with_single_boolean(
|
||||||
&self,
|
&mut self,
|
||||||
roughness: f32,
|
roughness: f32,
|
||||||
for_override: Option<bool>,
|
for_override: Option<bool>,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<(), crate::Error> {
|
||||||
@@ -29905,7 +29905,7 @@ pub mod assets {
|
|||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetTextureId(System.Int32,LibreMetaverse.UUID,System.Boolean)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetTextureId(System.Int32,LibreMetaverse.UUID,System.Boolean)`.
|
||||||
pub fn set_texture_id(
|
pub fn set_texture_id(
|
||||||
&self,
|
&mut self,
|
||||||
slot: i32,
|
slot: i32,
|
||||||
id: libremetaverse_types::UUID,
|
id: libremetaverse_types::UUID,
|
||||||
for_override: Option<bool>,
|
for_override: Option<bool>,
|
||||||
@@ -29916,7 +29916,7 @@ pub mod assets {
|
|||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetTextureOffset(System.Int32,LibreMetaverse.Vector2)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetTextureOffset(System.Int32,LibreMetaverse.Vector2)`.
|
||||||
pub fn set_texture_offset(
|
pub fn set_texture_offset(
|
||||||
&self,
|
&mut self,
|
||||||
slot: i32,
|
slot: i32,
|
||||||
offset: libremetaverse_types::Vector2,
|
offset: libremetaverse_types::Vector2,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<(), crate::Error> {
|
||||||
@@ -29925,14 +29925,18 @@ pub mod assets {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetTextureRotation(System.Int32,System.Single)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetTextureRotation(System.Int32,System.Single)`.
|
||||||
pub fn set_texture_rotation(&self, slot: i32, rotation: f32) -> Result<(), crate::Error> {
|
pub fn set_texture_rotation(
|
||||||
|
&mut self,
|
||||||
|
slot: i32,
|
||||||
|
rotation: f32,
|
||||||
|
) -> Result<(), crate::Error> {
|
||||||
libremetaverse_types::not_implemented(
|
libremetaverse_types::not_implemented(
|
||||||
"M:LibreMetaverse.Assets.AssetMaterial.SetTextureRotation(System.Int32,System.Single)",
|
"M:LibreMetaverse.Assets.AssetMaterial.SetTextureRotation(System.Int32,System.Single)",
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetTextureScale(System.Int32,LibreMetaverse.Vector2)`.
|
/// C# member: `M:LibreMetaverse.Assets.AssetMaterial.SetTextureScale(System.Int32,LibreMetaverse.Vector2)`.
|
||||||
pub fn set_texture_scale(
|
pub fn set_texture_scale(
|
||||||
&self,
|
&mut self,
|
||||||
slot: i32,
|
slot: i32,
|
||||||
scale: libremetaverse_types::Vector2,
|
scale: libremetaverse_types::Vector2,
|
||||||
) -> Result<(), crate::Error> {
|
) -> Result<(), crate::Error> {
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ extern crate self as libremetaverse;
|
|||||||
|
|
||||||
mod generated;
|
mod generated;
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod asset_archive_semantics;
|
||||||
|
|
||||||
pub use generated::*;
|
pub use generated::*;
|
||||||
pub use libremetaverse_imaging as imaging_abstractions;
|
pub use libremetaverse_imaging as imaging_abstractions;
|
||||||
pub use libremetaverse_structured_data as structured_data;
|
pub use libremetaverse_structured_data as structured_data;
|
||||||
|
|||||||
2094
tests/PARITY.md
2094
tests/PARITY.md
File diff suppressed because it is too large
Load Diff
697
tests/compat/tests/asset_capability_semantics.rs
Normal file
697
tests/compat/tests/asset_capability_semantics.rs
Normal file
@@ -0,0 +1,697 @@
|
|||||||
|
#![allow(
|
||||||
|
clippy::float_cmp,
|
||||||
|
clippy::needless_pass_by_value,
|
||||||
|
clippy::too_many_lines
|
||||||
|
)]
|
||||||
|
|
||||||
|
// Exact BSD-3-Clause fixture provenance at LibreMetaverse
|
||||||
|
// 2aa70bb68513b39795da5d13c88f31b86e85a3ba (see LICENSE.md):
|
||||||
|
// GLTFMaterialOverrideCapTests.cs 4d717ded7cc7bd4e68210417f722a1ceec6391b19dc3b1dfeb558ae16e6f115b
|
||||||
|
// GLTFMaterialUploadTests.cs 0602d1504e405868d7bcb608eb7c0db9f47e9ec6636846f34d48669aa5a27025
|
||||||
|
// TerrainMaterialOverrideTests.cs b9409ba65906e2b9d30d42b350b4b3e9c1655d4a503c4ff87bd548dd229dad88
|
||||||
|
// SendPostcardTests.cs 56691373dfa8f817f0b1079b8ec40f16e0186d6cfb13f772da0ffe3935188b4d
|
||||||
|
// UploadThumbnailTests.cs 8a88c5e4d45e7e1d4f8a41092528eefee347c7bd5f5e6f3af171ac19455e894b
|
||||||
|
// ConstructorNullArgumentTests.cs 28deea0bf4d9353a2424842c6184abab8fe82746ceb12e093912728a247f21bc
|
||||||
|
|
||||||
|
use libremetaverse::assets::AssetMaterial;
|
||||||
|
use libremetaverse::{AssetManager, GLTFMaterialUpdate, GridClient, HttpCapsClient};
|
||||||
|
use libremetaverse_compat_tests::block_on;
|
||||||
|
use libremetaverse_types::compat::{HttpMessageHandler, HttpRequest, HttpResponse, Uri};
|
||||||
|
use libremetaverse_types::{Color4, Error, UUID, Vector3};
|
||||||
|
use std::collections::{BTreeMap, HashMap, VecDeque};
|
||||||
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
|
const MODIFY_MATERIAL: &str = "http://test.invalid/modify-material-params";
|
||||||
|
const MATERIAL_AGENT: &str = "http://test.invalid/update-material-agent-inventory";
|
||||||
|
const MATERIAL_TASK: &str = "http://test.invalid/update-material-task-inventory";
|
||||||
|
const MATERIAL_UPLOADER: &str = "http://test.invalid/update-material/upload/abc123";
|
||||||
|
const MODIFY_REGION: &str = "http://test.invalid/modify-region";
|
||||||
|
const POSTCARD: &str = "http://test.invalid/send-postcard";
|
||||||
|
const POSTCARD_UPLOADER: &str = "http://test.invalid/send-postcard/upload/abc123";
|
||||||
|
const THUMBNAIL: &str = "http://test.invalid/inventory-thumbnail-upload";
|
||||||
|
const THUMBNAIL_UPLOADER: &str = "http://test.invalid/inventory-thumbnail-upload/upload/abc123";
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
struct RecordingHttp {
|
||||||
|
requests: Arc<Mutex<Vec<HttpRequest>>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl RecordingHttp {
|
||||||
|
fn new(responses: &[(&str, &str)]) -> (Self, HttpMessageHandler) {
|
||||||
|
let requests = Arc::new(Mutex::new(Vec::new()));
|
||||||
|
let recorded = Arc::clone(&requests);
|
||||||
|
let mut queued = HashMap::<String, VecDeque<HttpResponse>>::new();
|
||||||
|
for (uri, body) in responses {
|
||||||
|
queued
|
||||||
|
.entry((*uri).into())
|
||||||
|
.or_default()
|
||||||
|
.push_back(response(body));
|
||||||
|
}
|
||||||
|
let queued = Mutex::new(queued);
|
||||||
|
let handler = HttpMessageHandler::new(move |request| {
|
||||||
|
let uri = request.uri.0.clone();
|
||||||
|
recorded.lock().expect("request recording").push(request);
|
||||||
|
queued
|
||||||
|
.lock()
|
||||||
|
.expect("response queue")
|
||||||
|
.get_mut(&uri)
|
||||||
|
.and_then(VecDeque::pop_front)
|
||||||
|
.unwrap_or_else(|| HttpResponse {
|
||||||
|
status_code: 404,
|
||||||
|
headers: BTreeMap::new(),
|
||||||
|
content_type: None,
|
||||||
|
body: Vec::new(),
|
||||||
|
})
|
||||||
|
});
|
||||||
|
(Self { requests }, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn requests(&self) -> Vec<HttpRequest> {
|
||||||
|
self.requests.lock().expect("request recording").clone()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn response(body: &str) -> HttpResponse {
|
||||||
|
HttpResponse {
|
||||||
|
status_code: 200,
|
||||||
|
headers: BTreeMap::from([("Content-Length".into(), body.len().to_string())]),
|
||||||
|
content_type: Some("application/json".into()),
|
||||||
|
body: body.as_bytes().to_vec(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn client_with_responses(responses: &[(&str, &str)]) -> (GridClient, RecordingHttp) {
|
||||||
|
let (recording, handler) = RecordingHttp::new(responses);
|
||||||
|
let mut client = GridClient::new().expect("GridClient constructor");
|
||||||
|
client.set_http_caps_client(HttpCapsClient::new(handler).expect("HttpCapsClient constructor"));
|
||||||
|
(client, recording)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn current_sim(client: &GridClient) -> libremetaverse::Simulator {
|
||||||
|
client
|
||||||
|
.network()
|
||||||
|
.current_sim()
|
||||||
|
.expect("fixture current simulator")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn body(request: &HttpRequest) -> String {
|
||||||
|
String::from_utf8(request.body.clone()).expect("UTF-8 request body")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn uuid_eq(actual: &UUID, expected: &UUID) {
|
||||||
|
assert_eq!(
|
||||||
|
actual.get_bytes().expect("actual UUID bytes"),
|
||||||
|
expected.get_bytes().expect("expected UUID bytes")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn assert_error<T>(result: Result<T, Error>, expected: Error) {
|
||||||
|
match result {
|
||||||
|
Err(Error::NotImplemented(error)) => panic!(
|
||||||
|
"expected {expected:?}, got failure-only shim {}",
|
||||||
|
error.csharp_member()
|
||||||
|
),
|
||||||
|
Err(error) => assert_eq!(error, expected),
|
||||||
|
Ok(_) => panic!("expected {expected:?}, got success"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn happy_upload_responses<'a>(
|
||||||
|
capability: &'a str,
|
||||||
|
uploader: &'a str,
|
||||||
|
new_asset: &UUID,
|
||||||
|
) -> [(&'a str, String); 2] {
|
||||||
|
[
|
||||||
|
(
|
||||||
|
capability,
|
||||||
|
format!(r#"{{"state":"upload","uploader":"{uploader}"}}"#),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
uploader,
|
||||||
|
format!(
|
||||||
|
r#"{{"state":"complete","new_asset":"{}"}}"#,
|
||||||
|
new_asset.to_string()
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn response_refs<'a, const N: usize>(
|
||||||
|
responses: &'a [(&'a str, String); N],
|
||||||
|
) -> Vec<(&'a str, &'a str)> {
|
||||||
|
responses
|
||||||
|
.iter()
|
||||||
|
.map(|(uri, body)| (*uri, body.as_str()))
|
||||||
|
.collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SetMaterialOverrideAsync_HappyPath_PostsBareArrayWithGltfJson::test 0c51b7b793111f5433e52057f26fa5a98d983e7230fefeb61a7b3408e97f28ee translated
|
||||||
|
#[test]
|
||||||
|
fn set_material_override_posts_bare_array_with_gltf_json() {
|
||||||
|
let (client, recording) = client_with_responses(&[(MODIFY_MATERIAL, r#"{"success":true}"#)]);
|
||||||
|
let object_id = UUID::random().expect("UUID Random");
|
||||||
|
let expected_id = object_id.to_string();
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
material
|
||||||
|
.set_base_color_factor_with_color4_boolean(
|
||||||
|
Color4::new_with_single_single_single_single(0.1, 0.2, 0.3, 1.0)
|
||||||
|
.expect("Color4 constructor"),
|
||||||
|
Some(true),
|
||||||
|
)
|
||||||
|
.expect("SetBaseColorFactor");
|
||||||
|
let result = block_on(client.objects().set_material_override(
|
||||||
|
current_sim(&client),
|
||||||
|
object_id,
|
||||||
|
3,
|
||||||
|
material,
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("SetMaterialOverrideAsync");
|
||||||
|
assert!(result);
|
||||||
|
let requests = recording.requests();
|
||||||
|
assert_eq!(requests.len(), 1);
|
||||||
|
let body = body(&requests[0]);
|
||||||
|
assert!(body.contains("<key>object_id</key>"));
|
||||||
|
assert!(body.contains(&expected_id));
|
||||||
|
assert!(body.contains("<key>side</key>"));
|
||||||
|
assert!(body.contains("<key>gltf_json</key>"));
|
||||||
|
assert!(!body.contains("<key>asset_id</key>"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.ClearMaterialOverrideAsync_SendsEmptyGltfJson::test 8394d063ea71447d9ce2b76fd00be1d10967f9193e1eb909c5b9f2da56eec812 translated
|
||||||
|
#[test]
|
||||||
|
fn clear_material_override_sends_empty_gltf_json() {
|
||||||
|
let (client, recording) = client_with_responses(&[(MODIFY_MATERIAL, r#"{"success":true}"#)]);
|
||||||
|
assert!(
|
||||||
|
block_on(client.objects().clear_material_override(
|
||||||
|
current_sim(&client),
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
0,
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("ClearMaterialOverrideAsync")
|
||||||
|
);
|
||||||
|
let body = body(&recording.requests()[0]);
|
||||||
|
assert!(body.contains("<key>gltf_json</key>"));
|
||||||
|
assert!(body.contains("<string />") || body.contains("<string></string>"));
|
||||||
|
assert!(!body.contains("<key>asset_id</key>"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.ApplyMaterialAsync_WithoutOverride_SendsAssetIdOnly::test 1db03ab6710ecf532644398d1fef5e82520e1206058d66fb15c8885fdc8f8363 translated
|
||||||
|
#[test]
|
||||||
|
fn apply_material_without_override_sends_asset_id_only() {
|
||||||
|
let (client, recording) = client_with_responses(&[(MODIFY_MATERIAL, r#"{"success":true}"#)]);
|
||||||
|
let asset_id = UUID::random().expect("UUID Random");
|
||||||
|
let expected_id = asset_id.to_string();
|
||||||
|
assert!(
|
||||||
|
block_on(client.objects().apply_material(
|
||||||
|
current_sim(&client),
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
1,
|
||||||
|
asset_id,
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("ApplyMaterialAsync")
|
||||||
|
);
|
||||||
|
let body = body(&recording.requests()[0]);
|
||||||
|
assert!(body.contains("<key>asset_id</key>"));
|
||||||
|
assert!(body.contains(&expected_id));
|
||||||
|
assert!(!body.contains("<key>gltf_json</key>"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_MultipleEntries_SendsSingleArrayBody::test 621dca88e7f1c9e024563204ca05c3c8d9a03c4b5a7b31ec1c006abe6732b47b translated
|
||||||
|
#[test]
|
||||||
|
fn material_updates_send_one_array_body() {
|
||||||
|
let (client, recording) = client_with_responses(&[(MODIFY_MATERIAL, r#"{"success":true}"#)]);
|
||||||
|
let mut first = GLTFMaterialUpdate::new().expect("GLTFMaterialUpdate constructor");
|
||||||
|
first.set_object_id(UUID::random().expect("UUID Random"));
|
||||||
|
first.set_side(0);
|
||||||
|
let mut second = GLTFMaterialUpdate::new().expect("GLTFMaterialUpdate constructor");
|
||||||
|
second.set_object_id(UUID::random().expect("UUID Random"));
|
||||||
|
second.set_side(1);
|
||||||
|
second.set_asset_id(Some(Some(UUID::random().expect("UUID Random"))));
|
||||||
|
assert!(
|
||||||
|
block_on(client.objects().send_material_updates(
|
||||||
|
current_sim(&client),
|
||||||
|
Box::new(vec![first, second].into_iter()),
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("SendMaterialUpdatesAsync")
|
||||||
|
);
|
||||||
|
assert_eq!(recording.requests().len(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_ServerRejects_ReturnsFalse::test e9fbd95fff84695e2cb1a35943bda768f00cf9015b25e0ae1505dce4dde603a4 translated
|
||||||
|
#[test]
|
||||||
|
fn material_updates_server_rejection_returns_false() {
|
||||||
|
let (client, _) = client_with_responses(&[(
|
||||||
|
MODIFY_MATERIAL,
|
||||||
|
r#"{"success":false,"message":"no rez rights"}"#,
|
||||||
|
)]);
|
||||||
|
assert!(
|
||||||
|
!block_on(client.objects().clear_material_override(
|
||||||
|
current_sim(&client),
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
0,
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("ClearMaterialOverrideAsync")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_NoCapability_ReturnsFalseWithoutRequest::test fdceb6bf865cb23386a6b82a9741f230e5c22b0ec6d37bc2ac8478f29292a49f translated
|
||||||
|
#[test]
|
||||||
|
fn material_updates_without_capability_make_no_request() {
|
||||||
|
let (client, recording) = client_with_responses(&[]);
|
||||||
|
assert!(
|
||||||
|
!block_on(client.objects().clear_material_override(
|
||||||
|
current_sim(&client),
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
0,
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("ClearMaterialOverrideAsync")
|
||||||
|
);
|
||||||
|
assert!(recording.requests().is_empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_HappyPath_PostsMetadataThenJsonAndReturnsNewAsset::test 5ac0e3c27fa6ebfddc9d7582aefb0684a676413948b055382c43b1b0b1cd7e7e translated
|
||||||
|
#[test]
|
||||||
|
fn material_agent_upload_posts_metadata_then_json() {
|
||||||
|
let item_id = UUID::random().expect("UUID Random");
|
||||||
|
let new_asset = UUID::random().expect("UUID Random");
|
||||||
|
let responses = happy_upload_responses(MATERIAL_AGENT, MATERIAL_UPLOADER, &new_asset);
|
||||||
|
let refs = response_refs(&responses);
|
||||||
|
let (client, recording) = client_with_responses(&refs);
|
||||||
|
let result = block_on(client.inventory().request_update_material_agent_inventory(
|
||||||
|
AssetMaterial::new_with_constructor().expect("AssetMaterial constructor"),
|
||||||
|
item_id,
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("RequestUpdateMaterialAgentInventoryAsync");
|
||||||
|
assert!(result.0);
|
||||||
|
uuid_eq(&result.2, &new_asset);
|
||||||
|
let requests = recording.requests();
|
||||||
|
assert_eq!(requests.len(), 2);
|
||||||
|
let metadata = body(&requests[0]);
|
||||||
|
assert!(metadata.contains("<key>item_id</key>"));
|
||||||
|
assert!(!metadata.contains("<key>task_id</key>"));
|
||||||
|
assert_eq!(requests[1].uri, Uri(MATERIAL_UPLOADER.into()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialTaskInventoryAsync_HappyPath_PostsItemIdAndTaskId::test 7ac0e7d210b1aefa795e479f4da0d2dd4caae0b3bbe84ca124707c3ae005bbbd translated
|
||||||
|
#[test]
|
||||||
|
fn material_task_upload_posts_item_and_task_ids() {
|
||||||
|
let new_asset = UUID::random().expect("UUID Random");
|
||||||
|
let responses = happy_upload_responses(MATERIAL_TASK, MATERIAL_UPLOADER, &new_asset);
|
||||||
|
let refs = response_refs(&responses);
|
||||||
|
let (client, recording) = client_with_responses(&refs);
|
||||||
|
let result = block_on(client.inventory().request_update_material_task_inventory(
|
||||||
|
AssetMaterial::new_with_constructor().expect("AssetMaterial constructor"),
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("RequestUpdateMaterialTaskInventoryAsync");
|
||||||
|
assert!(result.0);
|
||||||
|
uuid_eq(&result.2, &new_asset);
|
||||||
|
let metadata = body(&recording.requests()[0]);
|
||||||
|
assert!(metadata.contains("<key>item_id</key>"));
|
||||||
|
assert!(metadata.contains("<key>task_id</key>"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_NoCapability_Throws::test 325269807d778264e571d1518ca9a2ca69a27ba67ad689e580f2636ab595f335 translated
|
||||||
|
#[test]
|
||||||
|
fn material_agent_upload_without_capability_is_invalid_operation() {
|
||||||
|
let (client, _) = client_with_responses(&[]);
|
||||||
|
assert_error(
|
||||||
|
block_on(client.inventory().request_update_material_agent_inventory(
|
||||||
|
AssetMaterial::new_with_constructor().expect("AssetMaterial constructor"),
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
)),
|
||||||
|
Error::InvalidOperation,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_UploadedJsonRoundTripsMaterial::test fd059dfc8c9299c3b6583b3b47ba18ae9c92e3ad923f88634019b0ab9f34d401 translated
|
||||||
|
#[test]
|
||||||
|
fn uploaded_material_json_round_trips() {
|
||||||
|
let new_asset = UUID::random().expect("UUID Random");
|
||||||
|
let responses = happy_upload_responses(MATERIAL_AGENT, MATERIAL_UPLOADER, &new_asset);
|
||||||
|
let refs = response_refs(&responses);
|
||||||
|
let (client, recording) = client_with_responses(&refs);
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
material.set_name("My Material".into());
|
||||||
|
material
|
||||||
|
.set_base_color_factor_with_color4_boolean(
|
||||||
|
Color4::new_with_single_single_single_single(0.2, 0.4, 0.6, 1.0)
|
||||||
|
.expect("Color4 constructor"),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.expect("SetBaseColorFactor");
|
||||||
|
block_on(client.inventory().request_update_material_agent_inventory(
|
||||||
|
material,
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
None,
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("RequestUpdateMaterialAgentInventoryAsync");
|
||||||
|
let uploaded = recording.requests()[1].body.clone();
|
||||||
|
let round_trip =
|
||||||
|
AssetMaterial::new_with_uuid_bytes(UUID::random().expect("UUID Random"), uploaded)
|
||||||
|
.expect("AssetMaterial JSON constructor");
|
||||||
|
assert_eq!(round_trip.name(), "My Material");
|
||||||
|
assert_eq!(
|
||||||
|
[
|
||||||
|
round_trip.base_color_factor().r,
|
||||||
|
round_trip.base_color_factor().g,
|
||||||
|
round_trip.base_color_factor().b,
|
||||||
|
round_trip.base_color_factor().a,
|
||||||
|
],
|
||||||
|
[0.2, 0.4, 0.6, 1.0]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_ParsesFourSlotsWithSomeEmpty::test 0b7f2b5a7a95c70f4ed97b9b028f3ec16f1cd427a9d4d1b133523bd331f6b9f2 translated
|
||||||
|
#[test]
|
||||||
|
fn terrain_get_parses_four_slots_with_empty_entries() {
|
||||||
|
let (client, _) = client_with_responses(&[(
|
||||||
|
MODIFY_REGION,
|
||||||
|
r#"{"success":true,"overrides":[{},{"mf":0.25},{},{}]}"#,
|
||||||
|
)]);
|
||||||
|
let overrides = block_on(client.terrain().get_terrain_material_overrides(None))
|
||||||
|
.expect("GetTerrainMaterialOverridesAsync")
|
||||||
|
.expect("successful override response");
|
||||||
|
assert_eq!(overrides.len(), 4);
|
||||||
|
assert!(overrides[0].is_none());
|
||||||
|
assert_eq!(
|
||||||
|
overrides[1].as_ref().expect("slot one").metallic_factor(),
|
||||||
|
0.25
|
||||||
|
);
|
||||||
|
assert!(overrides[2].is_none());
|
||||||
|
assert!(overrides[3].is_none());
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_ServerReportsFailure_ReturnsNull::test c66b84662333288b7328822d1f9fa79450075d44a1178a9b0b661671072efe5b translated
|
||||||
|
#[test]
|
||||||
|
fn terrain_get_server_failure_returns_none() {
|
||||||
|
let (client, _) =
|
||||||
|
client_with_responses(&[(MODIFY_REGION, r#"{"success":false,"message":"nope"}"#)]);
|
||||||
|
assert!(
|
||||||
|
block_on(client.terrain().get_terrain_material_overrides(None))
|
||||||
|
.expect("GetTerrainMaterialOverridesAsync")
|
||||||
|
.is_none()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_NoCapability_ReturnsNullWithoutRequest::test 677f80689e1b6a67893d100e1116805fb9f63c5b6ec33e64a4dc9a4cf24c1237 translated
|
||||||
|
#[test]
|
||||||
|
fn terrain_get_without_capability_makes_no_request() {
|
||||||
|
let (client, recording) = client_with_responses(&[]);
|
||||||
|
assert!(
|
||||||
|
block_on(client.terrain().get_terrain_material_overrides(None))
|
||||||
|
.expect("GetTerrainMaterialOverridesAsync")
|
||||||
|
.is_none()
|
||||||
|
);
|
||||||
|
assert!(recording.requests().is_empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_MixOfNullAndSet_PostsFourEntries::test a4ce031e565ca7eb1864064d299dbf0c7b715581ce330a57be9c3aa93987e67c translated
|
||||||
|
#[test]
|
||||||
|
fn terrain_set_posts_four_mixed_entries() {
|
||||||
|
let (client, recording) = client_with_responses(&[(MODIFY_REGION, r#"{"success":true}"#)]);
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
material
|
||||||
|
.set_roughness_factor_with_single_boolean(0.1, Some(true))
|
||||||
|
.expect("SetRoughnessFactor");
|
||||||
|
assert!(
|
||||||
|
block_on(
|
||||||
|
client
|
||||||
|
.terrain()
|
||||||
|
.set_terrain_material_overrides(vec![None, Some(material), None, None], None,)
|
||||||
|
)
|
||||||
|
.expect("SetTerrainMaterialOverridesAsync")
|
||||||
|
);
|
||||||
|
let body = body(&recording.requests()[0]);
|
||||||
|
assert!(body.contains("<key>overrides</key>"));
|
||||||
|
assert!(body.contains("<key>rf</key>"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_WrongLength_Throws::test 836099a369b37555049b1c1ddfb9562c57cdef88381b7a79e8b80fe62b169a44 translated
|
||||||
|
#[test]
|
||||||
|
fn terrain_set_wrong_length_is_argument_error() {
|
||||||
|
let (client, _) = client_with_responses(&[]);
|
||||||
|
assert_error(
|
||||||
|
block_on(
|
||||||
|
client
|
||||||
|
.terrain()
|
||||||
|
.set_terrain_material_overrides(vec![None, None], None),
|
||||||
|
),
|
||||||
|
Error::Argument,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_NoCapability_ReturnsFalseWithoutRequest::test 37948cbc0240910d63782d88c0fb9f1d239215cea34a5aa84ac68a10d0555e87 translated
|
||||||
|
#[test]
|
||||||
|
fn terrain_set_without_capability_makes_no_request() {
|
||||||
|
let (client, recording) = client_with_responses(&[]);
|
||||||
|
assert!(
|
||||||
|
!block_on(
|
||||||
|
client
|
||||||
|
.terrain()
|
||||||
|
.set_terrain_material_overrides(vec![None, None, None, None], None,)
|
||||||
|
)
|
||||||
|
.expect("SetTerrainMaterialOverridesAsync")
|
||||||
|
);
|
||||||
|
assert!(recording.requests().is_empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_HappyPath_PostsMetadataThenImageAndReturnsTrue::test 2e02bd16ef1431c2ca82d7804dffc764be0175cff5daff8c38d0a61641439e06 translated
|
||||||
|
#[test]
|
||||||
|
fn postcard_posts_metadata_then_image() {
|
||||||
|
let (client, recording) = client_with_responses(&[
|
||||||
|
(
|
||||||
|
POSTCARD,
|
||||||
|
r#"{"state":"upload","uploader":"http://test.invalid/send-postcard/upload/abc123"}"#,
|
||||||
|
),
|
||||||
|
(POSTCARD_UPLOADER, r#"{"state":"complete"}"#),
|
||||||
|
]);
|
||||||
|
assert!(
|
||||||
|
block_on(client.self_().send_postcard(
|
||||||
|
vec![0xff, 0xd8, 0xff, 0xd9],
|
||||||
|
"friend@example.com".into(),
|
||||||
|
"Jim Radford".into(),
|
||||||
|
"Postcard from the edge".into(),
|
||||||
|
"Hello, how are you today?".into(),
|
||||||
|
Vector3::one(),
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("SendPostcardAsync")
|
||||||
|
);
|
||||||
|
let requests = recording.requests();
|
||||||
|
assert_eq!(requests.len(), 2);
|
||||||
|
assert_eq!(requests[0].method, "POST");
|
||||||
|
assert_eq!(requests[0].uri, Uri(POSTCARD.into()));
|
||||||
|
let metadata = body(&requests[0]);
|
||||||
|
assert!(!metadata.contains("<key>from</key>"));
|
||||||
|
for field in ["to", "name", "subject", "msg", "pos-global"] {
|
||||||
|
assert!(metadata.contains(field));
|
||||||
|
}
|
||||||
|
assert_eq!(requests[1].method, "POST");
|
||||||
|
assert_eq!(requests[1].uri, Uri(POSTCARD_UPLOADER.into()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_UploaderMissingFromResponse_ReturnsFalseWithoutSecondRequest::test 2f9498d57d7a512399f9b108765e6e8da8e4c937402f9671d580c66332630432 translated
|
||||||
|
#[test]
|
||||||
|
fn postcard_missing_uploader_returns_false_after_one_request() {
|
||||||
|
let (client, recording) = client_with_responses(&[(POSTCARD, r#"{"state":"upload"}"#)]);
|
||||||
|
assert!(
|
||||||
|
!block_on(client.self_().send_postcard(
|
||||||
|
vec![1, 2, 3],
|
||||||
|
"friend@example.com".into(),
|
||||||
|
"Jim Radford".into(),
|
||||||
|
"Subject".into(),
|
||||||
|
"Message".into(),
|
||||||
|
Vector3::zero(),
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("SendPostcardAsync")
|
||||||
|
);
|
||||||
|
assert_eq!(recording.requests().len(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_UploadDoesNotComplete_ReturnsFalse::test 937b682b406506ec9fba9570852bbf8689450a11cbecb85979af97609b1794f9 translated
|
||||||
|
#[test]
|
||||||
|
fn postcard_incomplete_upload_returns_false() {
|
||||||
|
let (client, _) = client_with_responses(&[
|
||||||
|
(
|
||||||
|
POSTCARD,
|
||||||
|
r#"{"state":"upload","uploader":"http://test.invalid/send-postcard/upload/abc123"}"#,
|
||||||
|
),
|
||||||
|
(POSTCARD_UPLOADER, r#"{"state":"failed"}"#),
|
||||||
|
]);
|
||||||
|
assert!(
|
||||||
|
!block_on(client.self_().send_postcard(
|
||||||
|
vec![1, 2, 3],
|
||||||
|
"friend@example.com".into(),
|
||||||
|
"Jim Radford".into(),
|
||||||
|
"Subject".into(),
|
||||||
|
"Message".into(),
|
||||||
|
Vector3::zero(),
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("SendPostcardAsync")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_NoCapability_ReturnsFalseWithoutRequest::test 8d3ef84e873096d9388bb7db3eaeeb79c661fd9951e338f71bbf3251ae6580e8 translated
|
||||||
|
#[test]
|
||||||
|
fn postcard_without_capability_makes_no_request() {
|
||||||
|
let (client, recording) = client_with_responses(&[]);
|
||||||
|
assert!(
|
||||||
|
!block_on(client.self_().send_postcard(
|
||||||
|
vec![1, 2, 3],
|
||||||
|
"friend@example.com".into(),
|
||||||
|
"Jim Radford".into(),
|
||||||
|
"Subject".into(),
|
||||||
|
"Message".into(),
|
||||||
|
Vector3::zero(),
|
||||||
|
None,
|
||||||
|
))
|
||||||
|
.expect("SendPostcardAsync")
|
||||||
|
);
|
||||||
|
assert!(recording.requests().is_empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
fn thumbnail_responses(new_asset: &UUID) -> [(&str, String); 2] {
|
||||||
|
[
|
||||||
|
(
|
||||||
|
THUMBNAIL,
|
||||||
|
format!(r#"{{"uploader":"{THUMBNAIL_UPLOADER}"}}"#),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
THUMBNAIL_UPLOADER,
|
||||||
|
format!(
|
||||||
|
r#"{{"state":"complete","new_asset":"{}"}}"#,
|
||||||
|
new_asset.to_string()
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn upload_thumbnail(client: &GridClient, inventory_id: UUID, task_id: UUID) -> Option<UUID> {
|
||||||
|
block_on(
|
||||||
|
client
|
||||||
|
.inventory()
|
||||||
|
.upload_thumbnail(inventory_id, task_id, vec![1, 2, 3], None, None),
|
||||||
|
)
|
||||||
|
.expect("UploadThumbnailAsync")
|
||||||
|
.flatten()
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_AgentInventoryItem_SendsBareItemIdAndReturnsNewAsset::test 40ca874a37dade3bfbb391a2b4a75c684cfd7509b269286ccc14d747340d095d translated
|
||||||
|
#[test]
|
||||||
|
fn thumbnail_agent_item_sends_bare_item_id() {
|
||||||
|
let new_asset = UUID::random().expect("UUID Random");
|
||||||
|
let responses = thumbnail_responses(&new_asset);
|
||||||
|
let refs = response_refs(&responses);
|
||||||
|
let (client, recording) = client_with_responses(&refs);
|
||||||
|
let result = upload_thumbnail(&client, UUID::random().expect("UUID Random"), UUID::zero())
|
||||||
|
.expect("new thumbnail asset");
|
||||||
|
uuid_eq(&result, &new_asset);
|
||||||
|
let requests = recording.requests();
|
||||||
|
assert_eq!(requests.len(), 2);
|
||||||
|
let metadata = body(&requests[0]);
|
||||||
|
assert!(metadata.contains("<key>item_id</key>"));
|
||||||
|
assert!(!metadata.contains("<key>task_id</key>"));
|
||||||
|
assert!(!metadata.contains("<key>category_id</key>"));
|
||||||
|
assert_eq!(requests[1].uri, Uri(THUMBNAIL_UPLOADER.into()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_TaskInventoryItem_SendsItemIdAndTaskId::test dae80f9a7ba6222a651165f779c123d8472f88a17490e69a1112acc3cec6d108 translated
|
||||||
|
#[test]
|
||||||
|
fn thumbnail_task_item_sends_item_and_task_ids() {
|
||||||
|
let new_asset = UUID::random().expect("UUID Random");
|
||||||
|
let responses = thumbnail_responses(&new_asset);
|
||||||
|
let refs = response_refs(&responses);
|
||||||
|
let (client, recording) = client_with_responses(&refs);
|
||||||
|
let result = upload_thumbnail(
|
||||||
|
&client,
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
)
|
||||||
|
.expect("new thumbnail asset");
|
||||||
|
uuid_eq(&result, &new_asset);
|
||||||
|
let metadata = body(&recording.requests()[0]);
|
||||||
|
assert!(metadata.contains("<key>item_id</key>"));
|
||||||
|
assert!(metadata.contains("<key>task_id</key>"));
|
||||||
|
assert!(!metadata.contains("<key>category_id</key>"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_KnownLocalFolder_SendsCategoryId::test 1ccca44bbead54fd5041c41fc6560478ba17f9e5d9bacff21096b254d2f526db translated
|
||||||
|
#[test]
|
||||||
|
fn thumbnail_known_local_folder_sends_category_id() {
|
||||||
|
let folder_id = UUID::random().expect("UUID Random");
|
||||||
|
let new_asset = UUID::random().expect("UUID Random");
|
||||||
|
let responses = thumbnail_responses(&new_asset);
|
||||||
|
let refs = response_refs(&responses);
|
||||||
|
let (client, recording) = client_with_responses(&refs);
|
||||||
|
// Upstream's helper labels this ID "Test Folder" through a private
|
||||||
|
// InventoryStore field. Rust keeps the operation and observation public:
|
||||||
|
// UploadThumbnailAsync must classify this known folder as category_id.
|
||||||
|
let result = upload_thumbnail(&client, folder_id, UUID::zero()).expect("new thumbnail asset");
|
||||||
|
uuid_eq(&result, &new_asset);
|
||||||
|
let metadata = body(&recording.requests()[0]);
|
||||||
|
assert!(metadata.contains("<key>category_id</key>"));
|
||||||
|
assert!(!metadata.contains("<key>item_id</key>"));
|
||||||
|
assert!(!metadata.contains("<key>task_id</key>"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_NoCapability_ReturnsNullWithoutRequest::test 2bc1ad18b159c5d62a18d2208ed3cf3c88d3f666a0e0dad8730778cd22b59eda translated
|
||||||
|
#[test]
|
||||||
|
fn thumbnail_without_capability_makes_no_request() {
|
||||||
|
let (client, recording) = client_with_responses(&[]);
|
||||||
|
assert!(
|
||||||
|
upload_thumbnail(&client, UUID::random().expect("UUID Random"), UUID::zero(),).is_none()
|
||||||
|
);
|
||||||
|
assert!(recording.requests().is_empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_MetadataResponseMissingUploader_ReturnsNullWithoutSecondRequest::test 8db3eddf1204ad795e9d5ef15365f422f96191a8b4c24ef3393b03c10d92d662 translated
|
||||||
|
#[test]
|
||||||
|
fn thumbnail_missing_uploader_returns_none_after_one_request() {
|
||||||
|
let (client, recording) = client_with_responses(&[(THUMBNAIL, r#"{"state":"upload"}"#)]);
|
||||||
|
assert!(
|
||||||
|
upload_thumbnail(&client, UUID::random().expect("UUID Random"), UUID::zero(),).is_none()
|
||||||
|
);
|
||||||
|
assert_eq!(recording.requests().len(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_UploadDoesNotComplete_ReturnsNull::test e870f6913e3f45676ce490069930427e6c625072fc1d6ebbf16f503be51df4ae translated
|
||||||
|
#[test]
|
||||||
|
fn thumbnail_incomplete_upload_returns_none() {
|
||||||
|
let (client, _) = client_with_responses(&[
|
||||||
|
(
|
||||||
|
THUMBNAIL,
|
||||||
|
r#"{"uploader":"http://test.invalid/inventory-thumbnail-upload/upload/abc123"}"#,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
THUMBNAIL_UPLOADER,
|
||||||
|
r#"{"state":"failed","message":"bad image"}"#,
|
||||||
|
),
|
||||||
|
]);
|
||||||
|
assert!(
|
||||||
|
upload_thumbnail(&client, UUID::random().expect("UUID Random"), UUID::zero(),).is_none()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/ConstructorNullArgumentTests.cs::ConstructorNullArgumentTests.AssetManager_Null_Throws::test 4fa1be8b233dacf6a5955359f2197ff77ae85ffbf2c3c68fcd8cbe672c2c5f91 translated
|
||||||
|
#[test]
|
||||||
|
fn asset_manager_none_client_is_argument_null() {
|
||||||
|
assert_error(AssetManager::new(None), Error::ArgumentNull);
|
||||||
|
}
|
||||||
516
tests/compat/tests/asset_document_semantics.rs
Normal file
516
tests/compat/tests/asset_document_semantics.rs
Normal file
@@ -0,0 +1,516 @@
|
|||||||
|
#![allow(clippy::float_cmp)]
|
||||||
|
|
||||||
|
// Exact BSD-3-Clause fixture provenance at LibreMetaverse
|
||||||
|
// 2aa70bb68513b39795da5d13c88f31b86e85a3ba (see LICENSE.md):
|
||||||
|
// AssetMaterialOverrideTests.cs 3ec3a8bca08da06c52de1eeea1428b2b83c27660af20580f0333ed67b01bd09b
|
||||||
|
// GltfDocumentTests.cs e6e94d5b97a27b8cc4a345f08ab9a9a43b6ce587667edd89d8a4ebbc04eaa646
|
||||||
|
// Embedded 44-byte triangle buffer d3478e66e380d8a2b0c9d80f3459f75660efb111e7b801a7d1c1f8f48723d79b
|
||||||
|
|
||||||
|
use libremetaverse::assets::gltf::{GltfDocument, GltfPrimitive, GltfPrimitiveMode};
|
||||||
|
use libremetaverse::assets::{AssetMaterial, GltfAlphaMode};
|
||||||
|
use libremetaverse_structured_data::OSDMap;
|
||||||
|
use libremetaverse_types::{Color4, Quaternion, UUID, Vector2, Vector3};
|
||||||
|
|
||||||
|
fn color(r: f32, g: f32, b: f32, a: f32) -> Color4 {
|
||||||
|
Color4::new_with_single_single_single_single(r, g, b, a).expect("Color4 constructor")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn vector2(x: f32, y: f32) -> Vector2 {
|
||||||
|
Vector2::new_with_single_single(x, y).expect("Vector2 constructor")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn color_values(value: &Color4) -> [f32; 4] {
|
||||||
|
[value.r, value.g, value.b, value.a]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn vector2_values(value: &Vector2) -> [f32; 2] {
|
||||||
|
[value.x, value.y]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn vector3_values(value: &Vector3) -> [f32; 3] {
|
||||||
|
[value.x, value.y, value.z]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn quaternion_values(value: &Quaternion) -> [f32; 4] {
|
||||||
|
[value.x, value.y, value.z, value.w]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn uuid_eq(actual: &UUID, expected: &UUID) {
|
||||||
|
assert_eq!(
|
||||||
|
actual.get_bytes().expect("actual UUID bytes"),
|
||||||
|
expected.get_bytes().expect("expected UUID bytes")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn minimal_gltf_json() -> String {
|
||||||
|
r#"{
|
||||||
|
"asset": { "version": "2.0", "generator": "Test" },
|
||||||
|
"scene": 0,
|
||||||
|
"scenes": [{ "name": "Scene", "nodes": [0] }],
|
||||||
|
"nodes": [{ "name": "Mesh", "mesh": 0 }],
|
||||||
|
"meshes": [{
|
||||||
|
"name": "Triangle",
|
||||||
|
"primitives": [{
|
||||||
|
"attributes": { "POSITION": 0 },
|
||||||
|
"indices": 1,
|
||||||
|
"material": 0,
|
||||||
|
"mode": 4
|
||||||
|
}]
|
||||||
|
}],
|
||||||
|
"materials": [{
|
||||||
|
"name": "Mat",
|
||||||
|
"pbrMetallicRoughness": {
|
||||||
|
"baseColorFactor": [1.0, 0.5, 0.0, 1.0],
|
||||||
|
"metallicFactor": 0.0,
|
||||||
|
"roughnessFactor": 1.0
|
||||||
|
},
|
||||||
|
"alphaMode": "OPAQUE",
|
||||||
|
"alphaCutoff": 0.5,
|
||||||
|
"doubleSided": false
|
||||||
|
}],
|
||||||
|
"accessors": [
|
||||||
|
{
|
||||||
|
"bufferView": 0,
|
||||||
|
"byteOffset": 0,
|
||||||
|
"componentType": 5126,
|
||||||
|
"count": 3,
|
||||||
|
"type": "VEC3",
|
||||||
|
"max": [1.0, 1.0, 0.0],
|
||||||
|
"min": [0.0, 0.0, 0.0]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"bufferView": 1,
|
||||||
|
"byteOffset": 0,
|
||||||
|
"componentType": 5123,
|
||||||
|
"count": 3,
|
||||||
|
"type": "SCALAR"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"bufferViews": [
|
||||||
|
{ "buffer": 0, "byteOffset": 0, "byteLength": 36, "target": 34962 },
|
||||||
|
{ "buffer": 0, "byteOffset": 36, "byteLength": 6, "target": 34963 }
|
||||||
|
],
|
||||||
|
"buffers": [{
|
||||||
|
"byteLength": 44,
|
||||||
|
"uri": "data:application/octet-stream;base64,AAAAAAAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAAAAAAABAAIAAAA="
|
||||||
|
}]
|
||||||
|
}"#
|
||||||
|
.into()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn load_document() -> GltfDocument {
|
||||||
|
GltfDocument::load_gltf(minimal_gltf_json(), None).expect("GltfDocument LoadGltf")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn first_primitive(document: &GltfDocument) -> GltfPrimitive {
|
||||||
|
document.meshes()[0]
|
||||||
|
.primitives()
|
||||||
|
.into_iter()
|
||||||
|
.next()
|
||||||
|
.expect("first primitive")
|
||||||
|
}
|
||||||
|
|
||||||
|
fn assert_close(actual: f32, expected: f32, tolerance: f32) {
|
||||||
|
assert!((actual - expected).abs() <= tolerance);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseColorFactor_OverrideToDefault_IsNudgedOffDefault::test df553fd4df83e48d4dd74cdd8aa15a737ea3a416bcad802f7110bbfe79928a31 translated
|
||||||
|
#[test]
|
||||||
|
fn base_color_override_to_default_is_nudged() {
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
let default = AssetMaterial::default().base_color_factor();
|
||||||
|
material
|
||||||
|
.set_base_color_factor_with_color4_boolean(default, Some(true))
|
||||||
|
.expect("SetBaseColorFactor");
|
||||||
|
assert_ne!(
|
||||||
|
color_values(&material.base_color_factor()),
|
||||||
|
color_values(&AssetMaterial::default().base_color_factor())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseColorFactor_NotOverride_LeavesExactDefaultUnchanged::test fec94fcfac0f36cc5813ed087a30e04fcc9815bc02072ea3f5dd282b8698a89c translated
|
||||||
|
#[test]
|
||||||
|
fn base_color_non_override_keeps_default() {
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
let default = AssetMaterial::default().base_color_factor();
|
||||||
|
material
|
||||||
|
.set_base_color_factor_with_color4_boolean(default, None)
|
||||||
|
.expect("SetBaseColorFactor");
|
||||||
|
assert_eq!(
|
||||||
|
color_values(&material.base_color_factor()),
|
||||||
|
color_values(&AssetMaterial::default().base_color_factor())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetMetallicFactor_OverrideToOne_ClampsBelowDefault::test 7fcee795160428082f6e579881867c7b6c83f31549077fc28a46d18c75c485c9 translated
|
||||||
|
#[test]
|
||||||
|
fn metallic_override_to_one_clamps_below_default() {
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
material
|
||||||
|
.set_metallic_factor_with_single_boolean(1.0, Some(true))
|
||||||
|
.expect("SetMetallicFactor");
|
||||||
|
assert!(material.metallic_factor() < 1.0);
|
||||||
|
assert_ne!(
|
||||||
|
material.metallic_factor(),
|
||||||
|
AssetMaterial::default().metallic_factor()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetAlphaMode_OverrideToDefaultOpaque_SetsOverrideFlag::test 8af09d12a58083657e27e285802bb3a6a1d1c136397cea53865d964006343715 translated
|
||||||
|
#[test]
|
||||||
|
fn alpha_mode_override_sets_flag() {
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
material
|
||||||
|
.set_alpha_mode_with_gltf_alpha_mode_boolean(GltfAlphaMode::Opaque, Some(true))
|
||||||
|
.expect("SetAlphaMode");
|
||||||
|
assert!(material.override_alpha_mode());
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetTextureId_OverrideToNull_UsesSentinelUuid::test d9ebf410d2a55c3619b99524a571396fb268e5edd41de955cb86e4ec8cc55c78 translated
|
||||||
|
#[test]
|
||||||
|
fn null_texture_override_uses_sentinel() {
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
material
|
||||||
|
.set_texture_id(AssetMaterial::TEXTURE_BASE_COLOR, UUID::zero(), Some(true))
|
||||||
|
.expect("SetTextureId");
|
||||||
|
uuid_eq(
|
||||||
|
&material.texture_ids()[AssetMaterial::TEXTURE_BASE_COLOR as usize],
|
||||||
|
&AssetMaterial::gltf_override_null_uuid(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_SentinelTexture_ClearsBaseTexture::test 17fd8cdb12ed5d1d0aa1b0a05dbcc357f75aa350d5079b066c957da459d9f628 translated
|
||||||
|
#[test]
|
||||||
|
fn sentinel_override_clears_base_texture() {
|
||||||
|
let mut base = AssetMaterial::new_with_constructor().expect("base material");
|
||||||
|
base.set_texture_id(
|
||||||
|
AssetMaterial::TEXTURE_BASE_COLOR,
|
||||||
|
UUID::random().expect("UUID Random"),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.expect("base texture");
|
||||||
|
let mut override_ = AssetMaterial::new_with_constructor().expect("override material");
|
||||||
|
override_
|
||||||
|
.set_texture_id(AssetMaterial::TEXTURE_BASE_COLOR, UUID::zero(), Some(true))
|
||||||
|
.expect("override texture");
|
||||||
|
base.apply_override(override_).expect("ApplyOverride");
|
||||||
|
uuid_eq(
|
||||||
|
&base.texture_ids()[AssetMaterial::TEXTURE_BASE_COLOR as usize],
|
||||||
|
&UUID::zero(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_UntouchedTexture_LeavesBaseTextureAlone::test 80ec5e369e3682d92ec6996841b15bda38a3ef6edcd36a2fd9893d8c15459348 translated
|
||||||
|
#[test]
|
||||||
|
fn untouched_override_keeps_base_texture() {
|
||||||
|
let original = UUID::random().expect("UUID Random");
|
||||||
|
let original_copy = UUID::new_with_bytes_int32(original.get_bytes().expect("UUID bytes"), 0)
|
||||||
|
.expect("UUID copy");
|
||||||
|
let mut base = AssetMaterial::new_with_constructor().expect("base material");
|
||||||
|
base.set_texture_id(AssetMaterial::TEXTURE_BASE_COLOR, original, None)
|
||||||
|
.expect("base texture");
|
||||||
|
let override_ = AssetMaterial::new_with_constructor().expect("override material");
|
||||||
|
base.apply_override(override_).expect("ApplyOverride");
|
||||||
|
uuid_eq(
|
||||||
|
&base.texture_ids()[AssetMaterial::TEXTURE_BASE_COLOR as usize],
|
||||||
|
&original_copy,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_ChangedScalar_ReplacesBaseValue::test 4c305c54c4e451932fbd4a4719957f92f38a7f7d28259559b43cb95fcf9250d1 translated
|
||||||
|
#[test]
|
||||||
|
fn changed_scalar_override_replaces_base() {
|
||||||
|
let mut base = AssetMaterial::new_with_constructor().expect("base material");
|
||||||
|
let mut override_ = AssetMaterial::new_with_constructor().expect("override material");
|
||||||
|
override_
|
||||||
|
.set_roughness_factor_with_single_boolean(0.3, Some(true))
|
||||||
|
.expect("SetRoughnessFactor");
|
||||||
|
base.apply_override(override_).expect("ApplyOverride");
|
||||||
|
assert_eq!(base.roughness_factor(), 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseMaterial_ResetsFieldsButKeepsTransforms::test 39312602e736fd8607a41d9e6b6348bfaf6e659cf3f63100ee15edd20b672306 translated
|
||||||
|
#[test]
|
||||||
|
fn set_base_material_keeps_texture_transforms() {
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
material.set_name("Foo".into());
|
||||||
|
material
|
||||||
|
.set_roughness_factor_with_single_boolean(0.2, Some(true))
|
||||||
|
.expect("SetRoughnessFactor");
|
||||||
|
material
|
||||||
|
.set_texture_offset(AssetMaterial::TEXTURE_BASE_COLOR, vector2(0.5, 0.25))
|
||||||
|
.expect("SetTextureOffset");
|
||||||
|
material.set_base_material().expect("SetBaseMaterial");
|
||||||
|
assert_eq!(material.name(), "");
|
||||||
|
assert_eq!(
|
||||||
|
material.roughness_factor(),
|
||||||
|
AssetMaterial::default().roughness_factor()
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
vector2_values(
|
||||||
|
&material.texture_transforms()[AssetMaterial::TEXTURE_BASE_COLOR as usize].offset,
|
||||||
|
),
|
||||||
|
vector2_values(&vector2(0.5, 0.25))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_RoundTrip_PreservesOverriddenFields::test 8d542528a14e3b4dcb74ea8a940a44673aada51f98baf8abcdd59a06f36e3cb0 translated
|
||||||
|
#[test]
|
||||||
|
fn override_osd_round_trip_preserves_fields() {
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
material
|
||||||
|
.set_roughness_factor_with_single_boolean(0.4, Some(true))
|
||||||
|
.expect("SetRoughnessFactor");
|
||||||
|
material
|
||||||
|
.set_metallic_factor_with_single_boolean(0.6, Some(true))
|
||||||
|
.expect("SetMetallicFactor");
|
||||||
|
let texture = UUID::random().expect("UUID Random");
|
||||||
|
let expected =
|
||||||
|
UUID::new_with_bytes_int32(texture.get_bytes().expect("UUID bytes"), 0).expect("UUID copy");
|
||||||
|
material
|
||||||
|
.set_texture_id(AssetMaterial::TEXTURE_EMISSIVE, texture, Some(true))
|
||||||
|
.expect("SetTextureId");
|
||||||
|
material
|
||||||
|
.set_texture_rotation(AssetMaterial::TEXTURE_EMISSIVE, 1.25)
|
||||||
|
.expect("SetTextureRotation");
|
||||||
|
let osd = material.to_override_osd().expect("ToOverrideOsd");
|
||||||
|
let round_trip = AssetMaterial::from_override_osd(osd).expect("FromOverrideOsd");
|
||||||
|
assert_eq!(round_trip.roughness_factor(), 0.4);
|
||||||
|
assert_eq!(round_trip.metallic_factor(), 0.6);
|
||||||
|
uuid_eq(
|
||||||
|
&round_trip.texture_ids()[AssetMaterial::TEXTURE_EMISSIVE as usize],
|
||||||
|
&expected,
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
round_trip.texture_transforms()[AssetMaterial::TEXTURE_EMISSIVE as usize].rotation,
|
||||||
|
1.25
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_UntouchedMaterial_ProducesEmptyMap::test c9e29f7ec0e6b28579e0499e3ec89841e01a313a9386ba60257e5e701129b1c2 translated
|
||||||
|
#[test]
|
||||||
|
fn untouched_material_override_osd_is_empty() {
|
||||||
|
let material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
let osd: OSDMap = material.to_override_osd().expect("ToOverrideOsd");
|
||||||
|
assert_eq!(osd.count(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_OverrideToDefaultRoughness_StillEncodesField::test 4ea9920c6709bd29858a8da66313fcee5ebebd646743c5d822dd6c9e477bf3b4 translated
|
||||||
|
#[test]
|
||||||
|
fn default_roughness_override_is_encoded() {
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
material
|
||||||
|
.set_roughness_factor_with_single_boolean(
|
||||||
|
AssetMaterial::default().roughness_factor(),
|
||||||
|
Some(true),
|
||||||
|
)
|
||||||
|
.expect("SetRoughnessFactor");
|
||||||
|
let osd = material.to_override_osd().expect("ToOverrideOsd");
|
||||||
|
assert!(osd.contains_key("rf".into()).expect("ContainsKey"));
|
||||||
|
let round_trip = AssetMaterial::from_override_osd(osd).expect("FromOverrideOsd");
|
||||||
|
assert_ne!(
|
||||||
|
round_trip.roughness_factor(),
|
||||||
|
AssetMaterial::default().roughness_factor()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToJson_RoundTrip_PreservesNameAndColor::test d7ae4270d82671a970fc1b6457292860d24481dd84e9fb919ae60fded5f1914e translated
|
||||||
|
#[test]
|
||||||
|
fn material_json_round_trip_preserves_name_and_color() {
|
||||||
|
let mut material = AssetMaterial::new_with_constructor().expect("AssetMaterial constructor");
|
||||||
|
material.set_name("Chrome".into());
|
||||||
|
material
|
||||||
|
.set_base_color_factor_with_color4_boolean(color(0.1, 0.2, 0.3, 1.0), None)
|
||||||
|
.expect("SetBaseColorFactor");
|
||||||
|
let json = material.to_json().expect("AssetMaterial ToJson");
|
||||||
|
let decoded =
|
||||||
|
AssetMaterial::new_with_uuid_bytes(UUID::random().expect("UUID Random"), json.into_bytes())
|
||||||
|
.expect("AssetMaterial bytes constructor");
|
||||||
|
assert_eq!(decoded.name(), "Chrome");
|
||||||
|
assert_eq!(
|
||||||
|
color_values(&decoded.base_color_factor()),
|
||||||
|
color_values(&material.base_color_factor())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesSceneGraph::test e20583d8de31f793d1dc49d1dfde89e1eb8c00186359e7df4184e862ec9ed649 translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_parses_scene_graph() {
|
||||||
|
let document = load_document();
|
||||||
|
assert_eq!(document.version(), "2.0");
|
||||||
|
assert_eq!(document.generator().as_deref(), Some("Test"));
|
||||||
|
assert_eq!(document.default_scene(), 0);
|
||||||
|
assert_eq!(document.scenes().len(), 1);
|
||||||
|
assert_eq!(document.scenes()[0].nodes().len(), 1);
|
||||||
|
assert_eq!(document.nodes().len(), 1);
|
||||||
|
assert_eq!(document.nodes()[0].mesh(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesMeshAndPrimitive::test ef6a76308db1966423c7746f5414f3d0553587efc388bbedb962f38cc122ecaf translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_parses_mesh_and_primitive() {
|
||||||
|
let document = load_document();
|
||||||
|
assert_eq!(document.meshes().len(), 1);
|
||||||
|
assert_eq!(document.meshes()[0].name().as_deref(), Some("Triangle"));
|
||||||
|
assert_eq!(document.meshes()[0].primitives().len(), 1);
|
||||||
|
let primitive = first_primitive(&document);
|
||||||
|
assert!(primitive.attributes().contains_key("POSITION"));
|
||||||
|
assert_eq!(primitive.indices(), 1);
|
||||||
|
assert_eq!(primitive.material(), 0);
|
||||||
|
assert_eq!(primitive.mode(), GltfPrimitiveMode::Triangles);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesMaterial::test 0147b4d7102c5223f247f69fa4cf3daeb0aa6300ad46ef34d6a17163b694c13e translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_parses_material() {
|
||||||
|
let document = load_document();
|
||||||
|
assert_eq!(document.materials().len(), 1);
|
||||||
|
let material = &document.materials()[0];
|
||||||
|
assert_eq!(material.name().as_deref(), Some("Mat"));
|
||||||
|
assert_close(material.base_color_factor().r, 1.0, 1e-4);
|
||||||
|
assert_close(material.base_color_factor().g, 0.5, 1e-4);
|
||||||
|
assert_close(material.metallic_factor(), 0.0, 1e-4);
|
||||||
|
assert_close(material.roughness_factor(), 1.0, 1e-4);
|
||||||
|
assert_eq!(material.alpha_mode(), GltfAlphaMode::Opaque);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetPositions_ReturnsCorrectTriangle::test c3d444122ab73794a011d5a5aafb0c2aa030975393f967e871dc88db200f5e96 translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_positions_are_correct_triangle() {
|
||||||
|
let document = load_document();
|
||||||
|
let positions = document
|
||||||
|
.get_positions(first_primitive(&document))
|
||||||
|
.expect("GetPositions");
|
||||||
|
assert_eq!(positions.len(), 3);
|
||||||
|
assert_eq!(
|
||||||
|
vector3_values(&positions[0]),
|
||||||
|
vector3_values(&Vector3::zero())
|
||||||
|
);
|
||||||
|
assert_close(positions[1].x, 1.0, 1e-5);
|
||||||
|
assert_close(positions[1].y, 0.0, 1e-5);
|
||||||
|
assert_close(positions[2].x, 0.0, 1e-5);
|
||||||
|
assert_close(positions[2].y, 1.0, 1e-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetIndices_ReturnsCorrectValues::test fa39e87a3dfee7258d9a95907a97cbb107f5add7d6a6f9d9800249bb67e2fc58 translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_indices_are_correct() {
|
||||||
|
let document = load_document();
|
||||||
|
let indices = document
|
||||||
|
.get_indices(first_primitive(&document))
|
||||||
|
.expect("GetIndices");
|
||||||
|
assert_eq!(indices, [0, 1, 2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetPositions_EmptyWhenNoAttribute::test 06c691911ee6933f1884f6540d69afafa1f272acfed827c628580438204d9b4b translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_positions_empty_without_attribute() {
|
||||||
|
let document = load_document();
|
||||||
|
let primitive = GltfPrimitive::new().expect("GltfPrimitive constructor");
|
||||||
|
assert_eq!(
|
||||||
|
document
|
||||||
|
.get_positions(primitive)
|
||||||
|
.expect("GetPositions")
|
||||||
|
.len(),
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetNormals_EmptyWhenNoAttribute::test e04480b0b9e23cb561cc55e744ebd85203c759f98ad69febeeb291919f0d91af translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_normals_empty_without_attribute() {
|
||||||
|
let document = load_document();
|
||||||
|
assert_eq!(
|
||||||
|
document
|
||||||
|
.get_normals(first_primitive(&document))
|
||||||
|
.expect("GetNormals")
|
||||||
|
.len(),
|
||||||
|
0
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ToJson_RoundTrip_PreservesSceneGraph::test 41c385b7bde3f8e4f4ad98d4f1f737fc6ccc241c2613526fd745eb35430386b2 translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_json_round_trip_preserves_scene_graph() {
|
||||||
|
let original = load_document();
|
||||||
|
let json = original.to_json(None).expect("GltfDocument ToJson");
|
||||||
|
let round_trip = GltfDocument::load_gltf(json, None).expect("GltfDocument LoadGltf");
|
||||||
|
assert_eq!(round_trip.scenes().len(), original.scenes().len());
|
||||||
|
assert_eq!(round_trip.nodes().len(), original.nodes().len());
|
||||||
|
assert_eq!(round_trip.meshes().len(), original.meshes().len());
|
||||||
|
assert_eq!(round_trip.materials().len(), original.materials().len());
|
||||||
|
assert_close(
|
||||||
|
round_trip.materials()[0].base_color_factor().r,
|
||||||
|
original.materials()[0].base_color_factor().r,
|
||||||
|
1e-4,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ToGlb_RoundTrip_PreservesGeometry::test 1e97fe2d1492ac195f6a4386329c76ad131ab99a41b8e03216b1bab8b48fae36 translated
|
||||||
|
#[test]
|
||||||
|
fn glb_round_trip_preserves_geometry() {
|
||||||
|
let original = load_document();
|
||||||
|
let glb = original.to_glb().expect("GltfDocument ToGlb");
|
||||||
|
assert_eq!(&glb[..4], &[0x67, 0x6c, 0x54, 0x46]);
|
||||||
|
let round_trip = GltfDocument::load(glb, None).expect("GltfDocument Load");
|
||||||
|
let positions = round_trip
|
||||||
|
.get_positions(first_primitive(&round_trip))
|
||||||
|
.expect("GetPositions");
|
||||||
|
assert_eq!(positions.len(), 3);
|
||||||
|
assert_close(positions[1].x, 1.0, 1e-5);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.Load_AutoDetectsGlbVsJson::test 6d07930be2302e504ef9ece3fef10f47b855d33ae6c8bff152e82df0beb2a474 translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_load_auto_detects_glb_and_json() {
|
||||||
|
let original = load_document();
|
||||||
|
let glb = original.to_glb().expect("GltfDocument ToGlb");
|
||||||
|
let json = original.to_json(None).expect("GltfDocument ToJson");
|
||||||
|
let from_glb = GltfDocument::load(glb, None).expect("load GLB");
|
||||||
|
let from_json = GltfDocument::load(json.into_bytes(), None).expect("load JSON");
|
||||||
|
assert_eq!(from_glb.meshes().len(), 1);
|
||||||
|
assert_eq!(from_json.meshes().len(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ParseNode_TrsDefaults::test 0f0fbe116d20276c2aee917b940bded9de277ed0b3e3b659844c5b3532755259 translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_node_trs_defaults() {
|
||||||
|
let document = load_document();
|
||||||
|
let node = &document.nodes()[0];
|
||||||
|
assert!(node.matrix().is_none());
|
||||||
|
assert_eq!(
|
||||||
|
vector3_values(&node.translation()),
|
||||||
|
vector3_values(&Vector3::zero())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
quaternion_values(&node.rotation()),
|
||||||
|
quaternion_values(&Quaternion::identity())
|
||||||
|
);
|
||||||
|
assert_eq!(
|
||||||
|
vector3_values(&node.scale()),
|
||||||
|
vector3_values(&Vector3::one())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ParseNode_ExplicitMatrix::test 197ba2ee3a66cbb7d927acea13ce9dc84e62af8a500d939957749039118755c8 translated
|
||||||
|
#[test]
|
||||||
|
fn gltf_node_explicit_matrix() {
|
||||||
|
let document = GltfDocument::load_gltf(
|
||||||
|
r#"{
|
||||||
|
"asset": { "version": "2.0" },
|
||||||
|
"nodes": [{
|
||||||
|
"matrix": [1,0,0,0, 0,1,0,0, 0,0,1,0, 5,6,7,1]
|
||||||
|
}]
|
||||||
|
}"#
|
||||||
|
.into(),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
.expect("GltfDocument LoadGltf");
|
||||||
|
let matrix = document.nodes()[0]
|
||||||
|
.matrix()
|
||||||
|
.flatten()
|
||||||
|
.expect("explicit matrix");
|
||||||
|
assert_close(matrix.m14, 5.0, 1e-5);
|
||||||
|
assert_close(matrix.m24, 6.0, 1e-5);
|
||||||
|
assert_close(matrix.m34, 7.0, 1e-5);
|
||||||
|
}
|
||||||
@@ -1146,175 +1146,6 @@ fn appearance_tests_avatar_appearance_event_args_decode_visual_para_a90e5fb90200
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseColorFactor_OverrideToDefault_IsNudgedOffDefault::test df553fd4df83e48d4dd74cdd8aa15a737ea3a416bcad802f7110bbfe79928a31 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_set_base_color_factor_override_to_524dfc923df0() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseColorFactor_OverrideToDefault_IsNudgedOffDefault::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
43,
|
|
||||||
"AssetMaterialOverrideTests.SetBaseColorFactor_OverrideToDefault_IsNudgedOffDefault",
|
|
||||||
"[Test]",
|
|
||||||
"df553fd4df83e48d4dd74cdd8aa15a737ea3a416bcad802f7110bbfe79928a31",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseColorFactor_NotOverride_LeavesExactDefaultUnchanged::test fec94fcfac0f36cc5813ed087a30e04fcc9815bc02072ea3f5dd282b8698a89c pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_set_base_color_factor_not_override_65f758d426e3() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseColorFactor_NotOverride_LeavesExactDefaultUnchanged::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
52,
|
|
||||||
"AssetMaterialOverrideTests.SetBaseColorFactor_NotOverride_LeavesExactDefaultUnchanged",
|
|
||||||
"[Test]",
|
|
||||||
"fec94fcfac0f36cc5813ed087a30e04fcc9815bc02072ea3f5dd282b8698a89c",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetMetallicFactor_OverrideToOne_ClampsBelowDefault::test 7fcee795160428082f6e579881867c7b6c83f31549077fc28a46d18c75c485c9 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_set_metallic_factor_override_to_on_1ed9219c51f1() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetMetallicFactor_OverrideToOne_ClampsBelowDefault::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
61,
|
|
||||||
"AssetMaterialOverrideTests.SetMetallicFactor_OverrideToOne_ClampsBelowDefault",
|
|
||||||
"[Test]",
|
|
||||||
"7fcee795160428082f6e579881867c7b6c83f31549077fc28a46d18c75c485c9",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetAlphaMode_OverrideToDefaultOpaque_SetsOverrideFlag::test 8af09d12a58083657e27e285802bb3a6a1d1c136397cea53865d964006343715 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_set_alpha_mode_override_to_default_f1540b0cfbcb() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetAlphaMode_OverrideToDefaultOpaque_SetsOverrideFlag::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
71,
|
|
||||||
"AssetMaterialOverrideTests.SetAlphaMode_OverrideToDefaultOpaque_SetsOverrideFlag",
|
|
||||||
"[Test]",
|
|
||||||
"8af09d12a58083657e27e285802bb3a6a1d1c136397cea53865d964006343715",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetTextureId_OverrideToNull_UsesSentinelUuid::test d9ebf410d2a55c3619b99524a571396fb268e5edd41de955cb86e4ec8cc55c78 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_set_texture_id_override_to_null_us_b8fc60e6cd5b() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetTextureId_OverrideToNull_UsesSentinelUuid::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
80,
|
|
||||||
"AssetMaterialOverrideTests.SetTextureId_OverrideToNull_UsesSentinelUuid",
|
|
||||||
"[Test]",
|
|
||||||
"d9ebf410d2a55c3619b99524a571396fb268e5edd41de955cb86e4ec8cc55c78",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_SentinelTexture_ClearsBaseTexture::test 17fd8cdb12ed5d1d0aa1b0a05dbcc357f75aa350d5079b066c957da459d9f628 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_apply_override_sentinel_texture_cl_3923b72f150b() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_SentinelTexture_ClearsBaseTexture::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
89,
|
|
||||||
"AssetMaterialOverrideTests.ApplyOverride_SentinelTexture_ClearsBaseTexture",
|
|
||||||
"[Test]",
|
|
||||||
"17fd8cdb12ed5d1d0aa1b0a05dbcc357f75aa350d5079b066c957da459d9f628",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_UntouchedTexture_LeavesBaseTextureAlone::test 80ec5e369e3682d92ec6996841b15bda38a3ef6edcd36a2fd9893d8c15459348 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_apply_override_untouched_texture_l_3f9bd6f143b4() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_UntouchedTexture_LeavesBaseTextureAlone::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
103,
|
|
||||||
"AssetMaterialOverrideTests.ApplyOverride_UntouchedTexture_LeavesBaseTextureAlone",
|
|
||||||
"[Test]",
|
|
||||||
"80ec5e369e3682d92ec6996841b15bda38a3ef6edcd36a2fd9893d8c15459348",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_ChangedScalar_ReplacesBaseValue::test 4c305c54c4e451932fbd4a4719957f92f38a7f7d28259559b43cb95fcf9250d1 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_apply_override_changed_scalar_repl_59fe25df1043() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ApplyOverride_ChangedScalar_ReplacesBaseValue::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
116,
|
|
||||||
"AssetMaterialOverrideTests.ApplyOverride_ChangedScalar_ReplacesBaseValue",
|
|
||||||
"[Test]",
|
|
||||||
"4c305c54c4e451932fbd4a4719957f92f38a7f7d28259559b43cb95fcf9250d1",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseMaterial_ResetsFieldsButKeepsTransforms::test 39312602e736fd8607a41d9e6b6348bfaf6e659cf3f63100ee15edd20b672306 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_set_base_material_resets_fields_bu_7454b1df78b8() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.SetBaseMaterial_ResetsFieldsButKeepsTransforms::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
128,
|
|
||||||
"AssetMaterialOverrideTests.SetBaseMaterial_ResetsFieldsButKeepsTransforms",
|
|
||||||
"[Test]",
|
|
||||||
"39312602e736fd8607a41d9e6b6348bfaf6e659cf3f63100ee15edd20b672306",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_RoundTrip_PreservesOverriddenFields::test 8d542528a14e3b4dcb74ea8a940a44673aada51f98baf8abcdd59a06f36e3cb0 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_to_override_osd_round_trip_preserv_bc452d8188d4() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_RoundTrip_PreservesOverriddenFields::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
142,
|
|
||||||
"AssetMaterialOverrideTests.ToOverrideOsd_RoundTrip_PreservesOverriddenFields",
|
|
||||||
"[Test]",
|
|
||||||
"8d542528a14e3b4dcb74ea8a940a44673aada51f98baf8abcdd59a06f36e3cb0",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_UntouchedMaterial_ProducesEmptyMap::test c9e29f7ec0e6b28579e0499e3ec89841e01a313a9386ba60257e5e701129b1c2 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_to_override_osd_untouched_material_53ec36a31e92() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_UntouchedMaterial_ProducesEmptyMap::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
161,
|
|
||||||
"AssetMaterialOverrideTests.ToOverrideOsd_UntouchedMaterial_ProducesEmptyMap",
|
|
||||||
"[Test]",
|
|
||||||
"c9e29f7ec0e6b28579e0499e3ec89841e01a313a9386ba60257e5e701129b1c2",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_OverrideToDefaultRoughness_StillEncodesField::test 4ea9920c6709bd29858a8da66313fcee5ebebd646743c5d822dd6c9e477bf3b4 pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_to_override_osd_override_to_defaul_3607483c81d8() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToOverrideOsd_OverrideToDefaultRoughness_StillEncodesField::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
170,
|
|
||||||
"AssetMaterialOverrideTests.ToOverrideOsd_OverrideToDefaultRoughness_StillEncodesField",
|
|
||||||
"[Test]",
|
|
||||||
"4ea9920c6709bd29858a8da66313fcee5ebebd646743c5d822dd6c9e477bf3b4",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToJson_RoundTrip_PreservesNameAndColor::test d7ae4270d82671a970fc1b6457292860d24481dd84e9fb919ae60fded5f1914e pending
|
|
||||||
#[test]
|
|
||||||
fn asset_material_override_tests_to_json_round_trip_preserves_name_34b630798b02() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs::AssetMaterialOverrideTests.ToJson_RoundTrip_PreservesNameAndColor::test",
|
|
||||||
"LibreMetaverse.Tests/AssetMaterialOverrideTests.cs",
|
|
||||||
184,
|
|
||||||
"AssetMaterialOverrideTests.ToJson_RoundTrip_PreservesNameAndColor",
|
|
||||||
"[Test]",
|
|
||||||
"d7ae4270d82671a970fc1b6457292860d24481dd84e9fb919ae60fded5f1914e",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/AvatarManagerTests.cs::AvatarManagerTests.RequestOwnAvatarTextures_WhenNotConnected_DoesNotThrow::test bf3539f68a0adc58c2166289ca1c75f6ff03906f71ffe2fb749f6990404b541a pending
|
// parity-case: LibreMetaverse.Tests/AvatarManagerTests.cs::AvatarManagerTests.RequestOwnAvatarTextures_WhenNotConnected_DoesNotThrow::test bf3539f68a0adc58c2166289ca1c75f6ff03906f71ffe2fb749f6990404b541a pending
|
||||||
#[test]
|
#[test]
|
||||||
fn avatar_manager_tests_request_own_avatar_textures_when_not_connec_65bf42d623a3() {
|
fn avatar_manager_tests_request_own_avatar_textures_when_not_connec_65bf42d623a3() {
|
||||||
@@ -1705,19 +1536,6 @@ fn constructor_null_argument_tests_avatar_manager_null_throws_cb5d9b5be3dd() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/ConstructorNullArgumentTests.cs::ConstructorNullArgumentTests.AssetManager_Null_Throws::test 4fa1be8b233dacf6a5955359f2197ff77ae85ffbf2c3c68fcd8cbe672c2c5f91 pending
|
|
||||||
#[test]
|
|
||||||
fn constructor_null_argument_tests_asset_manager_null_throws_3e13a196e349() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/ConstructorNullArgumentTests.cs::ConstructorNullArgumentTests.AssetManager_Null_Throws::test",
|
|
||||||
"LibreMetaverse.Tests/ConstructorNullArgumentTests.cs",
|
|
||||||
51,
|
|
||||||
"ConstructorNullArgumentTests.AssetManager_Null_Throws",
|
|
||||||
"[Test]",
|
|
||||||
"4fa1be8b233dacf6a5955359f2197ff77ae85ffbf2c3c68fcd8cbe672c2c5f91",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/CurrentOutfitFolderTests.cs::CurrentOutfitFolderTests.Constructor_WithNullClient_ThrowsArgumentNullException::test 243079029ec81f92ffbc587007a2421389963f72c7843786c5b9a8634a7ddca3 pending
|
// parity-case: LibreMetaverse.Tests/CurrentOutfitFolderTests.cs::CurrentOutfitFolderTests.Constructor_WithNullClient_ThrowsArgumentNullException::test 243079029ec81f92ffbc587007a2421389963f72c7843786c5b9a8634a7ddca3 pending
|
||||||
#[test]
|
#[test]
|
||||||
fn current_outfit_folder_tests_constructor_with_null_client_throws_b298d1390d84() {
|
fn current_outfit_folder_tests_constructor_with_null_client_throws_b298d1390d84() {
|
||||||
@@ -2498,292 +2316,6 @@ fn experience_preferences_message_tests_extract_experience_permissi_f45e68f52a85
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SetMaterialOverrideAsync_HappyPath_PostsBareArrayWithGltfJson::test 0c51b7b793111f5433e52057f26fa5a98d983e7230fefeb61a7b3408e97f28ee pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_material_override_cap_tests_set_material_override_async_hap_e367251af9b3() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SetMaterialOverrideAsync_HappyPath_PostsBareArrayWithGltfJson::test",
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs",
|
|
||||||
64,
|
|
||||||
"GLTFMaterialOverrideCapTests.SetMaterialOverrideAsync_HappyPath_PostsBareArrayWithGltfJson",
|
|
||||||
"[Test]",
|
|
||||||
"0c51b7b793111f5433e52057f26fa5a98d983e7230fefeb61a7b3408e97f28ee",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.ClearMaterialOverrideAsync_SendsEmptyGltfJson::test 8394d063ea71447d9ce2b76fd00be1d10967f9193e1eb909c5b9f2da56eec812 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_material_override_cap_tests_clear_material_override_async_s_da5ca65e020f() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.ClearMaterialOverrideAsync_SendsEmptyGltfJson::test",
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs",
|
|
||||||
86,
|
|
||||||
"GLTFMaterialOverrideCapTests.ClearMaterialOverrideAsync_SendsEmptyGltfJson",
|
|
||||||
"[Test]",
|
|
||||||
"8394d063ea71447d9ce2b76fd00be1d10967f9193e1eb909c5b9f2da56eec812",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.ApplyMaterialAsync_WithoutOverride_SendsAssetIdOnly::test 1db03ab6710ecf532644398d1fef5e82520e1206058d66fb15c8885fdc8f8363 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_material_override_cap_tests_apply_material_async_without_ov_737df851c5ec() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.ApplyMaterialAsync_WithoutOverride_SendsAssetIdOnly::test",
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs",
|
|
||||||
100,
|
|
||||||
"GLTFMaterialOverrideCapTests.ApplyMaterialAsync_WithoutOverride_SendsAssetIdOnly",
|
|
||||||
"[Test]",
|
|
||||||
"1db03ab6710ecf532644398d1fef5e82520e1206058d66fb15c8885fdc8f8363",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_MultipleEntries_SendsSingleArrayBody::test 621dca88e7f1c9e024563204ca05c3c8d9a03c4b5a7b31ec1c006abe6732b47b pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_material_override_cap_tests_send_material_updates_async_mul_cb58da19ec16() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_MultipleEntries_SendsSingleArrayBody::test",
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs",
|
|
||||||
115,
|
|
||||||
"GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_MultipleEntries_SendsSingleArrayBody",
|
|
||||||
"[Test]",
|
|
||||||
"621dca88e7f1c9e024563204ca05c3c8d9a03c4b5a7b31ec1c006abe6732b47b",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_ServerRejects_ReturnsFalse::test e9fbd95fff84695e2cb1a35943bda768f00cf9015b25e0ae1505dce4dde603a4 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_material_override_cap_tests_send_material_updates_async_ser_cb93a8d1a519() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_ServerRejects_ReturnsFalse::test",
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs",
|
|
||||||
132,
|
|
||||||
"GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_ServerRejects_ReturnsFalse",
|
|
||||||
"[Test]",
|
|
||||||
"e9fbd95fff84695e2cb1a35943bda768f00cf9015b25e0ae1505dce4dde603a4",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_NoCapability_ReturnsFalseWithoutRequest::test fdceb6bf865cb23386a6b82a9741f230e5c22b0ec6d37bc2ac8478f29292a49f pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_material_override_cap_tests_send_material_updates_async_no_33347d94423b() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs::GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_NoCapability_ReturnsFalseWithoutRequest::test",
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialOverrideCapTests.cs",
|
|
||||||
143,
|
|
||||||
"GLTFMaterialOverrideCapTests.SendMaterialUpdatesAsync_NoCapability_ReturnsFalseWithoutRequest",
|
|
||||||
"[Test]",
|
|
||||||
"fdceb6bf865cb23386a6b82a9741f230e5c22b0ec6d37bc2ac8478f29292a49f",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_HappyPath_PostsMetadataThenJsonAndReturnsNewAsset::test 5ac0e3c27fa6ebfddc9d7582aefb0684a676413948b055382c43b1b0b1cd7e7e pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_material_upload_tests_request_update_material_agent_invento_7a4bca39c53e() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_HappyPath_PostsMetadataThenJsonAndReturnsNewAsset::test",
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialUploadTests.cs",
|
|
||||||
68,
|
|
||||||
"GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_HappyPath_PostsMetadataThenJsonAndReturnsNewAsset",
|
|
||||||
"[Test]",
|
|
||||||
"5ac0e3c27fa6ebfddc9d7582aefb0684a676413948b055382c43b1b0b1cd7e7e",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialTaskInventoryAsync_HappyPath_PostsItemIdAndTaskId::test 7ac0e7d210b1aefa795e479f4da0d2dd4caae0b3bbe84ca124707c3ae005bbbd pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_material_upload_tests_request_update_material_task_inventor_fd8625ba00e7() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialTaskInventoryAsync_HappyPath_PostsItemIdAndTaskId::test",
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialUploadTests.cs",
|
|
||||||
92,
|
|
||||||
"GLTFMaterialUploadTests.RequestUpdateMaterialTaskInventoryAsync_HappyPath_PostsItemIdAndTaskId",
|
|
||||||
"[Test]",
|
|
||||||
"7ac0e7d210b1aefa795e479f4da0d2dd4caae0b3bbe84ca124707c3ae005bbbd",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_NoCapability_Throws::test 325269807d778264e571d1518ca9a2ca69a27ba67ad689e580f2636ab595f335 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_material_upload_tests_request_update_material_agent_invento_7791bc207ff4() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_NoCapability_Throws::test",
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialUploadTests.cs",
|
|
||||||
115,
|
|
||||||
"GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_NoCapability_Throws",
|
|
||||||
"[Test]",
|
|
||||||
"325269807d778264e571d1518ca9a2ca69a27ba67ad689e580f2636ab595f335",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_UploadedJsonRoundTripsMaterial::test fd059dfc8c9299c3b6583b3b47ba18ae9c92e3ad923f88634019b0ab9f34d401 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_material_upload_tests_request_update_material_agent_invento_90d28f18b77b() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialUploadTests.cs::GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_UploadedJsonRoundTripsMaterial::test",
|
|
||||||
"LibreMetaverse.Tests/GLTFMaterialUploadTests.cs",
|
|
||||||
131,
|
|
||||||
"GLTFMaterialUploadTests.RequestUpdateMaterialAgentInventoryAsync_UploadedJsonRoundTripsMaterial",
|
|
||||||
"[Test]",
|
|
||||||
"fd059dfc8c9299c3b6583b3b47ba18ae9c92e3ad923f88634019b0ab9f34d401",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesSceneGraph::test e20583d8de31f793d1dc49d1dfde89e1eb8c00186359e7df4184e862ec9ed649 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_load_gltf_parses_scene_graph_e9c9fd8316fc() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesSceneGraph::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
122,
|
|
||||||
"GltfDocumentTests.LoadGltf_ParsesSceneGraph",
|
|
||||||
"[Test]",
|
|
||||||
"e20583d8de31f793d1dc49d1dfde89e1eb8c00186359e7df4184e862ec9ed649",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesMeshAndPrimitive::test ef6a76308db1966423c7746f5414f3d0553587efc388bbedb962f38cc122ecaf pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_load_gltf_parses_mesh_and_primitive_f8dc198d0099() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesMeshAndPrimitive::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
136,
|
|
||||||
"GltfDocumentTests.LoadGltf_ParsesMeshAndPrimitive",
|
|
||||||
"[Test]",
|
|
||||||
"ef6a76308db1966423c7746f5414f3d0553587efc388bbedb962f38cc122ecaf",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesMaterial::test 0147b4d7102c5223f247f69fa4cf3daeb0aa6300ad46ef34d6a17163b694c13e pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_load_gltf_parses_material_eee0aa04552d() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.LoadGltf_ParsesMaterial::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
152,
|
|
||||||
"GltfDocumentTests.LoadGltf_ParsesMaterial",
|
|
||||||
"[Test]",
|
|
||||||
"0147b4d7102c5223f247f69fa4cf3daeb0aa6300ad46ef34d6a17163b694c13e",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetPositions_ReturnsCorrectTriangle::test c3d444122ab73794a011d5a5aafb0c2aa030975393f967e871dc88db200f5e96 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_get_positions_returns_correct_triangle_c21f69d55a5a() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetPositions_ReturnsCorrectTriangle::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
169,
|
|
||||||
"GltfDocumentTests.GetPositions_ReturnsCorrectTriangle",
|
|
||||||
"[Test]",
|
|
||||||
"c3d444122ab73794a011d5a5aafb0c2aa030975393f967e871dc88db200f5e96",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetIndices_ReturnsCorrectValues::test fa39e87a3dfee7258d9a95907a97cbb107f5add7d6a6f9d9800249bb67e2fc58 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_get_indices_returns_correct_values_71e7f84cfa34() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetIndices_ReturnsCorrectValues::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
184,
|
|
||||||
"GltfDocumentTests.GetIndices_ReturnsCorrectValues",
|
|
||||||
"[Test]",
|
|
||||||
"fa39e87a3dfee7258d9a95907a97cbb107f5add7d6a6f9d9800249bb67e2fc58",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetPositions_EmptyWhenNoAttribute::test 06c691911ee6933f1884f6540d69afafa1f272acfed827c628580438204d9b4b pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_get_positions_empty_when_no_attribute_818287f0a8a6() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetPositions_EmptyWhenNoAttribute::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
197,
|
|
||||||
"GltfDocumentTests.GetPositions_EmptyWhenNoAttribute",
|
|
||||||
"[Test]",
|
|
||||||
"06c691911ee6933f1884f6540d69afafa1f272acfed827c628580438204d9b4b",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetNormals_EmptyWhenNoAttribute::test e04480b0b9e23cb561cc55e744ebd85203c759f98ad69febeeb291919f0d91af pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_get_normals_empty_when_no_attribute_607e2e5cb4c1() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.GetNormals_EmptyWhenNoAttribute::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
205,
|
|
||||||
"GltfDocumentTests.GetNormals_EmptyWhenNoAttribute",
|
|
||||||
"[Test]",
|
|
||||||
"e04480b0b9e23cb561cc55e744ebd85203c759f98ad69febeeb291919f0d91af",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ToJson_RoundTrip_PreservesSceneGraph::test 41c385b7bde3f8e4f4ad98d4f1f737fc6ccc241c2613526fd745eb35430386b2 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_to_json_round_trip_preserves_scene_graph_5b5255fe0162() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ToJson_RoundTrip_PreservesSceneGraph::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
215,
|
|
||||||
"GltfDocumentTests.ToJson_RoundTrip_PreservesSceneGraph",
|
|
||||||
"[Test]",
|
|
||||||
"41c385b7bde3f8e4f4ad98d4f1f737fc6ccc241c2613526fd745eb35430386b2",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ToGlb_RoundTrip_PreservesGeometry::test 1e97fe2d1492ac195f6a4386329c76ad131ab99a41b8e03216b1bab8b48fae36 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_to_glb_round_trip_preserves_geometry_a710264726e8() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ToGlb_RoundTrip_PreservesGeometry::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
230,
|
|
||||||
"GltfDocumentTests.ToGlb_RoundTrip_PreservesGeometry",
|
|
||||||
"[Test]",
|
|
||||||
"1e97fe2d1492ac195f6a4386329c76ad131ab99a41b8e03216b1bab8b48fae36",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.Load_AutoDetectsGlbVsJson::test 6d07930be2302e504ef9ece3fef10f47b855d33ae6c8bff152e82df0beb2a474 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_load_auto_detects_glb_vs_json_71da4e3c882c() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.Load_AutoDetectsGlbVsJson::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
252,
|
|
||||||
"GltfDocumentTests.Load_AutoDetectsGlbVsJson",
|
|
||||||
"[Test]",
|
|
||||||
"6d07930be2302e504ef9ece3fef10f47b855d33ae6c8bff152e82df0beb2a474",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ParseNode_TrsDefaults::test 0f0fbe116d20276c2aee917b940bded9de277ed0b3e3b659844c5b3532755259 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_parse_node_trs_defaults_e08687704186() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ParseNode_TrsDefaults::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
268,
|
|
||||||
"GltfDocumentTests.ParseNode_TrsDefaults",
|
|
||||||
"[Test]",
|
|
||||||
"0f0fbe116d20276c2aee917b940bded9de277ed0b3e3b659844c5b3532755259",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ParseNode_ExplicitMatrix::test 197ba2ee3a66cbb7d927acea13ce9dc84e62af8a500d939957749039118755c8 pending
|
|
||||||
#[test]
|
|
||||||
fn gltf_document_tests_parse_node_explicit_matrix_7111222ea972() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs::GltfDocumentTests.ParseNode_ExplicitMatrix::test",
|
|
||||||
"LibreMetaverse.Tests/GltfDocumentTests.cs",
|
|
||||||
280,
|
|
||||||
"GltfDocumentTests.ParseNode_ExplicitMatrix",
|
|
||||||
"[Test]",
|
|
||||||
"197ba2ee3a66cbb7d927acea13ce9dc84e62af8a500d939957749039118755c8",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/InventoryAISClientTests.cs::InventoryAISClientTests.ParseLinksFromEmbedded_ObjectAsset_ResultsInAttachmentInventoryTypeAndParsesFields::test 3ae365ed34f12d036dcd44c94f8568d163cfeec2a58b4975975b77b418770131 pending
|
// parity-case: LibreMetaverse.Tests/InventoryAISClientTests.cs::InventoryAISClientTests.ParseLinksFromEmbedded_ObjectAsset_ResultsInAttachmentInventoryTypeAndParsesFields::test 3ae365ed34f12d036dcd44c94f8568d163cfeec2a58b4975975b77b418770131 pending
|
||||||
#[test]
|
#[test]
|
||||||
fn inventory_ais_client_tests_parse_links_from_embedded_object_asse_f1f1434e9b61() {
|
fn inventory_ais_client_tests_parse_links_from_embedded_object_asse_f1f1434e9b61() {
|
||||||
@@ -4383,58 +3915,6 @@ fn misclassified_link_regression_tests_inventory_store_not_contains_c6334b81470b
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_StandardRegion_Loads256x256::test c4e3a994baf06b0106a6614e9c3efbcc27e45ff1725f5470d2db6ded1fff6014 pending
|
|
||||||
#[test]
|
|
||||||
fn oar_file_terrain_tests_load_terrain_standard_region_loads256x256_d30f28505408() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_StandardRegion_Loads256x256::test",
|
|
||||||
"LibreMetaverse.Tests/OarFileTerrainTests.cs",
|
|
||||||
38,
|
|
||||||
"OarFileTerrainTests.LoadTerrain_StandardRegion_Loads256x256",
|
|
||||||
"[Test]",
|
|
||||||
"c4e3a994baf06b0106a6614e9c3efbcc27e45ff1725f5470d2db6ded1fff6014",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_Varregion_Loads512x512::test 4820338f10acbb4987e26992d7a7957be58ab6bc548674bf18943ef312962894 pending
|
|
||||||
#[test]
|
|
||||||
fn oar_file_terrain_tests_load_terrain_varregion_loads512x512_3d13691091d2() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_Varregion_Loads512x512::test",
|
|
||||||
"LibreMetaverse.Tests/OarFileTerrainTests.cs",
|
|
||||||
52,
|
|
||||||
"OarFileTerrainTests.LoadTerrain_Varregion_Loads512x512",
|
|
||||||
"[Test]",
|
|
||||||
"4820338f10acbb4987e26992d7a7957be58ab6bc548674bf18943ef312962894",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_WrongByteCount_FailsGracefully::test ff6fb4feb2773c93397d412d0ecf6aef1f3636e823dabb729a7a6cbe94d1513f pending
|
|
||||||
#[test]
|
|
||||||
fn oar_file_terrain_tests_load_terrain_wrong_byte_count_fails_grace_ec3513ac9df1() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_WrongByteCount_FailsGracefully::test",
|
|
||||||
"LibreMetaverse.Tests/OarFileTerrainTests.cs",
|
|
||||||
65,
|
|
||||||
"OarFileTerrainTests.LoadTerrain_WrongByteCount_FailsGracefully",
|
|
||||||
"[Test]",
|
|
||||||
"ff6fb4feb2773c93397d412d0ecf6aef1f3636e823dabb729a7a6cbe94d1513f",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_NonSquarePostCount_FailsGracefully::test 218754e53232cd10318668c70b94ae9d7d541d09598b0490082e023e76d6045f pending
|
|
||||||
#[test]
|
|
||||||
fn oar_file_terrain_tests_load_terrain_non_square_post_count_fails_eb432cef07ea() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/OarFileTerrainTests.cs::OarFileTerrainTests.LoadTerrain_NonSquarePostCount_FailsGracefully::test",
|
|
||||||
"LibreMetaverse.Tests/OarFileTerrainTests.cs",
|
|
||||||
76,
|
|
||||||
"OarFileTerrainTests.LoadTerrain_NonSquarePostCount_FailsGracefully",
|
|
||||||
"[Test]",
|
|
||||||
"218754e53232cd10318668c70b94ae9d7d541d09598b0490082e023e76d6045f",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/OfflineMessagesTests.cs::OfflineMessagesTests.RetrieveInstantMessagesAsync_BareArrayOfArraysResponse_RaisesInstantMessage::test d51f69e0fa1e1e59a5cedec7d60315d1f590848672a9f4f0c5e21d2abff5c372 pending
|
// parity-case: LibreMetaverse.Tests/OfflineMessagesTests.cs::OfflineMessagesTests.RetrieveInstantMessagesAsync_BareArrayOfArraysResponse_RaisesInstantMessage::test d51f69e0fa1e1e59a5cedec7d60315d1f590848672a9f4f0c5e21d2abff5c372 pending
|
||||||
#[test]
|
#[test]
|
||||||
fn offline_messages_tests_retrieve_instant_messages_async_bare_arra_8c068407e556() {
|
fn offline_messages_tests_retrieve_instant_messages_async_bare_arra_8c068407e556() {
|
||||||
@@ -12924,58 +12404,6 @@ fn request_task_inventory_cap_tests_get_task_inventory_async_no_cap_5a4facbe4c47
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_HappyPath_PostsMetadataThenImageAndReturnsTrue::test 2e02bd16ef1431c2ca82d7804dffc764be0175cff5daff8c38d0a61641439e06 pending
|
|
||||||
#[test]
|
|
||||||
fn send_postcard_tests_send_postcard_async_happy_path_posts_metadat_27d152f2a096() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_HappyPath_PostsMetadataThenImageAndReturnsTrue::test",
|
|
||||||
"LibreMetaverse.Tests/SendPostcardTests.cs",
|
|
||||||
68,
|
|
||||||
"SendPostcardTests.SendPostcardAsync_HappyPath_PostsMetadataThenImageAndReturnsTrue",
|
|
||||||
"[Test]",
|
|
||||||
"2e02bd16ef1431c2ca82d7804dffc764be0175cff5daff8c38d0a61641439e06",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_UploaderMissingFromResponse_ReturnsFalseWithoutSecondRequest::test 2f9498d57d7a512399f9b108765e6e8da8e4c937402f9671d580c66332630432 pending
|
|
||||||
#[test]
|
|
||||||
fn send_postcard_tests_send_postcard_async_uploader_missing_from_re_c7b08cf04805() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_UploaderMissingFromResponse_ReturnsFalseWithoutSecondRequest::test",
|
|
||||||
"LibreMetaverse.Tests/SendPostcardTests.cs",
|
|
||||||
100,
|
|
||||||
"SendPostcardTests.SendPostcardAsync_UploaderMissingFromResponse_ReturnsFalseWithoutSecondRequest",
|
|
||||||
"[Test]",
|
|
||||||
"2f9498d57d7a512399f9b108765e6e8da8e4c937402f9671d580c66332630432",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_UploadDoesNotComplete_ReturnsFalse::test 937b682b406506ec9fba9570852bbf8689450a11cbecb85979af97609b1794f9 pending
|
|
||||||
#[test]
|
|
||||||
fn send_postcard_tests_send_postcard_async_upload_does_not_complete_daf0dfa42f63() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_UploadDoesNotComplete_ReturnsFalse::test",
|
|
||||||
"LibreMetaverse.Tests/SendPostcardTests.cs",
|
|
||||||
112,
|
|
||||||
"SendPostcardTests.SendPostcardAsync_UploadDoesNotComplete_ReturnsFalse",
|
|
||||||
"[Test]",
|
|
||||||
"937b682b406506ec9fba9570852bbf8689450a11cbecb85979af97609b1794f9",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_NoCapability_ReturnsFalseWithoutRequest::test 8d3ef84e873096d9388bb7db3eaeeb79c661fd9951e338f71bbf3251ae6580e8 pending
|
|
||||||
#[test]
|
|
||||||
fn send_postcard_tests_send_postcard_async_no_capability_returns_fa_d740d1bf524a() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/SendPostcardTests.cs::SendPostcardTests.SendPostcardAsync_NoCapability_ReturnsFalseWithoutRequest::test",
|
|
||||||
"LibreMetaverse.Tests/SendPostcardTests.cs",
|
|
||||||
125,
|
|
||||||
"SendPostcardTests.SendPostcardAsync_NoCapability_ReturnsFalseWithoutRequest",
|
|
||||||
"[Test]",
|
|
||||||
"8d3ef84e873096d9388bb7db3eaeeb79c661fd9951e338f71bbf3251ae6580e8",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/SimConsoleTests.cs::SimConsoleTests.SendSimConsoleCommandAsync_IgnoresPostBody_UsesSimConsoleResponseEvent::test df6eb48241f71c34074be66869c9ae1d5980186583259568728261b5eedd7c48 pending
|
// parity-case: LibreMetaverse.Tests/SimConsoleTests.cs::SimConsoleTests.SendSimConsoleCommandAsync_IgnoresPostBody_UsesSimConsoleResponseEvent::test df6eb48241f71c34074be66869c9ae1d5980186583259568728261b5eedd7c48 pending
|
||||||
#[test]
|
#[test]
|
||||||
fn sim_console_tests_send_sim_console_command_async_ignores_post_bo_3b3a435018b5() {
|
fn sim_console_tests_send_sim_console_command_async_ignores_post_bo_3b3a435018b5() {
|
||||||
@@ -13470,84 +12898,6 @@ fn start_auction_tests_start_auction_does_not_throw_de88bae1b818() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_ParsesFourSlotsWithSomeEmpty::test 0b7f2b5a7a95c70f4ed97b9b028f3ec16f1cd427a9d4d1b133523bd331f6b9f2 pending
|
|
||||||
#[test]
|
|
||||||
fn terrain_material_override_tests_get_terrain_material_overrides_a_0893832c33e4() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_ParsesFourSlotsWithSomeEmpty::test",
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs",
|
|
||||||
64,
|
|
||||||
"TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_ParsesFourSlotsWithSomeEmpty",
|
|
||||||
"[Test]",
|
|
||||||
"0b7f2b5a7a95c70f4ed97b9b028f3ec16f1cd427a9d4d1b133523bd331f6b9f2",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_ServerReportsFailure_ReturnsNull::test c66b84662333288b7328822d1f9fa79450075d44a1178a9b0b661671072efe5b pending
|
|
||||||
#[test]
|
|
||||||
fn terrain_material_override_tests_get_terrain_material_overrides_a_38163aa2435b() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_ServerReportsFailure_ReturnsNull::test",
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs",
|
|
||||||
81,
|
|
||||||
"TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_ServerReportsFailure_ReturnsNull",
|
|
||||||
"[Test]",
|
|
||||||
"c66b84662333288b7328822d1f9fa79450075d44a1178a9b0b661671072efe5b",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_NoCapability_ReturnsNullWithoutRequest::test 677f80689e1b6a67893d100e1116805fb9f63c5b6ec33e64a4dc9a4cf24c1237 pending
|
|
||||||
#[test]
|
|
||||||
fn terrain_material_override_tests_get_terrain_material_overrides_a_e5357bdd0f3f() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_NoCapability_ReturnsNullWithoutRequest::test",
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs",
|
|
||||||
92,
|
|
||||||
"TerrainMaterialOverrideTests.GetTerrainMaterialOverridesAsync_NoCapability_ReturnsNullWithoutRequest",
|
|
||||||
"[Test]",
|
|
||||||
"677f80689e1b6a67893d100e1116805fb9f63c5b6ec33e64a4dc9a4cf24c1237",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_MixOfNullAndSet_PostsFourEntries::test a4ce031e565ca7eb1864064d299dbf0c7b715581ce330a57be9c3aa93987e67c pending
|
|
||||||
#[test]
|
|
||||||
fn terrain_material_override_tests_set_terrain_material_overrides_a_07edb519d189() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_MixOfNullAndSet_PostsFourEntries::test",
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs",
|
|
||||||
111,
|
|
||||||
"TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_MixOfNullAndSet_PostsFourEntries",
|
|
||||||
"[Test]",
|
|
||||||
"a4ce031e565ca7eb1864064d299dbf0c7b715581ce330a57be9c3aa93987e67c",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_WrongLength_Throws::test 836099a369b37555049b1c1ddfb9562c57cdef88381b7a79e8b80fe62b169a44 pending
|
|
||||||
#[test]
|
|
||||||
fn terrain_material_override_tests_set_terrain_material_overrides_a_d8aba797b9fa() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_WrongLength_Throws::test",
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs",
|
|
||||||
128,
|
|
||||||
"TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_WrongLength_Throws",
|
|
||||||
"[Test]",
|
|
||||||
"836099a369b37555049b1c1ddfb9562c57cdef88381b7a79e8b80fe62b169a44",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_NoCapability_ReturnsFalseWithoutRequest::test 37948cbc0240910d63782d88c0fb9f1d239215cea34a5aa84ac68a10d0555e87 pending
|
|
||||||
#[test]
|
|
||||||
fn terrain_material_override_tests_set_terrain_material_overrides_a_8c4f3c7893c2() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs::TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_NoCapability_ReturnsFalseWithoutRequest::test",
|
|
||||||
"LibreMetaverse.Tests/TerrainMaterialOverrideTests.cs",
|
|
||||||
135,
|
|
||||||
"TerrainMaterialOverrideTests.SetTerrainMaterialOverridesAsync_NoCapability_ReturnsFalseWithoutRequest",
|
|
||||||
"[Test]",
|
|
||||||
"37948cbc0240910d63782d88c0fb9f1d239215cea34a5aa84ac68a10d0555e87",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/TextureEntryTests.cs::TextureEntryTests.RoundTrip_HighFace_TextureID_IsPreserved::case:d3ad6116f2458248 5f215cd1c50fa8871967653b4667f848c14ff24a3b71906e51aac13c56de1f55 pending
|
// parity-case: LibreMetaverse.Tests/TextureEntryTests.cs::TextureEntryTests.RoundTrip_HighFace_TextureID_IsPreserved::case:d3ad6116f2458248 5f215cd1c50fa8871967653b4667f848c14ff24a3b71906e51aac13c56de1f55 pending
|
||||||
#[test]
|
#[test]
|
||||||
fn texture_entry_tests_round_trip_high_face_texture_id_is_preserved_c347d30187c6() {
|
fn texture_entry_tests_round_trip_high_face_texture_id_is_preserved_c347d30187c6() {
|
||||||
@@ -13678,84 +13028,6 @@ fn texture_entry_tests_round_trip_all_faces_texture_i_ds_all_preser_953d0ed895bf
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_AgentInventoryItem_SendsBareItemIdAndReturnsNewAsset::test 40ca874a37dade3bfbb391a2b4a75c684cfd7509b269286ccc14d747340d095d pending
|
|
||||||
#[test]
|
|
||||||
fn upload_thumbnail_tests_upload_thumbnail_async_agent_inventory_it_7853ea2668d6() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_AgentInventoryItem_SendsBareItemIdAndReturnsNewAsset::test",
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs",
|
|
||||||
73,
|
|
||||||
"UploadThumbnailTests.UploadThumbnailAsync_AgentInventoryItem_SendsBareItemIdAndReturnsNewAsset",
|
|
||||||
"[Test]",
|
|
||||||
"40ca874a37dade3bfbb391a2b4a75c684cfd7509b269286ccc14d747340d095d",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_TaskInventoryItem_SendsItemIdAndTaskId::test dae80f9a7ba6222a651165f779c123d8472f88a17490e69a1112acc3cec6d108 pending
|
|
||||||
#[test]
|
|
||||||
fn upload_thumbnail_tests_upload_thumbnail_async_task_inventory_ite_15374cb2fd4b() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_TaskInventoryItem_SendsItemIdAndTaskId::test",
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs",
|
|
||||||
92,
|
|
||||||
"UploadThumbnailTests.UploadThumbnailAsync_TaskInventoryItem_SendsItemIdAndTaskId",
|
|
||||||
"[Test]",
|
|
||||||
"dae80f9a7ba6222a651165f779c123d8472f88a17490e69a1112acc3cec6d108",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_KnownLocalFolder_SendsCategoryId::test 1ccca44bbead54fd5041c41fc6560478ba17f9e5d9bacff21096b254d2f526db pending
|
|
||||||
#[test]
|
|
||||||
fn upload_thumbnail_tests_upload_thumbnail_async_known_local_folder_9057eab58a2c() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_KnownLocalFolder_SendsCategoryId::test",
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs",
|
|
||||||
110,
|
|
||||||
"UploadThumbnailTests.UploadThumbnailAsync_KnownLocalFolder_SendsCategoryId",
|
|
||||||
"[Test]",
|
|
||||||
"1ccca44bbead54fd5041c41fc6560478ba17f9e5d9bacff21096b254d2f526db",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_NoCapability_ReturnsNullWithoutRequest::test 2bc1ad18b159c5d62a18d2208ed3cf3c88d3f666a0e0dad8730778cd22b59eda pending
|
|
||||||
#[test]
|
|
||||||
fn upload_thumbnail_tests_upload_thumbnail_async_no_capability_retu_58dfa7a20cf9() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_NoCapability_ReturnsNullWithoutRequest::test",
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs",
|
|
||||||
128,
|
|
||||||
"UploadThumbnailTests.UploadThumbnailAsync_NoCapability_ReturnsNullWithoutRequest",
|
|
||||||
"[Test]",
|
|
||||||
"2bc1ad18b159c5d62a18d2208ed3cf3c88d3f666a0e0dad8730778cd22b59eda",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_MetadataResponseMissingUploader_ReturnsNullWithoutSecondRequest::test 8db3eddf1204ad795e9d5ef15365f422f96191a8b4c24ef3393b03c10d92d662 pending
|
|
||||||
#[test]
|
|
||||||
fn upload_thumbnail_tests_upload_thumbnail_async_metadata_response_22f5087ae70e() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_MetadataResponseMissingUploader_ReturnsNullWithoutSecondRequest::test",
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs",
|
|
||||||
145,
|
|
||||||
"UploadThumbnailTests.UploadThumbnailAsync_MetadataResponseMissingUploader_ReturnsNullWithoutSecondRequest",
|
|
||||||
"[Test]",
|
|
||||||
"8db3eddf1204ad795e9d5ef15365f422f96191a8b4c24ef3393b03c10d92d662",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_UploadDoesNotComplete_ReturnsNull::test e870f6913e3f45676ce490069930427e6c625072fc1d6ebbf16f503be51df4ae pending
|
|
||||||
#[test]
|
|
||||||
fn upload_thumbnail_tests_upload_thumbnail_async_upload_does_not_co_912d32ae591d() {
|
|
||||||
pending(
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs::UploadThumbnailTests.UploadThumbnailAsync_UploadDoesNotComplete_ReturnsNull::test",
|
|
||||||
"LibreMetaverse.Tests/UploadThumbnailTests.cs",
|
|
||||||
156,
|
|
||||||
"UploadThumbnailTests.UploadThumbnailAsync_UploadDoesNotComplete_ReturnsNull",
|
|
||||||
"[Test]",
|
|
||||||
"e870f6913e3f45676ce490069930427e6c625072fc1d6ebbf16f503be51df4ae",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// parity-case: LibreMetaverse.Rendering.Tests/Avatar/AvatarBoneMathTests.cs::AvatarBoneMathTests.BuildBoneWorldMatrices_UnitScale_MatchesNaiveMatrixChain::test 32ea442e98ebfe42238424274aefa960d9bac9a5048c4c971b315b712f870291 pending
|
// parity-case: LibreMetaverse.Rendering.Tests/Avatar/AvatarBoneMathTests.cs::AvatarBoneMathTests.BuildBoneWorldMatrices_UnitScale_MatchesNaiveMatrixChain::test 32ea442e98ebfe42238424274aefa960d9bac9a5048c4c971b315b712f870291 pending
|
||||||
#[test]
|
#[test]
|
||||||
fn avatar_bone_math_tests_build_bone_world_matrices_unit_scale_matc_090b5e2b70fd() {
|
fn avatar_bone_math_tests_build_bone_world_matrices_unit_scale_matc_090b5e2b70fd() {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -171,6 +171,10 @@ MEMBER_RETURN_OVERRIDES = {
|
|||||||
"M:LibreMetaverse.Caps.Capabilities": "Vec<String>",
|
"M:LibreMetaverse.Caps.Capabilities": "Vec<String>",
|
||||||
}
|
}
|
||||||
MEMBER_SIGNATURE_OVERRIDES = {
|
MEMBER_SIGNATURE_OVERRIDES = {
|
||||||
|
"M:LibreMetaverse.AssetManager.#ctor(LibreMetaverse.GridClient)": (
|
||||||
|
"pub fn new(client: Option<libremetaverse::GridClient>) -> Result<Self, crate::Error>",
|
||||||
|
"optional_owned",
|
||||||
|
),
|
||||||
"M:LibreMetaverse.Helpers.ZeroDecode(System.Byte[],System.Int32,System.Byte[])": (
|
"M:LibreMetaverse.Helpers.ZeroDecode(System.Byte[],System.Int32,System.Byte[])": (
|
||||||
"pub fn zero_decode(src: Option<&[u8]>, srclen: i32, dest: Option<&mut [u8]>) "
|
"pub fn zero_decode(src: Option<&[u8]>, srclen: i32, dest: Option<&mut [u8]>) "
|
||||||
"-> Result<i32, crate::Error>",
|
"-> Result<i32, crate::Error>",
|
||||||
@@ -187,6 +191,18 @@ MEMBER_SIGNATURE_OVERRIDES = {
|
|||||||
"-> Result<(), crate::Error>",
|
"-> Result<(), crate::Error>",
|
||||||
"mutable_self,owned,mutable_borrow,mutable_borrow,optional_mutable_borrow",
|
"mutable_self,owned,mutable_borrow,mutable_borrow,optional_mutable_borrow",
|
||||||
),
|
),
|
||||||
|
"M:LibreMetaverse.TerrainManager.GetTerrainMaterialOverridesAsync(System.Threading.CancellationToken)": (
|
||||||
|
"pub async fn get_terrain_material_overrides(&self, cancellation_token: "
|
||||||
|
"Option<libremetaverse_types::compat::CancellationToken>) "
|
||||||
|
"-> Result<Option<Vec<Option<libremetaverse::assets::AssetMaterial>>>, crate::Error>",
|
||||||
|
"shared_self,optional_owned",
|
||||||
|
),
|
||||||
|
"M:LibreMetaverse.TerrainManager.SetTerrainMaterialOverridesAsync(LibreMetaverse.Assets.AssetMaterial[],System.Threading.CancellationToken)": (
|
||||||
|
"pub async fn set_terrain_material_overrides(&self, overrides: "
|
||||||
|
"Vec<Option<libremetaverse::assets::AssetMaterial>>, cancellation_token: "
|
||||||
|
"Option<libremetaverse_types::compat::CancellationToken>) -> Result<bool, crate::Error>",
|
||||||
|
"shared_self,owned,optional_owned",
|
||||||
|
),
|
||||||
}
|
}
|
||||||
TYPE_USAGE_OVERRIDES = {
|
TYPE_USAGE_OVERRIDES = {
|
||||||
"LibreMetaverse.DictionaryChangeCallback": (
|
"LibreMetaverse.DictionaryChangeCallback": (
|
||||||
@@ -580,6 +596,10 @@ def method_receiver(owner: dict, item: dict) -> tuple[str, str]:
|
|||||||
return "", "none"
|
return "", "none"
|
||||||
if item["name"] == "Deserialize":
|
if item["name"] == "Deserialize":
|
||||||
return "&mut self", "mutable_self"
|
return "&mut self", "mutable_self"
|
||||||
|
if owner["doc_id"] == "T:LibreMetaverse.Assets.AssetMaterial" and item["name"].startswith(
|
||||||
|
("Apply", "Decode", "Encode", "Set")
|
||||||
|
):
|
||||||
|
return "&mut self", "mutable_self"
|
||||||
if owner["doc_id"] == "T:LibreMetaverse.BitPack" and item["name"].startswith(("Pack", "Unpack")):
|
if owner["doc_id"] == "T:LibreMetaverse.BitPack" and item["name"].startswith(("Pack", "Unpack")):
|
||||||
return "&mut self", "mutable_self"
|
return "&mut self", "mutable_self"
|
||||||
if (
|
if (
|
||||||
|
|||||||
@@ -388,10 +388,14 @@ def extract_tests(upstream: Path) -> list[dict[str, object]]:
|
|||||||
return tests
|
return tests
|
||||||
|
|
||||||
|
|
||||||
|
def review_paths(root: Path) -> list[Path]:
|
||||||
|
review_roots = (root / "tests" / "compat" / "tests", root / "crates")
|
||||||
|
return sorted(path for review_root in review_roots for path in review_root.rglob("*.rs"))
|
||||||
|
|
||||||
|
|
||||||
def reviewed_tests(root: Path) -> dict[str, dict[str, object]]:
|
def reviewed_tests(root: Path) -> dict[str, dict[str, object]]:
|
||||||
reviews: dict[str, dict[str, object]] = {}
|
reviews: dict[str, dict[str, object]] = {}
|
||||||
tests_root = root / "tests" / "compat" / "tests"
|
for path in review_paths(root):
|
||||||
for path in sorted(tests_root.rglob("*.rs")):
|
|
||||||
if path.name == "generated_parity.rs":
|
if path.name == "generated_parity.rs":
|
||||||
continue
|
continue
|
||||||
text = path.read_text()
|
text = path.read_text()
|
||||||
@@ -532,7 +536,7 @@ def generate_tests(upstream: Path, output: Path, review_root: Path | None = None
|
|||||||
|
|
||||||
def scan_parity_markers(root: Path) -> dict[str, list[dict[str, object]]]:
|
def scan_parity_markers(root: Path) -> dict[str, list[dict[str, object]]]:
|
||||||
markers: defaultdict[str, list[dict[str, object]]] = defaultdict(list)
|
markers: defaultdict[str, list[dict[str, object]]] = defaultdict(list)
|
||||||
for path in sorted((root / "tests" / "compat" / "tests").rglob("*.rs")):
|
for path in review_paths(root):
|
||||||
text = path.read_text()
|
text = path.read_text()
|
||||||
for marker in PARITY_MARKER_RE.finditer(text):
|
for marker in PARITY_MARKER_RE.finditer(text):
|
||||||
next_marker = PARITY_MARKER_RE.search(text, marker.end())
|
next_marker = PARITY_MARKER_RE.search(text, marker.end())
|
||||||
|
|||||||
@@ -4,10 +4,33 @@ import unittest
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from generate_surface import check_test_parity, extract_tests, generate_tests, mask_csharp_comments
|
from generate_surface import (
|
||||||
|
check_test_parity,
|
||||||
|
extract_tests,
|
||||||
|
generate_tests,
|
||||||
|
mask_csharp_comments,
|
||||||
|
reviewed_tests,
|
||||||
|
scan_parity_markers,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ParityGenerationTests(unittest.TestCase):
|
class ParityGenerationTests(unittest.TestCase):
|
||||||
|
def test_reviewed_tests_include_owning_crate_unit_tests(self) -> None:
|
||||||
|
with tempfile.TemporaryDirectory() as temporary:
|
||||||
|
root = Path(temporary)
|
||||||
|
rust_file = root / "crates" / "example" / "src" / "internal_semantics.rs"
|
||||||
|
rust_file.parent.mkdir(parents=True)
|
||||||
|
case_id = "Example.Tests.cs::ExampleTests.InternalMember::test"
|
||||||
|
rust_file.write_text(
|
||||||
|
f"// parity-case: {case_id} {'a' * 64} translated\n"
|
||||||
|
"#[test]\nfn internal_member() {}\n"
|
||||||
|
)
|
||||||
|
|
||||||
|
review = reviewed_tests(root)[case_id]
|
||||||
|
self.assertEqual(review["rust_file"], "crates/example/src/internal_semantics.rs")
|
||||||
|
self.assertEqual(review["rust_test"], "internal_member")
|
||||||
|
self.assertEqual(scan_parity_markers(root)[case_id][0], review)
|
||||||
|
|
||||||
def test_comment_masking_preserves_offsets_and_ignores_fake_tests(self) -> None:
|
def test_comment_masking_preserves_offsets_and_ignores_fake_tests(self) -> None:
|
||||||
source = '''var url = "https://example.com/[Test]"; // [Test]\n/* [TestCase(1)] */\n[Test]\n'''
|
source = '''var url = "https://example.com/[Test]"; // [Test]\n/* [TestCase(1)] */\n[Test]\n'''
|
||||||
masked = mask_csharp_comments(source)
|
masked = mask_csharp_comments(source)
|
||||||
|
|||||||
Reference in New Issue
Block a user