cadforge / tests /test_executor.py
eventhorizon28's picture
Upload folder using huggingface_hub
7c72eb2 verified
import time
import pytest
from server.executor import execute_cadquery_code
class TestExecuteValidCode:
def test_flat_plate_executes(self, flat_plate_code):
result = execute_cadquery_code(flat_plate_code, timeout=15.0)
assert result["success"] is True
assert result["error"] is None
assert result["properties"] is not None
def test_flat_plate_properties(self, flat_plate_code):
result = execute_cadquery_code(flat_plate_code, timeout=15.0)
props = result["properties"]
assert props["is_valid"] is True
assert props["volume_mm3"] > 0
assert abs(props["volume_mm3"] - 16000.0) < 1.0
assert props["face_count"] == 6
assert props["dominant_face_type"] == "PLANE"
def test_flat_plate_bbox(self, flat_plate_code):
result = execute_cadquery_code(flat_plate_code, timeout=15.0)
props = result["properties"]
assert abs(props["bbox_x_mm"] - 80.0) < 0.01
assert abs(props["bbox_y_mm"] - 40.0) < 0.01
assert abs(props["bbox_z_mm"] - 5.0) < 0.01
def test_box_with_hole_executes(self, box_with_hole_code):
result = execute_cadquery_code(box_with_hole_code, timeout=15.0)
assert result["success"] is True
props = result["properties"]
assert props["is_valid"] is True
assert props["volume_mm3"] > 0
assert props["face_count"] > 6
def test_box_with_hole_has_cylinder_face(self, box_with_hole_code):
result = execute_cadquery_code(box_with_hole_code, timeout=15.0)
props = result["properties"]
assert "CYLINDER" in props["face_type_counts"]
def test_euler_characteristic(self, flat_plate_code):
result = execute_cadquery_code(flat_plate_code, timeout=15.0)
props = result["properties"]
assert props["euler_characteristic"] == 2
def test_box_with_hole_euler(self, box_with_hole_code):
result = execute_cadquery_code(box_with_hole_code, timeout=15.0)
props = result["properties"]
assert props["euler_characteristic"] == 2
class TestExecuteInvalidCode:
def test_syntax_error(self, invalid_code):
result = execute_cadquery_code(invalid_code, timeout=15.0)
assert result["success"] is False
assert result["error"] is not None
def test_no_result_variable(self, no_result_code):
result = execute_cadquery_code(no_result_code, timeout=15.0)
assert result["success"] is False
assert "result" in result["error"].lower()
def test_empty_code(self):
result = execute_cadquery_code("", timeout=15.0)
assert result["success"] is False
def test_runtime_error(self):
code = "import cadquery as cq\nresult = cq.Workplane('XY').box(0, 0, 0)"
result = execute_cadquery_code(code, timeout=15.0)
if result["success"]:
assert result["properties"]["volume_mm3"] == 0
class TestExecuteTimeout:
def test_timeout_returns_error(self, timeout_code):
result = execute_cadquery_code(timeout_code, timeout=2.0)
assert result["success"] is False
assert "timed out" in result["error"].lower() or "timeout" in result["error"].lower()