Files
Aislo/resources/tester/test_624_2_map_parts.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

101 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 도구줄 세 묶음 그대로 + 끝에 지형 칩 · 맨 앞 [?] 도움말 줄(634-2 표 17 줄 · 단추는 `hint`)
assert d03 == [
["hint-toggle"],
["undo", "redo"],
["view3d", "rotate-ccw", "rotate-cw"],
["stations", "slopes", "measure"],
["terrain"],
], d03
b05 = {k for g in _toolbar_rows() for k, p in g if "b05" in p}
assert {
"contour-minor",
"footprint",
"station-snap",
"snap-step",
"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",
"snap-step",
"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()