- 화면: 왼쪽 층 고름(개인·회사·마스터) · 머리 층 배지 · 작업 중 줄의 층 글 걷음(Hopyo_Side · Hopyo_Import) - 서버: 불러오기 길(Hopyo_Router)은 경로 층 · 주인 · 몸 층을 무시하고 개인 층 고정 · 단산 블록 → 가져온 식(from-hopyo · preview)도 개인 층 - 시험: 새 지킴 시험 test_837_1 · 낡은 시험 고침(785_4 층 고름 → 층 가르기 없음 · dirty 글 / 705_2 남의 층 403 → 경로 층 무시 200) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
76 lines
3.8 KiB
Python
76 lines
3.8 KiB
Python
"""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(MINE, file)" in change and "return show(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: [finish]" in imp
|
|
|
|
|
|
def test_층_가르기_없음_늘_개인(): # 837-1 · 요구 855 — 예전 「결과 층 고름」 걷음
|
|
side, imp = _src("Side"), _src("Import")
|
|
for gone in ("createSegment", "writableLayers", "LAYERS", "layerText", "seg.hidden", "pick"):
|
|
assert gone not in side, gone
|
|
for gone in ("LAYERS", "layerText", "writableLayers", "layerNote", "createBadge"):
|
|
assert gone not in imp, gone
|
|
assert 'export const MINE: HopyoScope = { layer: "personal", owner: null };' in imp
|
|
|
|
|
|
def test_끝내기_머리_막대_끝냄_뒤_빈_본_칸():
|
|
imp = _src("Import")
|
|
end = imp.split("async function end()")[1]
|
|
assert (
|
|
"skCount()" 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)"|<button|<input', _src(name)), name
|
|
assert 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_해시_캐시_열쇠_없음():
|
|
# 809-1 — 판정 고름 캐시(`Hopyo_Picks`) 걷음 · 옮기기 = [내 일위대가로]
|
|
assert not (M02 / "logic" / "M02_MasterTemplete_Hopyo_Picks.ts").exists()
|
|
assert "draftKey" not in _src("Import") and "dirty: () => body?.matDirty()" in _src("Import")
|
|
assert "location.hash" not in _src("Import") + _src("Side") # 새 해시 열쇠 없음
|