"""257-2 B09 이동해 온 줄 = 모든 탭 빨강 상자 · 비고 「빈 줄 N」 없음 · 총공사비 = 표 아래 고정 줄. - 쉘 = 설계내역서 밖 · 묶음 아닌 탭에도 줄 범위 [at, at] 빨강(pickClass) · 줄 누름 · Esc · 방향키로 풂(unpickOnRelease) - 비고 = 제목 줄 「(제외금액)」만 · 묶음 줄 빈칸(Py · TS 짝 · blank 수는 줄 값 그대로) - 총괄 · 원가계산서 총공사비(grand) = `TabTable.total`(몸 줄에서 빠짐 · 줄 이동 누름 없음 — 185-1 시험이 값 확인) """ 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 = ROOT / "B09_Estimation" def test_쉘_모든_탭_빨강_배선(): shell = (B09 / "B09_Estimation_UI_Shell.ts").read_text("utf-8") assert "!bill && at >= 0 ? [at, at] : null" in shell assert "pickClass(range, i)" in shell and "unpickOnRelease(table.root)" in shell assert "table.focusRow(at, false)" in shell def test_풂_줄_누름_Esc_빨강만_지움(): out = run( [COMMON, TABS, GROUPS], """ const root = document.createElement("div"); const rows = [0, 1, 2].map((i) => { const tr = document.createElement("tr"); tr.dataset.i = String(i); if (i === 1) tr.classList.add("is-pick", "is-pick-top", "is-pick-end"); root.append(tr); return tr; }); unpickOnRelease(root); const before = rows.map((t) => t.className); key("Escape"); const afterEsc = rows.map((t) => t.className); rows[1].classList.add("is-pick"); root.click(); const afterClick = rows.map((t) => t.className); console.log(JSON.stringify({ before, afterEsc, afterClick })); """, RAW + """ E.prototype.querySelectorAll = function () { return this.all("TR").filter((t) => t.cls.has("is-pick")); }; """, ) assert out["before"] == ["", "is-pick is-pick-top is-pick-end", ""] assert out["afterEsc"] == ["", "", ""] assert out["afterClick"] == ["", "", ""] def test_비고_빈_줄_없음_Py_TS_짝(): py = (B09 / "B09_Estimation_Calc_Bill.py").read_text("utf-8") ts = (B09 / "B09_Estimation_Calc_Bill.ts").read_text("utf-8") assert "빈 줄 {" not in py and not re.search(r"빈 줄 \$\{", ts) assert 'row["note"] = "(제외금액)" if row["key"] == "sec:G" else ""' in py assert 'row.note = row.key === "sec:G" ? "(제외금액)" : ""' in ts