Files
Aislo/resources/tester/test_626_3_expected_edit.py
T
eomsangdonandClaude Opus 5.5 61733d064d feat(지도): 634-2 · 634-3 아이콘 표 두 장 · 묶음 메뉴 · 한 행 배선 · 호버 = 표(요구 546)
- 겹 표(map_layer_list) = 그룹1 22 줄 표 차례 · title = 호버제목 · group(수계망도 · 도로 · 토지·건물 · 제한·재해) · pages · 숨김 표 걷음 · 도로300m 한 줄(「도로」 묶음 · 기능 남김)
- 겹 줄(map_layer_bar) = 단독 넷 | 묶음 넷(여럿 고르기 메뉴 · 켠 수 배지 · 안 닫힘) | 그래픽 카드 · sync 가 단추 · 메뉴 줄 막힘 · 글을 맞춤(why = 페이지 까닭)
- 도구 표(map_toolbar) = 그룹2 17 줄 title · mapToolGroups 가 글을 표로 맞춤 · 기본 단추 생성 · 지형 칩 막힘 「수치지형도/라이다 — 까닭」
- 띠 = 한 자료 · 겹 둘(GL fillEdge 거름 · 옛 캔버스 · 범례 줄 따로) · B05 띠 받기(D03 과 같은 서버 길 · bandCollection 공용)
- D03 = 겹 줄 · 도구줄 한 행(createMapToolRow) · 222px 기댐 · 줄바꿈 CSS 걷음 · 측점 · 기울기 호버 덮어쓰기 걷음 · LAS 올리기 호버 걷음
- B05 = 세로 두 줄 → 한 행 · 호버 덮어쓰기 걷음(도구줄 · 1m 등고선 · 3D · 추천) · 겹 막힘 querySelector 덮어쓰기 → 공용 sync · 임도(업로드) 보임 + 「받은 임도 자료 없음」 막힘 · 스냅 간격 날 select → 고르기 메뉴(하나)
- 켬끔 기억 열쇠 · 측점 · 기울기 처음 값 · 그래픽 카드 취향 열쇠 둘 그대로
- 낡은 시험 고침(568_1 · 622_2 · 624_2 · 624_3 · 553_4 · 625_draw · b05_routeedit_initial · 626_3 · 390_4 · 346_2 · 353_1 · 581_2 · 584_1 · 584_3) — 표 꼴 row() · 호버 글 = 표 · 한 행 · 고르기 메뉴로 바뀐 글을 잡음 · 새 지킴 634_2

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 11:40:26 +09:00

119 lines
6.0 KiB
Python

