Added typing casts to PSK import tests

This commit is contained in:
Colin Basnett
2025-11-27 13:45:32 -08:00
parent d7bc8fd080
commit 485d46e075

View File

@@ -1,6 +1,9 @@
import bpy
import pytest
from typing import cast as typing_cast
from bpy.types import Mesh, Armature
SUZANNE_FILEPATH = 'tests/data/Suzanne.psk'
SARGE_FILEPATH = 'tests/data/CS_Sarge_S0_Skelmesh.pskx'
SLURP_MONSTER_AXE_FILEPATH = 'tests/data/Slurp_Monster_Axe_LOD0.psk'
@@ -29,14 +32,14 @@ def test_psk_import_all():
assert armature_object is not None, "Armature object not found in the scene"
assert len(armature_object.children) == 1, "Armature object should have one child"
armature_data = armature_object.data
armature_data = typing_cast(Armature, armature_object.data)
assert len(armature_data.bones) == 1, "Armature should have one bone"
mesh_object = bpy.data.objects.get('Suzanne.001', None)
assert mesh_object is not None, "Mesh object not found in the scene"
mesh_data = mesh_object.data
mesh_data = typing_cast(Mesh, mesh_object.data)
assert len(mesh_data.vertices) == 507
assert len(mesh_data.polygons) == 968
@@ -50,11 +53,11 @@ def test_psk_import_armature_only():
armature_object = bpy.data.objects.get('Suzanne', None)
assert armature_object.type == 'ARMATURE', "Armature object type should be ARMATURE"
assert armature_object is not None, "Armature object not found in the scene"
assert armature_object.type == 'ARMATURE', "Armature object type should be ARMATURE"
assert len(armature_object.children) == 0, "Armature object should have no children"
armature_data = armature_object.data
armature_data = typing_cast(Armature, armature_object.data)
assert len(armature_data.bones) == 1, "Armature should have one bone"
@@ -66,10 +69,10 @@ def test_psk_import_mesh_only():
) == {'FINISHED'}
mesh_object = bpy.data.objects.get('Suzanne', None)
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
assert mesh_object is not None, "Mesh object not found in the scene"
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
mesh_data = mesh_object.data
mesh_data = typing_cast(Mesh, mesh_object.data)
assert len(mesh_data.vertices) == 507
assert len(mesh_data.polygons) == 968
@@ -105,7 +108,7 @@ def test_psk_import_bone_length():
assert armature_object is not None, "Armature object not found in the scene"
assert armature_object.type == 'ARMATURE', "Armature object type should be ARMATURE"
armature_data = armature_object.data
armature_data = typing_cast(Armature, armature_object.data)
assert armature_data is not None, "Armature data not found in the scene"
assert len(armature_data.bones) == 1, "Armature should have one bone"
assert 'ROOT' in armature_data.bones, "Armature should have a bone named 'ROOT'"
@@ -126,7 +129,7 @@ def test_psk_import_with_vertex_normals():
assert mesh_object is not None, "Mesh object not found in the scene"
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
mesh_data = mesh_object.data
mesh_data = typing_cast(Mesh, mesh_object.data)
assert mesh_data is not None, "Mesh data not found in the scene"
assert mesh_data.has_custom_normals, "Mesh should have custom normals"
@@ -142,7 +145,7 @@ def test_psk_import_without_vertex_normals():
assert mesh_object is not None, "Mesh object not found in the scene"
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
mesh_data = mesh_object.data
mesh_data = typing_cast(Mesh, mesh_object.data)
assert mesh_data is not None, "Mesh data not found in the scene"
assert not mesh_data.has_custom_normals, "Mesh should not have custom normals"
@@ -159,7 +162,7 @@ def test_psk_import_with_vertex_colors_srgba():
assert mesh_object is not None, "Mesh object not found in the scene"
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
mesh_data = mesh_object.data
mesh_data = typing_cast(Mesh, mesh_object.data)
assert mesh_data is not None, "Mesh data not found in the scene"
assert len(mesh_data.color_attributes) == 1, "Mesh should have one vertex color layer"
assert mesh_data.color_attributes[0].name == 'VERTEXCOLOR', "Vertex color layer should be named 'VERTEXCOLOR'"
@@ -178,7 +181,7 @@ def test_psk_import_vertex_colors_linear():
assert mesh_object is not None, "Mesh object not found in the scene"
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
mesh_data = mesh_object.data
mesh_data = typing_cast(Mesh, mesh_object.data)
assert mesh_data is not None, "Mesh data not found in the scene"
assert len(mesh_data.color_attributes) == 1, "Mesh should have one vertex color layer"
assert mesh_data.color_attributes[0].name == 'VERTEXCOLOR', "Vertex color layer should be named 'VERTEXCOLOR'"
@@ -196,7 +199,7 @@ def test_psk_import_without_vertex_colors():
assert mesh_object is not None, "Mesh object not found in the scene"
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
mesh_data = mesh_object.data
mesh_data = typing_cast(Mesh, mesh_object.data)
assert mesh_data is not None, "Mesh data not found in the scene"
assert len(mesh_data.color_attributes) == 0, "Mesh should not have any vertex color layers"
@@ -213,7 +216,7 @@ def test_psk_import_extra_uvs():
assert mesh_object is not None, "Mesh object not found in the scene"
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
mesh_data = mesh_object.data
mesh_data = typing_cast(Mesh, mesh_object.data)
assert mesh_data is not None, "Mesh data not found in the scene"
assert len(mesh_data.uv_layers) == 2, "Mesh should have two UV layers"
@@ -237,7 +240,7 @@ def test_psk_import_materials():
assert mesh_object is not None, "Mesh object not found in the scene"
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
mesh_data = mesh_object.data
mesh_data = typing_cast(Mesh, mesh_object.data)
assert mesh_data is not None, "Mesh data not found in the scene"
assert len(mesh_data.materials) == 4, "Mesh should have four materials"
@@ -248,6 +251,7 @@ def test_psk_import_materials():
'CS_Sarge_S0_MI'
)
for i, material in enumerate(mesh_data.materials):
assert material is not None, f"Material {i} should not be None"
assert material.name == material_names[i], f"Material {i} name should be {material_names[i]}"
@@ -260,7 +264,9 @@ def test_psk_import_shape_keys():
mesh_object = bpy.data.objects.get('Slurp_Monster_Axe_LOD0', None)
assert mesh_object is not None, "Mesh object not found in the scene"
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
assert mesh_object.data.shape_keys is not None, "Mesh object should have shape keys"
mesh_data = typing_cast(Mesh, mesh_object.data)
assert mesh_data is not None, "Mesh data should not be None"
assert mesh_data.shape_keys is not None, "Mesh object should have shape keys"
shape_key_names = (
'MORPH_BASE',
@@ -270,7 +276,7 @@ def test_psk_import_shape_keys():
'Blob02',
'Blob01',
)
shape_keys = mesh_object.data.shape_keys.key_blocks
shape_keys = mesh_data.shape_keys.key_blocks
assert len(shape_keys) == 6, "Mesh object should have 6 shape keys"
for i, shape_key in enumerate(shape_keys):
assert shape_key.value == 0.0, f"Shape key {i} should have a value of 0.0"
@@ -286,7 +292,10 @@ def test_psk_import_without_shape_keys():
mesh_object = bpy.data.objects.get('Slurp_Monster_Axe_LOD0', None)
assert mesh_object is not None, "Mesh object not found in the scene"
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
assert mesh_object.data.shape_keys is None, "Mesh object should not have shape keys"
mesh_data = typing_cast(Mesh, mesh_object.data)
assert mesh_data is not None, "Mesh data should not be None"
assert mesh_data.shape_keys is None, "Mesh object should not have shape keys"
def test_psk_import_with_invalid_faces():