- test_551_2: 선 그리기 색 읽는 자리 = A00_Common/map/map_route_preview.ts (636-2 가 RecPreview 에서 옮김) - test_624_2: D03 도구줄에 추천(recommend) 묶음 더해짐(636-2) - vite.config.ts: server.watch.ignored = tmp · storage · docs · venv · logs · resources/tester · *.log Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
102 lines
4.1 KiB
Python
102 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",
|
|
"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()
|