Files
autocad-mcp-pro/tests/test_entity_edit.py
T
Umutcan EdizsalanandCursor 9ec6c4a989 style: apply ruff format across the repository
ruff format was never run repo-wide; CI now enforces 'ruff format --check', so normalize every module once. No behavior changes.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-23 15:14:51 +03:00

79 lines
3.3 KiB
Python

"""Tests for in-place editing: entity_edit_text and entity_edit_geometry.
These let a user re-label text or re-drive geometry without deleting and
recreating (which would lose the entity handle)."""
from __future__ import annotations
import math
import pytest
pytestmark = pytest.mark.asyncio
# ── entity_edit_text ────────────────────────────────────────────────────────
async def test_edit_text_changes_content_keeps_handle(backend):
t = await backend.entity_create_text("OLD LABEL", 0, 0, height=2.5, layer="TEXT")
updated = await backend.entity_edit_text(t.handle, text="NEW LABEL")
assert updated.handle == t.handle # handle preserved
assert updated.properties["text"] == "NEW LABEL"
async def test_edit_text_changes_height_and_rotation(backend):
t = await backend.entity_create_text("HELLO", 0, 0, height=2.5, layer="TEXT")
updated = await backend.entity_edit_text(t.handle, height=5.0, rotation=90.0)
assert math.isclose(updated.properties["height"], 5.0)
assert math.isclose(updated.properties["rotation"], 90.0)
# Content untouched when text is omitted.
assert updated.properties["text"] == "HELLO"
async def test_edit_mtext_content(backend):
m = await backend.entity_create_mtext("first draft", 0, 0, width=100, height=3, layer="TEXT")
updated = await backend.entity_edit_text(m.handle, text="final copy")
assert "final copy" in updated.properties["text"]
async def test_edit_text_rejects_non_text(backend):
c = await backend.entity_create_circle(0, 0, 10, layer="GEOMETRY")
with pytest.raises(RuntimeError):
await backend.entity_edit_text(c.handle, text="nope")
# ── entity_edit_geometry ────────────────────────────────────────────────────
async def test_edit_circle_radius_and_center(backend):
c = await backend.entity_create_circle(0, 0, 10, layer="GEOMETRY")
updated = await backend.entity_edit_geometry(c.handle, cx=5, cy=5, radius=20)
assert updated.handle == c.handle
assert math.isclose(updated.properties["radius"], 20.0)
center = updated.properties["center"]
assert math.isclose(center[0], 5.0) and math.isclose(center[1], 5.0)
async def test_edit_line_endpoints(backend):
ln = await backend.entity_create_line(0, 0, 10, 0, layer="GEOMETRY")
updated = await backend.entity_edit_geometry(ln.handle, x2=10, y2=10)
end = updated.properties["end"]
assert math.isclose(end[0], 10.0) and math.isclose(end[1], 10.0)
# Start unchanged.
start = updated.properties["start"]
assert math.isclose(start[0], 0.0) and math.isclose(start[1], 0.0)
async def test_edit_arc_angles(backend):
arc = await backend.entity_create_arc(0, 0, 10, 0, 90, layer="GEOMETRY")
updated = await backend.entity_edit_geometry(arc.handle, start_angle=10, end_angle=170)
assert math.isclose(updated.properties["start_angle"], 10.0)
assert math.isclose(updated.properties["end_angle"], 170.0)
async def test_edit_geometry_rejects_unsupported(backend):
poly = await backend.entity_create_polyline([[0, 0], [1, 1]], layer="GEOMETRY")
with pytest.raises(RuntimeError):
await backend.entity_edit_geometry(poly.handle, radius=5)