Added typing casts to PSK import tests
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
import bpy
|
import bpy
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
from typing import cast as typing_cast
|
||||||
|
from bpy.types import Mesh, Armature
|
||||||
|
|
||||||
SUZANNE_FILEPATH = 'tests/data/Suzanne.psk'
|
SUZANNE_FILEPATH = 'tests/data/Suzanne.psk'
|
||||||
SARGE_FILEPATH = 'tests/data/CS_Sarge_S0_Skelmesh.pskx'
|
SARGE_FILEPATH = 'tests/data/CS_Sarge_S0_Skelmesh.pskx'
|
||||||
SLURP_MONSTER_AXE_FILEPATH = 'tests/data/Slurp_Monster_Axe_LOD0.psk'
|
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 armature_object is not None, "Armature object not found in the scene"
|
||||||
assert len(armature_object.children) == 1, "Armature object should have one child"
|
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"
|
assert len(armature_data.bones) == 1, "Armature should have one bone"
|
||||||
|
|
||||||
mesh_object = bpy.data.objects.get('Suzanne.001', None)
|
mesh_object = bpy.data.objects.get('Suzanne.001', None)
|
||||||
assert mesh_object is not None, "Mesh object not found in the scene"
|
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.vertices) == 507
|
||||||
assert len(mesh_data.polygons) == 968
|
assert len(mesh_data.polygons) == 968
|
||||||
@@ -50,11 +53,11 @@ def test_psk_import_armature_only():
|
|||||||
|
|
||||||
armature_object = bpy.data.objects.get('Suzanne', None)
|
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 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"
|
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"
|
assert len(armature_data.bones) == 1, "Armature should have one bone"
|
||||||
|
|
||||||
@@ -66,10 +69,10 @@ def test_psk_import_mesh_only():
|
|||||||
) == {'FINISHED'}
|
) == {'FINISHED'}
|
||||||
|
|
||||||
mesh_object = bpy.data.objects.get('Suzanne', None)
|
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 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.vertices) == 507
|
||||||
assert len(mesh_data.polygons) == 968
|
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 is not None, "Armature object not found in the scene"
|
||||||
assert armature_object.type == 'ARMATURE', "Armature object type should be ARMATURE"
|
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 armature_data is not None, "Armature data not found in the scene"
|
||||||
assert len(armature_data.bones) == 1, "Armature should have one bone"
|
assert len(armature_data.bones) == 1, "Armature should have one bone"
|
||||||
assert 'ROOT' in armature_data.bones, "Armature should have a bone named 'ROOT'"
|
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 is not None, "Mesh object not found in the scene"
|
||||||
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
|
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 is not None, "Mesh data not found in the scene"
|
||||||
assert mesh_data.has_custom_normals, "Mesh should have custom normals"
|
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 is not None, "Mesh object not found in the scene"
|
||||||
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
|
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 is not None, "Mesh data not found in the scene"
|
||||||
assert not mesh_data.has_custom_normals, "Mesh should not have custom normals"
|
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 is not None, "Mesh object not found in the scene"
|
||||||
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
|
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 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 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'"
|
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 is not None, "Mesh object not found in the scene"
|
||||||
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
|
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 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 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'"
|
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 is not None, "Mesh object not found in the scene"
|
||||||
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
|
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 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"
|
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 is not None, "Mesh object not found in the scene"
|
||||||
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
|
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 is not None, "Mesh data not found in the scene"
|
||||||
assert len(mesh_data.uv_layers) == 2, "Mesh should have two UV layers"
|
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 is not None, "Mesh object not found in the scene"
|
||||||
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
|
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 is not None, "Mesh data not found in the scene"
|
||||||
assert len(mesh_data.materials) == 4, "Mesh should have four materials"
|
assert len(mesh_data.materials) == 4, "Mesh should have four materials"
|
||||||
@@ -248,6 +251,7 @@ def test_psk_import_materials():
|
|||||||
'CS_Sarge_S0_MI'
|
'CS_Sarge_S0_MI'
|
||||||
)
|
)
|
||||||
for i, material in enumerate(mesh_data.materials):
|
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]}"
|
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)
|
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 is not None, "Mesh object not found in the scene"
|
||||||
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
|
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 = (
|
shape_key_names = (
|
||||||
'MORPH_BASE',
|
'MORPH_BASE',
|
||||||
@@ -270,7 +276,7 @@ def test_psk_import_shape_keys():
|
|||||||
'Blob02',
|
'Blob02',
|
||||||
'Blob01',
|
'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"
|
assert len(shape_keys) == 6, "Mesh object should have 6 shape keys"
|
||||||
for i, shape_key in enumerate(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"
|
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)
|
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 is not None, "Mesh object not found in the scene"
|
||||||
assert mesh_object.type == 'MESH', "Mesh object type should be MESH"
|
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():
|
def test_psk_import_with_invalid_faces():
|
||||||
|
|||||||
Reference in New Issue
Block a user