Files
Aislo/resources/tester/test_500_1_curve_keeps_pick.py
T

81 lines
3.5 KiB
Python

"""500-1 B05 평면 — 곡선(교각점 · 손잡이 · 호) 누름 = 측점 고름 유지 · 풀림 = 오른쪽 판도 비움 · 임시 횡단 창 단추 = 제목 줄 · 제목 줄 끌기.
./venv/Scripts/python.exe -m pytest resources/tester/test_500_1_curve_keeps_pick.py -q
"""
from __future__ import annotations
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
def _read(*parts: str) -> str:
return ROOT.joinpath(*parts).read_text(encoding="utf-8")
def _down() -> str:
"""평면 누름 — 마커 갈래 뒤 ~ 교각점 갈래 앞."""
pointer = _read("B05_Profile", "B05_Profile_UI_RouteEdit_Pointer.ts")
start = pointer.index("if (choice.mark && marks.press(px, py)) {")
return pointer[start : pointer.index("if (hitNode >= 0) {", start)]
# 누름별 — 고름 유지(풂 건너뜀) 조건 한 줄씩
KEEP = {
"교각점": '(!!pick && "node" in pick)',
"손잡이": "choice.handle !== null",
"호(눈금 아님)": '(!(pick && "chainage" in pick) && arcAtScreen(state.curveInfo, toScreen, px, py) >= 0)',
}
def test_곡선_누름은_고름_유지() -> None:
down = _down()
for name, cond in KEEP.items():
assert cond in down, name
assert "if (!onCurve) marks.deselect();" in down # 그 밖(빈 땅 · 등고선 · 눈금) = 풂
assert down.count("marks.deselect()") == 1 # 무조건 풂 걷힘
def test_차례_마커_다음_교각점_앞() -> None:
down = _down()
assert down.index("canvas.setPointerCapture(event.pointerId);") < down.index("const onCurve")
assert down.index("const onCurve") < down.index("if (!onCurve) marks.deselect();")
def test_풀림은_오른쪽_판도_비움() -> None:
cross = _read("B05_Profile", "B05_Profile_UI_RouteEdit_Cross.ts")
line = "if (from !== PLAN_PICK_FROM || selection.chainageM === null) follow(selection);"
assert line in cross
follow = cross[cross.index("function follow(") : cross.index(line)]
assert "watching = null;" in follow and "current.show(null, interval());" in follow
# 풂(값 없음 · 평면 이름)을 내는 곳 = 마커 풂 하나 · Esc 도 같은 길
marks = _read("B05_Profile", "B05_Profile_UI_RouteEdit_StructureMarks.ts")
assert marks.count("selectDesign(projectId, NO_SELECTION, { from: PLAN_PICK_FROM });") == 1
assert "!activeMoving(canvas) && deselect()" in marks
def test_임시_횡단_단추_제목_줄_오른쪽() -> None:
modal = _read("B05_Profile", "B05_Profile_UI_Profile_CrossModal.ts")
head = modal[
modal.index('<div class="b05-crossmodal__head">') : modal.index(
'<div class="b05-crossmodal__box">'
)
]
for act in ("add", "remove", "close"):
assert f'data-act="{act}"' in head
assert head.index("임시 횡단") < head.index("b05-crossmodal__actions")
css = _read("B05_Profile", "B05_Profile_UI_Profile_CrossModal.css")
actions = css[css.index(".b05-crossmodal__actions {") :]
assert "margin-left: auto;" in actions[: actions.index("}")]
def test_제목_줄_끌기_화면_안() -> None:
modal = _read("B05_Profile", "B05_Profile_UI_Profile_CrossModal.ts")
assert 'bindHeadDrag(root, $(".b05-crossmodal__head"))' in modal
drag = modal[modal.index("function bindHeadDrag(") : modal.index("interface CrossModal {")]
assert '.closest("button")' in drag # 단추 누름은 단추 몫
assert "innerWidth" in drag and "innerHeight" in drag # 화면 밖 안 나감
assert "root.parentElement!.getBoundingClientRect()" in drag # 종단 칸 안
assert "refit();" in modal # 다시 열 때 가둠