"""634-1 부품(요구 546) — 여럿 고르기 메뉴(안 닫힘 · 켜면 눌림 · 켠 수 숫자 없음(요구 551) · 줄 아이콘 · 막힘) · 한 행 두 영역 · 견본 · 아이콘.""" import re from pathlib import Path UI = Path(__file__).resolve().parents[2] / "ui_template" MENU = (UI / "ui_template_context_menu.ts").read_text(encoding="utf-8") MENU_CSS = (UI / "ui_template_context_menu.css").read_text(encoding="utf-8") TOOLS = (UI / "ui_template_map_tools.ts").read_text(encoding="utf-8") TOOLS_CSS = (UI / "ui_template_map_tools.css").read_text(encoding="utf-8") ICONS = (UI / "ui_template_icons.ts").read_text(encoding="utf-8") def test_여럿_고르기_안_닫힘_눌림(): pick = MENU[MENU.index("export function createPickMenu(") :] assert '"menuitemcheckbox"' in pick and "values," in pick and "setItem(value, patch)" in pick click = pick[pick.index('b.addEventListener("click"') :] click = click[: click.index("pop.append(b);")] # 여럿 = 켬끔 뒤 바로 돌아감(setOpen(false) 앞) assert click.index("if (multi)") < click.index("setOpen(false)") # 요구 551 — 켠 수 원형 숫자 걷음 · 켠 표시 = 단추 눌림 assert "createBadge" not in MENU and "ui-badge" not in MENU_CSS assert 'root.setAttribute("aria-pressed", String(values().length > 0));' in pick assert 'window.addEventListener("resize", onShift);' in pick # 창 크기 = 닫힘 assert 'document.addEventListener("scroll", onShift, true);' in pick # 밀기 = 닫힘 assert ".ui-pick-menu--multi" in MENU_CSS and ".ui-row-menu__item:disabled" in MENU_CSS def test_한_행_두_영역(): assert "export function createMapToolRow(left: HTMLElement, right: HTMLElement)" in TOOLS assert ":scope > .ui-map-tools__hint" in TOOLS # [?] 판은 행 아래 first = TOOLS_CSS[TOOLS_CSS.index(".ui-map-row__line > .ui-map-tools:first-child {") :] first = first[: first.index("}")] assert "flex-shrink: 0;" in first and "max-width: 50%;" in first # 모자라면 그룹2 먼저 area = TOOLS_CSS[TOOLS_CSS.index(".ui-map-row__line > .ui-map-tools {") :] assert "min-width: 0;" in area[: area.index("}")] def test_마우스_글_막힘만_까닭(): tip = TOOLS[TOOLS.index("export function mapToolTip(") :] assert "why ? `${el.dataset.tip} — ${why}` : el.dataset.tip" in tip[: tip.index("\n}")] assert 'title: "도움말"' in TOOLS def test_아이콘_겹침_없음(): table = TOOLS[TOOLS.index("export const MAP_TOOLS") : TOOLS.index("satisfies")] icons = re.findall(r'icon: "(\w+)"', table) assert len(icons) == len(set(icons)) for name in ( "contours", "cutFill", "lineament", "spacing", "streams", "signpost", "parcelHouse", "ban", ): assert re.search(rf"^ {name}:", ICONS, re.M), name def test_견본(): parts = (UI / "ui_template_ui_kit_parts.ts").read_text(encoding="utf-8") frames = (UI / "ui_template_ui_kit_frames.ts").read_text(encoding="utf-8") assert 'name: "고르기 메뉴(하나 · 여럿)"' in parts and "demo: pickDemo" in parts assert "createMapToolRow(layers.root, tools.root)" in frames