- createPickMenu 여럿 = 아이콘 + ▾ · 켠 표시는 단추 눌림(하나라도 켜면) 그대로 - 배지 count accent 덧 · 메뉴 css 배지 줄 걷음 · 견본 · 겹 줄 머리 글 맞춤 - 시험 634_1 고침 — 배지 대신 「배지 없음 · 눌림 = 켠 줄 있음」을 잡음 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
67 lines
3.1 KiB
Python
67 lines
3.1 KiB
Python
"""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
|