Files
Aislo/resources/tester/test_b05_routeedit_cross_width.py
T
eomsangdonandClaude Opus 5.5 c77e44ab07 refactor(B05·B06 한 페이지): 노선 id 한 칸 — 출처 다섯을 페이지 자료 줄 하나로 (386-2b)
- design_page_route 새로(칸 · 끄는 모듈 없음) · 채움 = design_page_data pageSectionContext(횡단 context · 세션 캐시) 하나
- 읽는 곳 = 종단 보기 [저장] 몫 · 횡단 보기 · 종단도 render · 평면 횡단 판(노선 번호 훑기 지움) · 3D · 측점 그림
- 페이지 떠남에 칸 비움 · 저장 정본 바뀜엔 그대로
- design_profile 700줄 앞 쪼갬(design_profile_context — 만들 때 넘기는 것 · 미리보기 대기)
- 시험 test_384_2b · 평면 횡단 판 시험 = 페이지 노선 값만

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TteK8mfYZetk5P3bEZkyVZ
2026-10-17 19:08:37 +09:00

107 lines
3.7 KiB
Python

# -*- coding: utf-8 -*-
"""계획노선 편집 창 — **측점 법선 길이 · 고름 연동**(계획서 22-1 · 382-2) 회귀검증.
법선 = 그 측점 발자국 비탈 끝 좌 · 우(382-2) · 기록이 없으면 「횡단 반폭(m)」 적용값 양쪽 · 그것도 없으면 원지반 선 범위
(계산 묶음 그 측점 표본 · 365-3).
Node 헬퍼(`helper_b05_routeedit_cross_width.cjs`)가 TS 를 트랜스파일해 돌린다.
"""
import json
import os
import subprocess
import pytest
HERE = os.path.dirname(os.path.abspath(__file__))
@pytest.fixture(scope="module")
def results():
proc = subprocess.run(
["node", os.path.join(HERE, "helper_b05_routeedit_cross_width.cjs")],
capture_output=True,
text=True,
timeout=60,
)
assert proc.returncode == 0, proc.stderr
return json.loads(proc.stdout)
def test_측점을_고르기_전에는_선이_없다(results):
assert results["before"] is None
def test_적용한_적_없으면_원지반_범위_양쪽(results):
assert results["empty"]["watched"] == {"chainageM": 100, "leftM": 20, "rightM": 20}
def test_적용값이_있으면_그_값_양쪽(results):
assert results["applied15"]["watched"] == {"chainageM": 100, "leftM": 15, "rightM": 15}
def test_페이지_노선_값만_다른_노선_프로젝트는_무시(results):
# 노선 = 페이지 노선 id 한 칸(386-2b · 옛 「가장 큰 노선 번호」 훑기 지움)
assert results["otherRoute"]["watched"]["leftM"] == 15
assert results["latestRoute"]["watched"]["leftM"] == 8.5
def test_망가진_값은_기본값으로(results):
assert results["badValue"]["watched"]["rightM"] == 20
# ── 382-2 법선 = 발자국 비탈 끝 · 측점 열쇠 · 공용 고름 연동 ──────────────────────
def test_발자국_기록이면_비탈_끝_좌우와_깎기(results):
assert results["footprint"] == {
"chainageM": 100,
"leftM": 7.5,
"rightM": 6,
"leftCut": True,
"rightCut": False,
}
def test_노선_고친_뒤_같은_열쇠_측점의_새_발자국(results):
assert results["afterEdit"] == {
"chainageM": 102,
"leftM": 9,
"rightM": 4,
"leftCut": False,
"rightCut": True,
}
def test_평면_눈금_클릭은_공용_고름에_적고_판을_편다(results):
click = results["planClick"]
assert click["selection"] == {"chainageM": 40, "structureId": None}
assert click["heard"] == [{"at": 40, "from": "b05-plan"}]
assert click["panel"] == "cross"
assert click["watched"]["chainageM"] == 40
def test_다른_보기_일반측점_고름은_평면_판(results):
assert results["otherGrid"]["watched"]["chainageM"] == 60
assert "structure" not in results["otherGrid"]["watched"]
assert results["otherGrid"]["panel"] == "cross"
def test_관_구조물_고름은_마름모만(results):
assert results["otherPipe"] == {"chainageM": 80, "leftM": 0, "rightM": 0, "structure": True}
assert results["otherStructure"]["structure"] is True
assert results["otherStructure"]["chainageM"] == 60
def test_고름을_풀면_법선도_없다(results):
assert results["cleared"] == {"watched": None, "redrawn": True}
def test_393_판_그림은_B06_카드_사본_노선_고치면_전후(results):
# 노선 고친 차례 — 아래 판 = 고치기 전 측점(이전 사본 id) · 위 판 = 새 측점 · B06 카드 id 와 안 겹침
assert results["cardsAfterEdit"] == ["b05-prev-s100", "b05-cur-s102"]
def test_393_1_눈금이_연_판은_기억_안_함(results):
assert results["planClick"]["panel"] == "cross"
assert results["planClick"]["remember"] is False