This commit is contained in:
2025-09-13 10:38:28 +03:00
parent 7c40714d48
commit 7c041e2a26
45 changed files with 1936 additions and 2 deletions

129
run_tests.py Normal file
View File

@@ -0,0 +1,129 @@
#!/usr/bin/env python3
"""
Test runner that sets up Blender mocking before running pytest.
This ensures bpy is available when test modules are imported.
"""
import sys
import os
from unittest.mock import Mock
def setup_blender_mocks():
"""Set up comprehensive Blender module mocks"""
print("[Test Setup] Setting up Blender mocks...")
# Create main bpy mock
mock_bpy = Mock()
mock_bmesh = Mock()
# Create mock types with all necessary attributes
mock_types = Mock()
mock_types.Operator = Mock
mock_types.Panel = Mock
mock_types.PropertyGroup = Mock
mock_types.UIList = Mock
mock_types.Scene = Mock()
mock_types.NODE_MT_add = Mock()
mock_types.VIEW3D_MT_add = Mock()
mock_types.VIEW3D_MT_mesh_add = Mock()
mock_types.NODE_MT_node = Mock()
mock_types.IMAGE_MT_image = Mock()
# Create mock props
mock_props = Mock()
mock_props.StringProperty = Mock
mock_props.IntProperty = Mock
mock_props.FloatVectorProperty = Mock
mock_props.FloatProperty = Mock
mock_props.BoolProperty = Mock
mock_props.EnumProperty = Mock
mock_props.CollectionProperty = Mock
mock_props.PointerProperty = Mock
# Create mock utils
mock_utils = Mock()
mock_utils.register_class = Mock()
mock_utils.unregister_class = Mock()
# Create mock app
mock_app = Mock()
mock_app.handlers = Mock()
mock_app.handlers.load_post = []
mock_app.handlers.persistent = lambda f: f
# Create mock context and data
mock_context = Mock()
mock_context.window_manager = Mock()
mock_context.scene = Mock()
mock_data = Mock()
mock_images = Mock()
mock_data.images = mock_images
# Attach all attributes to main bpy mock
mock_bpy.types = mock_types
mock_bpy.props = mock_props
mock_bpy.utils = mock_utils
mock_bpy.app = mock_app
mock_bpy.context = mock_context
mock_bpy.data = mock_data
# Install mocks in sys.modules BEFORE any imports
sys.modules['bpy'] = mock_bpy
sys.modules['bmesh'] = mock_bmesh
sys.modules['bpy.types'] = mock_types
sys.modules['bpy.props'] = mock_props
sys.modules['bpy.utils'] = mock_utils
sys.modules['bpy.app'] = mock_app
sys.modules['bpy.context'] = mock_context
sys.modules['bpy.data'] = mock_data
print("[Test Setup] Blender mocks installed successfully")
return mock_bpy
def main():
"""Main test runner"""
print("[Test Runner] Starting Text Texture Generator test suite")
# Set up mocks before any imports
setup_blender_mocks()
# Add current directory to Python path
current_dir = os.path.dirname(os.path.abspath(__file__))
if current_dir not in sys.path:
sys.path.insert(0, current_dir)
# Import and run pytest
try:
import pytest
print("[Test Runner] Running pytest with comprehensive test suite...")
# Run pytest with verbose output (disable strict markers to avoid configuration issues)
pytest_args = [
'tests/',
'-v',
'--tb=short'
]
# Add any additional arguments passed to this script
if len(sys.argv) > 1:
pytest_args.extend(sys.argv[1:])
exit_code = pytest.main(pytest_args)
if exit_code == 0:
print("[Test Runner] ✅ All tests completed successfully!")
else:
print(f"[Test Runner] ❌ Tests failed with exit code: {exit_code}")
return exit_code
except Exception as e:
print(f"[Test Runner] ❌ Error running tests: {e}")
import traceback
traceback.print_exc()
return 1
if __name__ == "__main__":
exit_code = main()
sys.exit(exit_code)