"""185-2 B09 묶음 탭 가로 열 수 단추 한 줄 · 보기 고름 = 좌측 하단(304-1 · 탭 줄에 없음). - 가로 열 수 = 도구 묶음(`setTools` · 202-1 로 페이지 보조 탭 줄 오른쪽) · 카드 판 머리 띠 = 묶음 수만 - 단추 · 라벨 = `white-space: nowrap` · 도구 묶음 = 줄바꿈 없음(`flex-wrap: nowrap`) """ import json import re import sys from pathlib import Path ROOT = Path(__file__).resolve().parents[2] if str(ROOT) not in sys.path: sys.path.insert(0, str(ROOT)) from resources.tester.helper_b09_group_cards import COMMON, GROUPS, RAW, TABS, run # noqa: E402 B09 = "B09_Estimation/B09_Estimation_UI_Tabs_" DG = {"id": "DG1", "no": 1, "name": "찰쌓기", "unit": "m2", "lines": [], "sum": 0} HINT = "(() => { const h = document.createElement('p'); h.className = 'hint'; return h; })()" def _block(css: str, selector: str) -> str: m = re.search(re.escape(selector) + r"\s*\{([^}]*)\}", css) assert m, selector return m.group(1) def _panel(view: str, hint: str): """고른 보기 · 안내 글로 그린 뒤 도구 묶음(보기 바꿈 단추 · 열 수 단추) · 판 안 머리 띠.""" return run( [COMMON, TABS, f"{B09}Labor.ts", GROUPS], f"\nconst spec = buildDaegaBlocks({{ sheets: {{ daega_blocks: [{json.dumps(DG, ensure_ascii=False)}] }} }});" f"\nchooseGroupView('{view}');" "\nconst tools = [];" f"\nconst o = {{ tab: 'dg', spec, hint: {hint}, goto: () => {{}}, redraw: () => {{}}," " setTools: (t) => tools.push(...t)," " makeTable: () => ({ root: document.createElement('table'), focusRow: () => {} }) };" "\nconst out = renderGroupPanel(o);" "\nconst btn = tools.find((e) => e.dataset.b09GroupView);" "\nconst bar = out[0].all('.ui-group-cards__bar')[0] ?? null;" "\nconsole.log(JSON.stringify({ n: out.length, first: out[0].className, label: btn ? btn.textContent : null, nTools: tools.length," " cols: tools.flatMap((e) => e.all('[data-group-cols]')).map((b) => b.dataset.groupCols)," " barBtn: bar ? bar.all('[data-b09-group-view]').length : null," " barCols: bar ? bar.all('[data-group-cols]').length : null }));", RAW, ) def test_카드_보기_단추가_열수_단추와_같은_도구_묶음에(): out = _panel("cards", "null") assert out["label"] is None # 304-1 보기 단추 = 좌측 하단(탭 줄에 없음) assert out["cols"] == ["1", "2", "3", "4"] # 같은 묶음에 열 수 단추 넷 assert out["barBtn"] == 0 and out["barCols"] == 0 # 카드 판 머리 띠에는 없음 assert out["n"] == 1 # 안내 글 없으면 카드 판 하나뿐 def test_카드_보기_안내_글은_카드_판_아래에(): # 202-1 — 안내 글 = 카드 판 아래(상세 = test_202_1) out = _panel("cards", HINT) assert out["n"] == 2 and out["first"] == "ui-group-cards" def test_표_보기_단추는_도구_묶음에(): out = _panel("table", "null") assert out["label"] is None and out["n"] == 1 assert out["cols"] == [] and out["nTools"] == 0 # 표 보기 = 도구 없음 def test_CSS_한_줄_nowrap(): cards = (ROOT / "ui_template" / "ui_template_group_cards.css").read_text("utf-8") assert "flex-wrap: nowrap" in _block(cards, ".ui-group-cards__bar") item = _block( cards, ".ui-group-cards__bar .ui-btn,\n.ui-group-cards__label,\n.ui-group-cards__count", ) assert "white-space: nowrap" in item and "flex: none" in item page = (ROOT / "B09_Estimation" / "B09_Estimation_UI_Page.css").read_text("utf-8") assert "flex-wrap: nowrap" in _block(page, ".b09-estimation__tools") tools = _block( page, ".b09-estimation__tools .ui-btn,\n.b09-estimation__tools .ui-group-cards__label" ) assert "white-space: nowrap" in tools assert "toggle" not in (ROOT / GROUPS).read_text("utf-8") # 304-1 탭 줄 토글 걷음