"""626-3 B05 평면 예정노선 변경 → 다시 추적 → 편집기 한 걸음 → [저장](요구 530 · 531 · 535-1 · 536 · 결정 D3 · D4 · D9).
- 예정노선 페이지(D03) 긋기 · 고르기 · 메뉴 · 속성 판 함수를 그대로 부름(`oneLine` = 한 선 · 갈래 · 연도 · 지점 막음/숨김) ·
D03 덧 인자는 기본값 = 지금 그대로.
- 지킴(글 대조) — 다시 추적 = `/route/follow` 만(저장 0) · `/route/replan` · `as_initial` · `expected_route.csv` 안 부름 ·
결과 = 편집기 `restoreSnapshot(…, true)` 한 걸음 · [저장] = 손 편집 같은 길(`bindRouteApply`) + 초안 `expected` ·
걸음 사진 · 노선 초안에 고친 예정노선 실림(되돌리기 · 세션 되살림) · 같은 선 판정에 예정노선 · 켠 동안 캔버스 누름을
먼저 받음(재기 · 계획선 고르기 막음) · 원본 켬끔 · RouteEdit 700 줄 안.
./venv/Scripts/python.exe -m pytest resources/tester/test_626_3_expected_edit.py -q
"""
from __future__ import annotations
import re
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
B05 = ROOT / "B05_Profile"
D03 = ROOT / "D03_PlanAnalysis"
def _src(path: Path) -> str:
return path.read_text(encoding="utf-8")
def test_다시_추적_follow_만_저장_0_초기값_추천_안_건드림():
ui = _src(B05 / "B05_Profile_UI_ExpectedDraw.ts").split("*/", 1)[1] # 머리 글 뺀 몸
assert "/route/follow" in ui and "askConfirm(" in ui and "flattenServerPlan(" in ui
for banned in (
"/route/replan",
"as_initial",
"expected_route.csv",
"/route/initial",
"replanRoute",
):
assert banned not in ui, banned
# B05 화면 어디서도 as_initial: true 를 안 보냄(D8)
for path in B05.glob("B05_Profile_UI_*.ts"):
assert not re.search(r"as_initial:\s*true", _src(path)), path.name
def test_결과는_편집기_한_걸음_저장은_손_편집_같은_길():
main = _src(B05 / "B05_Profile_UI_RouteEdit.ts")
assert "createExpectedDraw({" in main and "restoreSnapshot(" in main
assert re.search(r"onFollow: \(flat, line\) =>\s+restoreSnapshot\(", main)
assert (
'"예정노선을 따라 평면을 다시 추적했습니다.",\n true,' in main
) # 새 걸음(되돌리기 됨)
assert "expected: expectedDraw.edit()," in main # 걸음 사진 칸
assert "expectedDraw.setEdit(snapshot.expected ?? null);" in main # 되돌리기 = 예정노선도
assert "expected: () => expectedDraw.edit()," in main # [저장] 초안 칸
assert "plan.expected_edited ?? []" in main # 다시 열면 고친 예정노선
assert len(main.splitlines()) <= 700
apply = _src(B05 / "B05_Profile_UI_RouteEdit_Apply.ts")
assert "...(expected ? { expected } : {})" in apply # null = 안 실음(그대로) · [] = 지움
def test_걸음_사진_초안_같은_선에_예정노선():
history = _src(B05 / "B05_Profile_UI_RouteEdit_History.ts")
assert "expected?: Vertex[] | null;" in history and "!sameExpected(a, b)" in history
draft = _src(B05 / "B05_Profile_UI_RouteEdit_Draft.ts")
assert "...(snapshot.expected" in draft and "expected: draft.expected ?? null," in draft
types = _src(ROOT / "A00_Common" / "design" / "logic" / "design_pipeline_types.ts")
assert "expected?: Vertex[] | null;" in types
server = _src(B05 / "B05_Profile_Route_Save.py")
assert "expected: list[tuple[float, float]] | None = None" in server
def test_D03_긋기_고르기_메뉴_속성판_그대로_한_선():
ui = _src(B05 / "B05_Profile_UI_ExpectedDraw.ts")
for call in ("createPlanDraw({", "createPlanEdit(", "createPlanMenu({", "createPlanProps({"):
assert call in ui, call
assert ui.count("oneLine: true,") == 3 # 긋기 · 메뉴 · 속성 판
assert "draw.key(event) || editor.key(event)" in ui # 같은 단축키
assert (
'keyIs(event, "plan.undo") || keyIs(event, "plan.redo")' in ui
) # 되돌리기 = 페이지 사진첩
assert '"pointerdown",' in ui and "event.stopImmediatePropagation()" in ui
assert re.search(
r"\n true,\n \);", ui
) # 잡기 단계(capture) — 재기 · 계획선 고르기보다 먼저
assert "event.buttons & 6" in ui # 오른쪽 · 가운데 끌기 = 지도 이동 그대로
assert 'createElement("button")' not in ui
# D03 덧 인자 — 기본값 = 지금 그대로
draw = _src(D03 / "D03_PlanAnalysis_UI_Draw.ts")
assert (
"oneLine?: boolean;" in draw
and "params.oneLine ? oneLineBlock(target.kind, network) : null" in draw
)
assert "marks: !params.oneLine," in draw
assert "markButton.hidden = opts.marks === false;" in _src(
D03 / "D03_PlanAnalysis_UI_DrawPanel.ts"
)
menu = _src(D03 / "D03_PlanAnalysis_UI_Menu.ts")
assert "if (params.oneLine && oneLineBlock(aim, params.network())) return;" in menu
assert 'if (!params.oneLine) items.push(["여기서 연도 구역 나눔"' in menu
props = _src(D03 / "D03_PlanAnalysis_UI_Props.ts")
assert "!!params.oneLine ||" in props and "...(params.oneLine ? [] :" in props
tools = _src(ROOT / "A00_Common" / "map" / "map_toolbar.ts")
# 634-2 — 표 줄에 호버제목(title) · 걷음은 635-3
assert re.search(
r'key: "expected-draw",\s+title: "[^"]+",\s+does: "[^"]+",\s+pages: B05', tools
)
assert re.search(
r'key: "expected-original",\s+title: "[^"]+",\s+does: "[^"]+",\s+pages: B05', tools
)
render = _src(B05 / "B05_Profile_UI_RouteEdit_Render.ts")
# 맨 위 = 구조물 마커 뒤 · 회전 끝 앞
assert render.index("scene.overAll?.(context);") < render.index("context.restore(); // 회전 끝")
def test_원본_예정노선_안_덮음_옅은_점선_켬끔():
ui = _src(B05 / "B05_Profile_UI_ExpectedDraw.ts")
assert "showOriginal && original.length > 1 && line() !== original" in ui
assert "expected_route.csv" in ui.split("*/")[0] # 머리 = 원본 안 덮음 적음
for banned in ("write_route_csv", 'expected_route.csv"', "/route/initial"):
assert banned not in ui.split("*/", 1)[1], banned