Files
Aislo/resources/tester/test_181_2_b09_box_pick.py
T

77 lines
3.4 KiB
Python

"""181-2 박스보기 — 이름 · 접기 없음 · 목록표에서 고른 호표 = 박스 붉은 외곽선 · 표 보기 = 줄 구간 전체.
- 단추 글 「박스보기」 ↔ 「표로 보기」 · 요약(접기) 보기 지움
- 표 보기 = 고른 호표 줄 구간(키 `|` 앞머리 같은 줄) 모두 `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: () => {},"
" makeTable: (e) => { extra = e; return { root: document.createElement('table'),"
" focusRow: () => {} }; } };"
"\nchosen.set('dg', '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
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)") == 4 # 위 · 아래 · 왼 · 오른 2px
shell = (ROOT / "B09_Estimation" / "B09_Estimation_UI_Shell.ts").read_text("utf-8")
assert "extra?: (index: number) => string | null" in shell