Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018jonfdxn1Xit9bdkNJpE4G
85 lines
3.7 KiB
Python
85 lines
3.7 KiB
Python
"""185-2 B09 묶음 탭 보기 바꿈 단추 글 한 줄 · 가로 열 수 단추와 같은 줄.
|
|
|
|
- 보기 바꿈 단추 · 가로 열 수 = 도구 묶음(`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"\nchosen.set('dg', '{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.textContent,"
|
|
" 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"] == "표로 보기"
|
|
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"] == "박스보기" and out["n"] == 1
|
|
assert out["cols"] == [] # 표 보기 = 열 수 단추 없음
|
|
|
|
|
|
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 "actions: [toggle]" in (ROOT / GROUPS).read_text("utf-8")
|