Adds production-grade engineering features and tools: 2D GD&T (feature control frames + datum features) via engineering/gdt.py, ISO‑129 dimension tolerance support (engineering/tolerances.py) and an ezdxf/COM plumbing for toleranced dims, a scalar drawing score + invalidity ratio (engineering/scoring.py) wired into drawing_finalize, in-place entity editors (entity_edit_text/entity_edit_geometry), and a friendly drawing_settings facade. Includes server tool wiring, COM/ezdxf backend implementations, datum-consistency critique, many unit tests, README/CLAUDE/CHANGELOG updates, and a version bump to 1.2.0. Also corrects COM backend capability label (entities_2d).
76 lines
2.5 KiB
Python
76 lines
2.5 KiB
Python
"""Tests for the drawing_settings facade — friendly read/change of AutoCAD
|
|
system variables (units, precision, scales, osnap, …)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
pytestmark = pytest.mark.asyncio
|
|
|
|
|
|
async def test_read_snapshot_returns_known_keys(backend):
|
|
snap = await backend.drawing_settings()
|
|
assert snap["ok"] is True
|
|
s = snap["settings"]
|
|
for key in ("units", "linear_precision", "ltscale", "dimscale", "osmode"):
|
|
assert key in s
|
|
|
|
|
|
async def test_set_and_read_back_units_by_name(backend):
|
|
res = await backend.drawing_settings({"units": "mm"})
|
|
assert res["ok"] is True
|
|
assert res["applied"]["units"] == "mm"
|
|
snap = await backend.drawing_settings()
|
|
assert snap["settings"]["units"]["name"] == "mm"
|
|
assert snap["settings"]["units"]["code"] == 4
|
|
|
|
|
|
async def test_set_units_cm_and_inch_codes(backend):
|
|
await backend.drawing_settings({"units": "cm"})
|
|
assert (await backend.drawing_settings())["settings"]["units"]["code"] == 5
|
|
await backend.drawing_settings({"units": "inch"})
|
|
assert (await backend.drawing_settings())["settings"]["units"]["code"] == 1
|
|
|
|
|
|
async def test_set_numeric_settings(backend):
|
|
res = await backend.drawing_settings({
|
|
"dimscale": 2.0, "linear_precision": 3, "ltscale": 0.5,
|
|
})
|
|
assert res["ok"] is True
|
|
snap = (await backend.drawing_settings())["settings"]
|
|
assert snap["dimscale"] == 2.0
|
|
assert snap["linear_precision"] == 3
|
|
assert snap["ltscale"] == 0.5
|
|
|
|
|
|
async def test_unknown_key_reports_error_without_failing_others(backend):
|
|
res = await backend.drawing_settings({"dimscale": 1.5, "bogus_key": 1})
|
|
assert res["applied"]["dimscale"] == 1.5
|
|
assert "bogus_key" in res["errors"]
|
|
assert res["ok"] is False
|
|
|
|
|
|
async def test_bad_unit_value_is_reported(backend):
|
|
res = await backend.drawing_settings({"units": "furlongs"})
|
|
assert "units" in res["errors"]
|
|
|
|
|
|
# ── server tool wiring ──────────────────────────────────────────────────────
|
|
|
|
class _FakeCtx:
|
|
def __init__(self, backend):
|
|
self.lifespan_context = {"backend": backend}
|
|
|
|
async def info(self, *a, **k):
|
|
pass
|
|
|
|
|
|
async def test_server_tool_reads_and_writes(backend):
|
|
import server
|
|
|
|
ctx = _FakeCtx(backend)
|
|
write = await server.drawing_settings(settings={"units": "mm", "dimscale": 1.0}, ctx=ctx)
|
|
assert write["ok"] is True
|
|
read = await server.drawing_settings(ctx=ctx)
|
|
assert read["settings"]["units"]["name"] == "mm"
|