Files
autocad-mcp-pro/tests/test_dimension_tolerances.py
Umutcan Edizsalan 712cf00c5c v1.2.0
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).
2026-07-07 11:03:08 +03:00

109 lines
2.9 KiB
Python

"""Tests for ISO 129 dimension tolerances (engineering/tolerances.py + the
ezdxf dimension_* override plumbing)."""
from __future__ import annotations
import pytest
from engineering.tolerances import build_dim_override
pytestmark = pytest.mark.asyncio
# ── pure: override builder ──────────────────────────────────────────────────
async def test_none_mode_is_empty():
override, text = build_dim_override(tol_mode="none")
assert override == {}
assert text is None
async def test_symmetric_sets_equal_tp_tm():
override, _ = build_dim_override(tol_upper=0.05, tol_mode="symmetric")
assert override["dimtol"] == 1
assert override["dimtp"] == 0.05
assert override["dimtm"] == 0.05
async def test_deviation_sets_distinct_tp_tm():
override, _ = build_dim_override(0.02, 0.01, "deviation")
assert override["dimtp"] == 0.02
assert override["dimtm"] == 0.01
assert override["dimtol"] == 1
async def test_limit_mode_sets_dimlim():
override, _ = build_dim_override(0.02, 0.01, "limit")
assert override["dimlim"] == 1
assert override["dimtol"] == 0
async def test_basic_mode_boxes_text():
override, _ = build_dim_override(tol_mode="basic")
assert override["dimgap"] < 0
async def test_text_override_passthrough():
_, text = build_dim_override(text_override="20 H7")
assert text == "20 H7"
async def test_bad_mode_and_missing_values_raise():
with pytest.raises(ValueError):
build_dim_override(tol_mode="wat")
with pytest.raises(ValueError):
build_dim_override(tol_mode="symmetric") # no tol_upper
with pytest.raises(ValueError):
build_dim_override(0.02, None, "deviation") # no tol_lower
# ── backend: toleranced dims are created without error ──────────────────────
async def test_linear_dim_with_symmetric_tolerance(backend):
await backend.drawing_apply_iso_layers("mech")
dim = await backend.dimension_linear(
0,
0,
100,
0,
50,
20,
layer="DIM",
tol_upper=0.05,
tol_mode="symmetric",
)
assert dim.handle
assert dim.type in ("DIMENSION", "DIMLINEAR")
async def test_diameter_dim_with_text_override(backend):
await backend.drawing_apply_iso_layers("mech")
c = await backend.entity_create_circle(0, 0, 10, layer="GEOMETRY")
assert c.handle
dim = await backend.dimension_diameter(
-10,
0,
10,
0,
layer="DIM",
text_override="<> H7",
)
assert dim.handle
async def test_radius_dim_with_deviation_tolerance(backend):
await backend.drawing_apply_iso_layers("mech")
dim = await backend.dimension_radius(
0,
0,
10,
0,
layer="DIM",
tol_upper=0.03,
tol_lower=0.01,
tol_mode="deviation",
)
assert dim.handle