Files
Aislo/resources/tester/test_ui_side_panels.py
T
eomsangdonandClaude Sonnet 5.5 2d9a469fc7 feat(806-1): 구조물 조합 일위대가 보기 = 일위대가 컨테이너 한 부품 · 단가산출 줄 = 그 SK 문서 모달(수식 탭 · 저장 = 그 SK)
- 조합 상세 · 카드 · 서고 모두 Labor_Table 한 부품 — 조합 전용 칸(면적 잇기 · 수량산출 모달 · 규격 열 · 다이어그램)은 새 Labor_Combo
- 단가산출(SK) 참조 줄 누름 = 새 Labor_SkEdit — 그 SK 문서를 단가산출 상세 부품(수식 탭 첫 화면)으로 열고 [저장] = 수식 저장 → SK 문서 저장 → 일위대가 금액 다시 셈 · 위 층 SK = 읽기만 · 두 번 눌러도 모달 하나
- 옛 조합 전용 표 · 단가산출 보기 모달(Labor_SangeunModal) 지움 · 전국 자재 줄은 Labor_Table 이 그림
- 새 시험 test_806_1_labor_view · 소스 지킴 시험 12 개를 새 자리(Labor_Table · Labor_RowModal · Labor_SkEdit)로 고침 — 옛 Detail 자리 문구가 없어져 낡았음

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-08 16:31:49 +09:00

66 lines
2.8 KiB
Python

"""공용 오른쪽 접는 패널(`ui_template_side_panels.ts`) 시험 — 폭 자르기 · 줄 수.
접기 · 펴기 · 기억은 화면 시나리오(`ui_checks/47-3_로직상세_오른쪽패널.js`)로 봄.
"""
from __future__ import annotations
import json
import re
import shutil
import subprocess
from pathlib import Path
import pytest
ROOT = Path(__file__).resolve().parents[2]
PART = ROOT / "ui_template" / "ui_template_side_panels.ts"
def test_700줄을_넘지_않음():
for path in (PART, PART.with_suffix(".css")):
assert len(path.read_text(encoding="utf-8").splitlines()) <= 700, path.name
@pytest.mark.skipif(shutil.which("node") is None, reason="node 가 없음")
def test_폭_자르기():
"""`clampSideWidth` — 가장 작게 min · 가장 크게 화면 85% · 화면이 좁아도 min."""
found = re.search(
r"^export function clampSideWidth[\s\S]*?^}", PART.read_text(encoding="utf-8"), re.M
)
assert found, "clampSideWidth 를 못 찾음"
script = (
found.group(0).replace("export ", "")
+ "\nconsole.log(JSON.stringify(JSON.parse(process.argv[1])"
+ ".map(([p, m, v]) => clampSideWidth(p, m, v))));"
)
cases = [[100, 280, 1600], [500.4, 280, 1600], [5000, 280, 1600], [500, 280, 200]]
result = subprocess.run(
["node", "--experimental-strip-types", "--no-warnings",
"--input-type=module-typescript", "-e", script, json.dumps(cases)],
capture_output=True, text=True, encoding="utf-8", timeout=60,
) # fmt: skip
assert result.returncode == 0, result.stderr
assert json.loads(result.stdout) == [280, 500, 1360, 280]
def test_따라붙기_끔_옵션():
"""85-5 — `follow: false` = followView 안 부름 · 칸 높이 채움(is-fill) · M02 상세 둘만 씀 · M01 그대로."""
src = PART.read_text(encoding="utf-8")
assert (
'if (opts.follow === false) root.classList.add("is-fill");\n else followView(root);' in src
)
css = PART.with_suffix(".css").read_text(encoding="utf-8")
assert ".ui-side-panels.is-fill {" in css and "overscroll-behavior: contain" in css
m02 = ROOT / "M02_MasterTemplete"
for name in ("M02_MasterTemplete_AreaPanel.ts", "M02_MasterTemplete_Labor_Table.ts"):
assert "follow: false," in (m02 / name).read_text(encoding="utf-8"), name
m01 = (ROOT / "M01_MasterData/M01_MasterData_UI_LogicLab_Side.ts").read_text(encoding="utf-8")
assert "follow" not in m01
style = (m02 / "M02_MasterTemplete_UI_Style.css").read_text(encoding="utf-8")
assert ".m02-main:has(> .m02-main__host > .ui-side-panels-row)" in style
source = (ROOT / "M01_MasterData/M01_MasterData_UI_LogicLab_Source.ts").read_text(
encoding="utf-8"
)
assert 'scrollIntoView({ block: "center" })' not in source and "box.scrollTop +=" in source