- 겹 표(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>
70 lines
3.6 KiB
Python
70 lines
3.6 KiB
Python
"""PLAN 622-2 — 예정노선 받은 산림 · 환경 자료 겹 다섯(국유림 임도 · 산림입지도 · 경제림 · 생태자연도 · 산사태) 화면 지킴.
|
|
|
|
./venv/Scripts/python.exe -m pytest resources/tester/test_622_2_forest_layers.py -q
|
|
"""
|
|
|
|
import re
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
D03 = ROOT / "D03_PlanAnalysis"
|
|
MAP = ROOT / "A00_Common" / "map" # 624-2 공용 지도 부품
|
|
|
|
|
|
def _read(path: Path) -> str:
|
|
return path.read_text(encoding="utf-8")
|
|
|
|
|
|
def test_fixed_sources_follow_plan_622_routes() -> None:
|
|
gl = _read(ROOT / "ui_template" / "ui_template_gl_map.ts")
|
|
assert "export function tileSource" in gl
|
|
assert "/plan/${path}/{z}/{x}/{y}.${ext}" in gl
|
|
forest = _read(MAP / "map_forest_layers.ts")
|
|
for name in ("forest_road", "forest_soil", "eco_forest"):
|
|
assert f'vt("{name}")' in forest
|
|
assert f'...vector("{name}")' in forest or f'"source-layer": "{name}"' in forest
|
|
for name in ("ecology", "landslide"):
|
|
assert f'wmt("{name}")' in forest
|
|
assert '`vt/${name}`, "pbf", 8, 15' in forest and '`wmt/${name}`, "png", 6, 19' in forest
|
|
assert "minzoom: 10" in forest # 산림입지도 z10 아래 숨김
|
|
base = _read(D03 / "D03_PlanAnalysis_UI_MapGl.ts")
|
|
assert "...forestSources(projectId)" in base
|
|
assert 'raster("landslide"' not in base # 산사태 = 조각(한 장 GL 그림 없음)
|
|
assert "TRACKED_SOURCES.includes(event.sourceId)" in base # 받는 동안 서클
|
|
|
|
|
|
def test_layer_list_five_off_by_default() -> None:
|
|
defs = _read(MAP / "map_layer_list.ts")
|
|
icons = _read(ROOT / "ui_template" / "ui_template_icons.ts")
|
|
# 634-2 — 표 한 줄 = row(열쇠, 아이콘, 호버제목, 묶음[, 처음 켬]) · 처음 켬 빠짐 = 끔
|
|
for key in ("nationalRoad", "soils", "ecoForest", "ecology", "landslide"):
|
|
entry = re.search(rf'row\("{key}", "(\w+)", "[^"]+", "\w+"(, true)?\)', defs)
|
|
assert entry and not entry.group(2), key
|
|
assert re.search(rf"^\s+{entry.group(1)}:", icons, re.M), entry.group(1)
|
|
# 630 — 임도망도 = 짐작 자리 · route 아이콘 · 짐작 겹 걷음 · 호버 = 표 「임도망도」
|
|
assert 'row("nationalRoad", "route", "임도망도", "road")' in defs
|
|
assert 'row("forestRoad",' not in defs
|
|
assert "item(`임도망도 ${label}`" in _read(MAP / "map_forest_layers.ts")
|
|
forest = _read(MAP / "map_forest_layers.ts")
|
|
assert '"nationalRoad-label"' in forest and "minzoom: 14" in forest # 534 줌인 글
|
|
assert '["get", "year"]' in forest and '"symbol-placement": "line"' in forest
|
|
assert "forestRoadLabelSpec()," in _read(MAP / "map_layer_specs.ts")
|
|
|
|
|
|
def test_colors_are_draw_map_tokens() -> None:
|
|
theme = _read(ROOT / "ui_template" / "ui_template_theme.css")
|
|
forest = _read(MAP / "map_forest_layers.ts")
|
|
for token in set(re.findall(r'"(--draw-map-[\w-]+)"', forest)):
|
|
assert f"{token}:" in theme, token
|
|
assert all(f"--draw-map-soil-{n}:" in theme for n in range(1, 7))
|
|
assert not re.search(r"#[0-9a-fA-F]{6}\b(?!\")", forest) # 색 = 토큰(뒷값만 글)
|
|
|
|
|
|
def test_canvas_keeps_old_landslide_and_layers_file_not_grown() -> None:
|
|
layers = _read(D03 / "D03_PlanAnalysis_UI_Layers.ts")
|
|
assert len(layers.splitlines()) <= 688
|
|
assert '(glOn && key === "landslide")' in layers # GL = 조각 · 받기 없음
|
|
assert "if (!glOn) void Promise.all(LAYERS.map((def) => ensure(def.key)))" in layers
|
|
paint = _read(D03 / "D03_PlanAnalysis_UI_LayerPaint.ts")
|
|
assert "drawRaster(context, map, data.landslide);" in paint # 옛 캔버스 = 한 장 그대로
|