"""785-4 불러오기 화면 껍데기 — 가운데 상세 페이지(마법사) 없음 · 왼쪽 [불러오기] → 바로 본 칸 엑셀 + 오른쪽 목록 · 머리 막대 [끝내기] · 좁은 판 줄 판 자리 · 부품 상자만 · 700 줄(785-7 — 안 이은 줄 띠 · 마법사 단가산출 걸음 · 옛 캐시 걷음 반영). 소스 글만 읽음(서버 · 화면 없이 돎).""" 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, 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_줄_판_자리_좁은_폭(): # 셈 중(블록 풀이) = 3 초마다 다시 읽음 · 줄 판 = 시트 아래 넓은 자리 · 좁은 폭 = 줄 판 높이 바닥 assert "POLL_MS" in _src("SheetSk") and "POLL_MS" in _src("Sheet") sheet = _src("Sheet") assert 'attrs: { "data-hopyo-lines": "" }' in sheet and "openLines," in sheet assert "openLines: (make: (host: HTMLElement)" in _src("SheetSk") # 785-6 줄 판 자리 한 손잡이 css = (M02 / "M02_MasterTemplete_Hopyo.css").read_text(encoding="utf-8") narrow = css.split("/* 좁은 폭(785-7 · 390)")[1].split("/*")[0] assert ".m02-hopyo-sheet__lines:not([hidden])" in narrow and "min-height: 16rem;" in narrow def test_끝내기_머리_막대_끝냄_뒤_빈_본_칸(): imp = _src("Import") end = imp.split("async function end()")[1] assert "unmoved()" in end.split("showConfirmDialog(")[0] # 확인하고 안 옮긴 수 = 물음 글만(막지 않음) 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", "SheetSk"): 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", "SheetSk"): assert not re.search(r'el\("(button|input|select)"|