Files
Aislo/resources/tester/test_785_4_import_screen.py
T
eomsangdonandClaude Opus 5.5 dcecc0b326 feat(785-6): 엑셀 보기에 줄 판 · 블록 판 · [옮기기] 이음
- Hopyo_Sheet.ts: [수정] = 시트 아래 줄 판(createJudgeRows · 그 호표 자리 뜀) · 오른쪽 판 아래 [옮기기](createJudgeMove) · 고름 캐시 한 벌 · 옮긴 뒤 목록 · 칠 · 단가산출 목록 다시 읽음
- Hopyo_SheetSk.ts: 단가산출 목록 = 새 블록 판정(hopyo-judge 목록 · 판정 · 고를 것 n · 표지 · 부름 · 만든 SK · 캐시 확인) · 줄 누름 = 그 자리 + 블록 판(createJudgeBlock)
- Hopyo_JudgeApi.ts: 목록 블록 줄 판정 · 고를수 · Block.ts 타입 흠 둘
- 낡은 시험 고침(까닭 = 785-6 이 옛 마법사 단가산출 칸 · 확인 창을 새 판으로 갈음): test_627_sheet_sk(판 바꿈 · 강조 · 뛰기를 새 목록으로 · helper_778_5 sheetSk 대역 새 꼴) · test_785_4 줄 판 자리 손잡이 · test_m02_hopyo_screen [수정] = 줄 판
- test_642_6: 엑셀 보기 이음 · 가운데 페이지 없음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-04 23:16:43 +09:00

92 lines
4.6 KiB
Python

"""785-4 불러오기 화면 껍데기 — 가운데 상세 페이지(마법사) 없음 · 왼쪽 [불러오기] → 바로 본 칸 엑셀 + 오른쪽 목록 ·
머리 막대 [끝내기] · 흠 셋(안 이은 줄 0 오표시 · 「맞춤 셈 중」 멈춤 · 좁은 판 단가산출 줄 짓눌림) · 부품 상자만 · 700 줄.
소스 글만 읽음(서버 · 화면 없이 돎)."""
import re
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
M02 = ROOT / "M02_MasterTemplete"
def _src(name: str) -> str:
return (M02 / f"M02_MasterTemplete_Hopyo_{name}.ts").read_text(encoding="utf-8")
def test_가운데_상세_페이지_없음():
assert not (M02 / "M02_MasterTemplete_Hopyo_Wizard.ts").exists()
every = "\n".join(p.read_text(encoding="utf-8") for p in M02.glob("*.ts"))
for gone in ("buildHopyoWizard", "HopyoWizard", "wantSangeun", "M02_WizSkCheck", "STEPS"):
assert gone not in every, gone
for key in ("M02_WizSkHead", "M02_WizIlwiHead", "M02_SkHint"):
assert key not in (ROOT / "ui_template" / "ui_template_locale_m2.ts").read_text("utf-8")
def test_누름_하나_바로_엑셀():
side = _src("Side")
choose = side.split("async function choose()")[1].split("input.addEventListener")[0]
assert "input.click();" in choose # [불러오기] = 바로 파일 고르기 창
change = side.split('input.addEventListener("change"')[1].split("async function leaveOk")[0]
assert (
"uploadHopyo(scopeOf(pick), file)" in change and "return show(pick, got, true);" in change
)
show = side.split("async function show(")[1].split("async function showLedger")[0]
assert "buildHopyoImport({" in show and "opt.show(" in show # 올림 뒤 본 칸 바로
imp = _src("Import")
assert "m.buildHopyoSheet({" in imp and "headExtra: [layerNote, badge, pickBtn, finish]" in imp
def test_결과_층_고름_둘_이상일_때만():
side = _src("Side")
assert "layers.length > 1" in side and "seg.hidden = false;" in side
assert "seg.hidden = true;" in side # 처음 숨김 — 일반(개인 하나)은 안 보임
assert 'let pick: ManageLayer = "personal";' in side
def test_흠_셋_고침():
imp = _src("Import")
# ① 안 이은 줄 0 오표시 — 빈 호표 번으로 안 부름 · 엑셀 보기가 읽은 번을 씀
pick = imp.split("async function openPick()")[1].split("async function ensureNos")[0]
assert "await ensureNos();" in pick
assert "nos = got.호표.map((h) => h.번)" in imp
assert "ensureNos" in imp.split("async function recount()")[1]
# ② 「맞춤 셈 중」(409) = 3 초마다 저절로 다시 판정
sk = _src("WizardSk")
assert "error instanceof StaleError" in sk and "void judge()" in sk and "POLL_MS" in sk
# ③ 좁은 판 줄 짓눌림 — [줄 n] = 시트 아래 줄 판(넓은 줄 표) · 판 안 펼침 없음
assert "skLineTable({" in sk.split("function drawLines()")[1]
assert "is-sub" not in sk and "o.narrow" not in sk
sheet = _src("Sheet")
assert 'attrs: { "data-hopyo-lines": "" }' in sheet and "openLines," in sheet
assert "openLines: (make: (host: HTMLElement)" in _src("SheetSk") # 785-6 줄 판 자리 한 손잡이
def test_끝내기_머리_막대_끝냄_뒤_빈_본_칸():
imp = _src("Import")
end = imp.split("async function end()")[1]
assert end.index("await recount()") < end.index("showConfirmDialog(")
assert "deleteHopyo(scope, file.키)" in end and "a.onEnded();" in end
side = _src("Side")
assert "onEnded: () => {" in side and "void refresh();" in side
sheet = _src("Sheet")
assert "dropButton" not in sheet and "onDeleted" not in sheet # [삭제] 걷음
def test_부품_상자만_700줄_늘리지_않음():
for name in ("Import", "Side", "Sheet", "SheetMake", "SheetSk", "WizardSk"):
src = _src(name)
assert len(src.splitlines()) <= 700, name
assert not re.search(r"#[0-9a-fA-F]{3,6}\b|rgb\(", src), name # 색 = 공통 값
for name in ("Import", "SheetMake", "SheetSk", "WizardSk"):
assert not re.search(r'el\("(button|input|select)"|<button|<input', _src(name)), name
assert len(_src("Check").splitlines()) <= 662 and len(_src("Api").splitlines()) <= 632
css = (M02 / "M02_MasterTemplete_Hopyo.css").read_text(encoding="utf-8")
assert not re.search(r"#[0-9a-fA-F]{3,6}\b|rgb\(", css) and ".m02-hopyo-import" in css
def test_해시_캐시_열쇠_그대로():
check = _src("Check")
assert "m02-hopyo-check:" in check # 확인 창 캐시 열쇠
assert "m02-hopyo-sk:" in _src("WizardSk") # 단가산출 캐시 열쇠
assert "location.hash" not in _src("Import") + _src("Side") # 새 해시 열쇠 없음