129 lines
3.7 KiB
Python
129 lines
3.7 KiB
Python
#!/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) |