121 lines
3.7 KiB
Python
121 lines
3.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
Tests for CodeGenerator class.
|
|
Migrated from unittest/TestBase to pytest.
|
|
"""
|
|
import pytest
|
|
import tempfile
|
|
import shutil
|
|
from pathlib import Path
|
|
from unittest.mock import Mock, patch, MagicMock
|
|
|
|
from mosaicode.control.codegenerator import CodeGenerator
|
|
|
|
@pytest.fixture
|
|
def temp_dir():
|
|
"""Create temporary directory for tests."""
|
|
test_dir = Path(tempfile.mkdtemp(prefix="mosaicode_test_"))
|
|
yield test_dir
|
|
if test_dir.exists():
|
|
shutil.rmtree(test_dir)
|
|
|
|
@pytest.fixture
|
|
def diagram():
|
|
"""Create a basic diagram for testing."""
|
|
from mosaicode.model.diagrammodel import DiagramModel
|
|
return DiagramModel()
|
|
|
|
@pytest.fixture
|
|
def code_generator(diagram):
|
|
"""Create a CodeGenerator instance."""
|
|
return CodeGenerator(diagram)
|
|
|
|
@pytest.fixture
|
|
def block():
|
|
"""Create a basic block for testing."""
|
|
from mosaicode.model.blockmodel import BlockModel
|
|
return BlockModel()
|
|
|
|
@pytest.fixture
|
|
def port():
|
|
"""Create a basic port for testing."""
|
|
from mosaicode.model.port import Port
|
|
return Port()
|
|
|
|
@pytest.fixture
|
|
def connection():
|
|
"""Create a basic connection for testing."""
|
|
from mosaicode.model.connectionmodel import ConnectionModel
|
|
from mosaicode.model.blockmodel import BlockModel
|
|
from mosaicode.model.port import Port
|
|
|
|
# Create a basic connection with required parameters
|
|
block1 = BlockModel()
|
|
block2 = BlockModel()
|
|
port1 = Port()
|
|
port2 = Port()
|
|
|
|
connection = ConnectionModel(diagram=None, output=block1, output_port=port1, input=block2, input_port=port2)
|
|
return connection
|
|
|
|
def create_diagram_with_blocks(diagram, block, connection):
|
|
"""Create a diagram with test blocks."""
|
|
from mosaicode.model.blockmodel import BlockModel
|
|
|
|
# Add test blocks
|
|
block1 = block
|
|
block1.id = 1
|
|
block1.type = "test.block1"
|
|
block1.label = "Block 1"
|
|
block1.codes = {"function": "print('Hello from block 1')"}
|
|
|
|
block2 = BlockModel()
|
|
block2.id = 2
|
|
block2.type = "test.block2"
|
|
block2.label = "Block 2"
|
|
block2.codes = {"function": "print('Hello from block 2')"}
|
|
|
|
diagram.blocks = {"1": block1, "2": block2}
|
|
return diagram
|
|
|
|
def test_code_generator_initialization(code_generator, diagram):
|
|
"""Test CodeGenerator initialization."""
|
|
assert code_generator is not None
|
|
assert code_generator._CodeGenerator__diagram == diagram
|
|
assert code_generator._CodeGenerator__block_list == []
|
|
assert code_generator._CodeGenerator__connections == []
|
|
assert code_generator._CodeGenerator__codes == {}
|
|
|
|
def test_generate_code_integration(diagram, block, connection):
|
|
"""Test complete code generation integration."""
|
|
diagram = create_diagram_with_blocks(diagram, block, connection)
|
|
code_generator = CodeGenerator(diagram)
|
|
|
|
# Test complete code generation
|
|
result = code_generator.generate_code()
|
|
assert isinstance(result, dict)
|
|
|
|
def test_generate_code_empty_diagram(diagram):
|
|
"""Test code generation with empty diagram."""
|
|
empty_diagram = diagram
|
|
empty_diagram.blocks = {}
|
|
empty_diagram.connectors = []
|
|
|
|
code_generator = CodeGenerator(empty_diagram)
|
|
result = code_generator.generate_code()
|
|
assert isinstance(result, dict)
|
|
|
|
def test_generate_code_with_errors(diagram, block, connection):
|
|
"""Test code generation error handling."""
|
|
diagram = create_diagram_with_blocks(diagram, block, connection)
|
|
|
|
# Create block with invalid code
|
|
block = diagram.blocks["1"]
|
|
block.codes = {"function": "$invalid_property$"}
|
|
|
|
code_generator = CodeGenerator(diagram)
|
|
|
|
# Should not raise exception, should handle gracefully
|
|
result = code_generator.generate_code()
|
|
assert isinstance(result, dict)
|