Files
Aislo/resources/tester/test_381_3_routeedit_node_pick.py
T
eomsangdonandClaude Opus 5.5 92e5157890 fix(453 B05 평면 편집): 노드 가운데만 노드 우선 · 손잡이 끌기 측점 맞춤 · 막힌 걸음 놓음 되돌림 · 스냅만 바꾼 초안
- 433-14 ③ · 433-21 ③ 누름 · 맴돔 · 커서 한 판정(pressWinner) — 노드 가운데 6 px = 노드 · 밖 = 마커 · 노드 · 손잡이 중 가까운 것
- 433-21 ① 손잡이 끌기 = 노드 갈래와 같게 — 맞추기 전 자리에서 셈 · 미리보기 맞춤 · 측점 밖이 늘면 그 걸음 되돌림
- 433-14 ① 막힌 걸음만 하고 놓으면 미리보기 맞춤을 누르기 전 자리로
- 433-14 ② 사진첩 다리도 스냅 · 분석 지형 바뀜을 봄 — 노선이 처음으로 돌아가도 초안
- 433-1 test_365 ⑧ 이름 = 노선 한 걸음 + 계획고 맞춤
- 시험 test_453_plan_pick_draft 새로 · 390_5 손잡이 훑기 · 381_3 · 399 · 409 · 430 배선 글 맞춤

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-18 21:33:24 +09:00

67 lines
2.9 KiB
Python

"""381-3 B05 평면 교각점(요구 241-14) — 크기 · 그리는 차례 · 맴돔 강조 · 집기 한 길.
겹침 셈(`pickAtScreen`)은 test_b05_routeedit_pick 이 돌려 봄 — 여기는 배선만.
"""
from pathlib import Path
B05 = Path(__file__).resolve().parents[2] / "B05_Profile"
def _read(name: str) -> str:
return (B05 / name).read_text(encoding="utf-8")
def test_노드_크기_문턱():
assert "const NODE_R = 6;" in _read("B05_Profile_UI_RouteEdit_Render.ts")
pointer = _read("B05_Profile_UI_RouteEdit_Pointer.ts")
assert "const NODE_HIT_PX = 12;" in pointer and "const NODE_CORE_PX = 6;" in pointer
def test_노드는_라벨_뒤_맨_위_회전_안():
render = _read("B05_Profile_UI_RouteEdit_Render.ts")
scene = render[render.index("export function drawRouteEditScene(") :]
scene = scene[: scene.index("context.restore(); // 회전 끝")]
labels = scene.index("drawContourLabels(context, scene, band, style);")
for later in ("scene.planned.forEach(", "drawPickedCurve(", "drawPickHover("):
assert labels < scene.index(later), later
for earlier in ("drawStationMarks(", "scene.overStations?.(", "drawMeasureMarks("):
assert scene.index(earlier) < labels, earlier
def test_곡선_네모는_예상노선_뒤_노선_앞():
"""414-2 — 모든 곡선 BC · EC 네모 = 예상노선 뒤 · 노선 앞(노선이 네모 위를 지나감)."""
render = _read("B05_Profile_UI_RouteEdit_Render.ts")
scene = render[render.index("export function drawRouteEditScene(") :]
expected = scene.index("scene.expected,")
squares = scene.index("scene.curveInfo.forEach(")
route = scene.index("strokePolyline(", squares)
assert expected < squares < route
assert scene[route:].split(",")[2].strip() == "line"
def test_집기_맴돔_한_함수():
pointer = _read("B05_Profile_UI_RouteEdit_Pointer.ts")
assert "pickAtScreen(" in pointer
down = pointer[pointer.index('addEventListener("pointerdown"') :]
down = down[: down.index('addEventListener("pointermove"')]
assert "hover(null);" in down and "const pick = choice.pick;" in down # chooseAt 안 pickAt(433)
assert "nodeAt(px, py)" not in down and "stationAtScreen(" not in down
move = pointer[pointer.index('addEventListener("pointermove"') :]
move = move[: move.index("const endDrag")]
# 끄는 동안은 앞에서 돌아감 — 맴돔은 끌기 갈래 뒤
assert move.index("if (dragNode >= 0)") < move.index("chooseAt(px, py)")
assert "hover(over);" in move
assert 'addEventListener("pointerleave"' in pointer
def test_맴돔_그림():
hover = _read("B05_Profile_UI_RouteEdit_Hover.ts")
assert "pickHover(context.canvas)" in hover
assert (
'"node" in hover' in hover
and "drawStationNormal(context, scene, line, hover.chainage)" in hover
)
# 391-1 맴돔 = 고름 한 함수 · 좌우 20 m 고정
assert "const STATION_NORMAL_HALF_M = 20;" in hover