Files
Aislo/resources/tester/test_624_2_map_parts.py
T
eomsangdonandClaude Sonnet 5.5 1288e21e55 feat(756-1): 추천 선 진하게 · 스냅 한 아이콘 · 추천노선 여럿 고르기 · 켠 동안 등고선 띠 넓힘
- 예정노선 수정 켬에도 추천 선 불투명 그대로(Render)
- 스냅 + 스냅 간격 = 고르기 메뉴 하나(측점 No. · 10 m · 끔) · 도구줄 표 snap-step 줄 걷음
- 추천노선 = 여럿 고르기(공용 부품 multi · 줄 색 점 PickMenuItem.color · 끔 줄 없음) · 선 색 --draw-map-rec-1~4 · 예정노선 가이드 선은 켬끔 한 줄
- 켠 동안 등고선 띠 = LAS 는 자르지 않음 · 도엽은 계획선 + 예정노선으로 넓힘(캔버스 · GL · 도엽 다시 받기)
- 시험 624_2 · 634_2 · 626_1 · 636_2 · 390_4 · b05_routeedit_initial 을 새 꼴로 고침 · 새 시험 756_1

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-02 22:58:28 +09:00

100 lines
4.1 KiB
Python

"""PLAN 624-2 — 공용 지도 부품(A00_Common/map) 지킴: 도구줄 표 · 겹 목록 페이지 표 · 범례 · 지형 칩 · D03 은 부르기만.
./venv/Scripts/python.exe -m pytest resources/tester/test_624_2_map_parts.py -q
"""
import re
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
MAP = ROOT / "A00_Common" / "map"
D03 = ROOT / "D03_PlanAnalysis"
def _read(path: Path) -> str:
return path.read_text(encoding="utf-8")
def _toolbar_rows() -> list[list[tuple[str, set[str]]]]:
"""표 → 묶음마다 (열쇠, 보일 페이지)."""
src = _read(MAP / "map_toolbar.ts")
pages = {"BOTH": {"d03", "b05"}, "B05": {"b05"}}
body = src[src.index("MAP_TOOLBAR") : src.index("const isAct")]
groups = re.findall(r"\[\s*(\{.*?\})\s*,?\s*\]", body, re.S)
return [
[(k, pages[p]) for k, p in re.findall(r'key: "([\w-]+)".*?pages: (\w+)', g, re.S)]
for g in groups
]
def test_toolbar_table_d03_same_as_before_plus_terrain() -> None:
d03 = [[k for k, p in g if "d03" in p] for g in _toolbar_rows()]
d03 = [g for g in d03 if g]
# 옛 D03 도구줄 세 묶음 그대로 + 끝에 추천(636-2) · 지형 칩 · 맨 앞 [?] 도움말 줄(634-2 표 17 줄 · 단추는 `hint`)
assert d03 == [
["hint-toggle"],
["undo", "redo"],
["view3d", "rotate-ccw", "rotate-cw"],
["stations", "slopes", "measure"],
["recommend"],
["terrain"],
], d03
b05 = {k for g in _toolbar_rows() for k, p in g if "b05" in p}
assert {
"contour-minor",
"footprint",
"station-snap",
"recommend",
"terrain",
} <= b05
tools = _read(ROOT / "ui_template" / "ui_template_map_tools.ts")
for key in {k for g in _toolbar_rows() for k, _ in g} - {
"hint-toggle",
"recommend",
"terrain",
}:
assert f'"{key}": {{' in tools or f"{key}: {{" in tools, key # 아이콘 · 이름 = MAP_TOOLS
def test_layer_pages() -> None:
src = _read(MAP / "map_layer_list.ts")
assert 'd03: { pref: "aislo:pref:d03.layers" }' in src
b05 = re.search(r"b05: \{(.*?)\},", src, re.S).group(1)
# 634-2 — 숨김 표 걷음(요구 546 표 = 22 겹 두 페이지 사용) · 보일 페이지 = 겹 줄 `pages`
assert "hide" not in b05
assert 'on: ["contour", "stream"]' in b05 # A② 지금 그대로
assert "if (!def.pages.includes(page)) on[def.key] = false;" in src
def test_common_parts_use_kit_and_no_page_imports() -> None:
for path in MAP.glob("*.ts"):
src = _read(path)
assert len(src.splitlines()) <= 700, path.name
for page in ("D03_PlanAnalysis", "B05_Profile", "B04_PreProcess"):
assert f"../../{page}" not in src and f"../{page}" not in src, (path.name, page)
for raw in ('createElement("button")', 'createElement("input")', 'createElement("select")'):
assert raw not in src, (path.name, raw)
chip = _read(MAP / "map_terrain_chip.ts")
assert "createSegment({" in chip and 'root.dataset.act = "terrain"' in chip
assert "createLegend(row)" in _read(MAP / "map_legend.ts")
assert "createMapTools({" in _read(MAP / "map_layer_bar.ts")
def test_d03_calls_common_only() -> None:
layers = _read(D03 / "D03_PlanAnalysis_UI_Layers.ts")
assert (
'createMapLayerBar({\n page: "d03"' in layers
and 'createMapLegend("d03-plan__legend")' in layers
)
assert len(layers.splitlines()) < 683 # 줄이기만
gl = _read(D03 / "D03_PlanAnalysis_UI_MapGl.ts")
assert "mapLayerSpecs(light, pick)" in gl and "function haloLine" not in gl
defs = _read(D03 / "D03_PlanAnalysis_UI_LayerDefs.ts")
assert "export const GROUPS" not in defs and "readPref" not in defs
ui_map = _read(D03 / "D03_PlanAnalysis_UI_Map.ts")
assert 'mapToolGroups("d03", {' in ui_map
assert "terrain: events.terrain," in ui_map # 칩 = 예정노선 지형 칸(624-4)
lidar = _read(D03 / "D03_PlanAnalysis_UI_LidarUpload.ts")
assert 'createTerrainChip({\n page: "d03",' in lidar
assert not (D03 / "D03_PlanAnalysis_UI_ForestLayers.ts").exists()