"""181-2 박스보기 — 이름 · 접기 없음 · 목록표에서 고른 호표 = 박스 붉은 외곽선 · 표 보기 = 줄 구간 전체. - 단추 글 「박스보기」 · 「호표보기」(304-1 좌측 스위치) · 요약(접기) 보기 지움 - 표 보기 = 고른 호표 줄 구간(키 `|` 앞머리 같은 줄) 모두 `is-pick` · 첫 줄 `is-pick-top` · 끝 줄 `is-pick-end` - 붉은 색 = `--color-danger`(B06 횡단 카드 고름 꼴) """ import json 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, TABS, run # noqa: E402 ROWS = [ # 호표 A(3줄) · 호표 B(4줄) · 호표 C(1줄) {"key": "A"}, {"key": "A|1"}, {"key": "A|합계"}, {"key": "B"}, {"key": "B|1"}, {"key": "B|2"}, {"key": "B|총계"}, {"key": "C"}, ] # fmt: skip def test_구간_첫_끝_줄(): out = run( [COMMON, TABS, GROUPS], f"\nconst rows = {json.dumps(ROWS)};" "\nconst show = (focus) => { const r = pickRange(rows, focus);" " return [r, rows.map((_, i) => pickClass(r, i))]; };" "\nconsole.log(JSON.stringify({ a: show('A|1'), b: show('B'), c: show('C')," " none: show(undefined), unknown: show('Z|1') }));", ) assert out["a"][0] == [0, 2] assert out["a"][1] == [ "is-pick is-pick-top", "is-pick", "is-pick is-pick-end", None, None, None, None, None, ] # fmt: skip assert out["b"][0] == [3, 6] assert out["b"][1][3:7] == [ "is-pick is-pick-top", "is-pick", "is-pick", "is-pick is-pick-end", ] # fmt: skip assert out["b"][1][:3] == [None] * 3 # 다른 호표 없음 assert out["c"][0] == [7, 7] and out["c"][1][7] == "is-pick is-pick-top is-pick-end" assert out["none"] == [None, [None] * 8] and out["unknown"] == [None, [None] * 8] def test_표_보기_줄_class_넘김(): out = run( [COMMON, TABS, GROUPS], f"\nconst spec = {{ columns: [{{ key: 'key' }}], rows: {json.dumps(ROWS)} }};" "\nlet extra = null;" "\nconst o = { tab: 'dg', spec, hint: null, focus: 'B|1', goto: () => {}, redraw: () => {}, setTools: () => {}," " makeTable: (e) => { extra = e; return { root: document.createElement('table')," " focusRow: () => {} }; } };" "\nchooseGroupView('table');" "\nrenderGroupPanel(o);" "\nconsole.log(JSON.stringify(spec.rows.map((_, i) => extra(i))));", ) assert out == ( [None] * 3 + ["is-pick is-pick-top", "is-pick", "is-pick", "is-pick is-pick-end"] + [None] ) def test_글_접기_없음_CSS_잇기(): groups = (ROOT / GROUPS).read_text("utf-8") assert '"박스보기" : "호표보기"' in groups and "호표별 보기" not in groups # 304-1 글 common = (ROOT / COMMON).read_text("utf-8") for gone in ("isSummary", "GROUP_SUMMARY_OVER", "is-closed", "모두 펼침", "모두 접기"): assert gone not in common assert 'box?.classList.add("is-pick")' in common page = (ROOT / "B09_Estimation" / "B09_Estimation_UI_Page.css").read_text("utf-8") for sel in ("tr.is-pick td", "tr.is-pick.is-pick-top td", "tr.is-pick.is-pick-end td"): assert sel in page assert ( page.count("var(--color-danger)") == 5 ) # 위 · 아래 · 왼 · 오른 2px + 204-1 끌기 못 놓음 점선 shell = (ROOT / "B09_Estimation" / "B09_Estimation_UI_Shell.ts").read_text("utf-8") assert "extra?: (index: number) => string | null" in shell