- mountRouteEditor(parent, host, …) — 덮개 · 전체 화면 · 닫기 걷음 · 이력 · 키 듣기 = host 보임 · 숨김 · 떠남 · 칸 크기 = ResizeObserver - [취소] → [반영 전으로](이력 처음으로 · 되돌리기로 다시 살림) · [확인] → [노선 반영] · 대기 막 = 화면 전체(노선 재탐색) - [노선 반영] 끝 = 초안 · 결과 · 옛 노선 · 종단면 캐시 비움 → remountRoute(location.reload 없앰) - R 라벨 = 칸 안 절대 위치 · 오른쪽 횡단 미리보기 = 접는 칸 · [3D] 단추 = 평면 머리 도구줄 - 새 _RouteEdit_UndoOwner(누른 판 기억) · 종단도 Ctrl+Z 줄이 물음 - 시험: test_345_3_route_body 5 · 칸 · 겉틀 시험 고쳐 씀 · 관련 411 통과(옛 3 실패 그대로) · typecheck 통과 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VmC34fsxxbweEG3RUjs3Mn
70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
"""345-2 3D → 큰 모달 — 닫힌 동안 그리기 0 · 처음 열 때 지형 · 닫으면 숨긴 자리 · 버림은 떠날 때만.
|
|
|
|
Node 헬퍼 `helper_345_2_3d_modal.cjs` 가 모달 조각을 트랜스파일해 가짜 뷰어로 돌림 · 배선은 글로 봄.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
HERE = Path(__file__).resolve().parent
|
|
ROOT = HERE.parents[1]
|
|
|
|
|
|
def _read(rel: str) -> str:
|
|
return (ROOT / rel).read_text(encoding="utf-8")
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def out() -> dict:
|
|
run = subprocess.run(
|
|
["node", str(HERE / "helper_345_2_3d_modal.cjs")],
|
|
capture_output=True,
|
|
text=True,
|
|
encoding="utf-8",
|
|
check=True,
|
|
)
|
|
return json.loads(run.stdout)
|
|
|
|
|
|
def test_닫힌_동안_그리기_0(out):
|
|
assert out["closedDraws"] == 0
|
|
assert out["inPark"] is True
|
|
assert out["afterCloseDraws"] == out["openDraws"] == 3
|
|
assert out["backInPark"] is True
|
|
assert out["disposedOnClose"] is False # 닫기는 멈춤만 · 문맥 살림
|
|
|
|
|
|
def test_처음_열_때_지형_한_번_로딩_원(out):
|
|
assert out["terrainBeforeOpen"] == 0
|
|
assert out["wide"] is True and out["inModal"] is True
|
|
assert out["spinnerWhileLoading"] is True and out["spinnerGone"] is True
|
|
assert out["terrainLoads"] == 1 # 다시 열어도 다시 안 올림
|
|
assert out["modalCount"] == 2 # 열린 동안 또 눌러도 하나
|
|
assert out["reopenDraws"] == 5
|
|
|
|
|
|
def test_떠날_때만_버림(out):
|
|
assert out["beforeCloseOk"] is True
|
|
assert out["closedOnDispose"] is True
|
|
assert out["disposed"] is True
|
|
assert out["runningAfterDispose"] is False
|
|
|
|
|
|
def test_배선_3D_상주_없음_죽은_길_지움():
|
|
view = _read("A00_Common/design/design_view_profile.ts")
|
|
assert "mainContent.append(viewer.root)" not in view
|
|
assert "view3d.modal.park" in view and "view3d.modal.button" in view
|
|
assert "dispose: view3d.modal.dispose" in view
|
|
assert "loadTerrain" not in view # 지형은 모달을 열 때
|
|
for gone in ("beginMoveSelected", "deleteSelected", "updateSelected", "panel.setSelected"):
|
|
assert gone not in view
|
|
assert "selected-point" not in _read("B05_Profile/B05_Profile_UI_Panel_Sections.ts")
|
|
assert not (ROOT / "B05_Profile/B05_Profile_UI_Panel_Route.ts").exists() # 345-3 칸째 지움
|
|
assert "beginMoveSelected" not in _read("B05_Profile/B05_Profile_UI_Viewer.ts")
|
|
assert len(view.splitlines()) <= 700
|