⚠ **뿌리** — `tmp/` 는 창 사이에 안 건너감(실측 확인: 상대 창이 놓은 `tmp/_sync_probe.txt` 가 시간을 두고 두 번 봐도 안 보임). 그래서 **정본(등록부 스키마)만 건너가고 그것을 읽는 시험은 안 건너가** 오늘 두 번, 같은 시험이 **연 창은 통과·받은 창은 실패**가 됐음. - `tmp/tests/*` 를 `resources/tester/` 로 **복사**(127 파일). 내용은 **한 줄도 안 고침** - `tmp/tests` 는 **남겨 둠** — 되돌릴 자리(사용자 지시) - 실행: `./venv/Scripts/python.exe -m pytest resources/tester/ -q` 옮기기 전과 **같은 수**: 617 통과 / 22 건너뜀 / 실패 0 ⇒ 이제 시험·예외·까닭이 **정본과 함께** 움직임. 오늘 세운 「예외는 정본 스키마에」와 짝임. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
58 lines
2.9 KiB
Python
58 lines
2.9 KiB
Python
"""화면 취향이 **탭을 새로 열어도 남는지** — 저장소가 갈리지 않았는지.
|
|
|
|
왜 (2026-09-07 실측) — 취향(패널 높이·접힘·유토곡선 열림)까지 세션에 있어 **탭을 새로 열거나
|
|
브라우저를 껐다 켤 때마다 초기화**됐다. 계획서에는 「PC 를 바꾸면」으로 적혀 있었으나 실제
|
|
불편은 훨씬 잦았다. 취향은 설계 데이터가 아니므로 브라우저 저장소에 둔다 —
|
|
**설계값·초안·계산 결과는 세션 그대로**이고 그 경계가 이 시험의 요지다.
|
|
|
|
실측 — 옮긴 뒤 새 탭에서 취향 8개가 그대로 섰고 높이도 보존됐다(종단 438px · 표 204px).
|
|
"""
|
|
|
|
import re
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[2]
|
|
_STATE = ROOT / "A00_Common" / "b_page_state.ts"
|
|
#: 키만 들고 저장소를 직접 만지는 화면 공용 부품 — 여기를 안 거치면 취향만 세션에 남는다.
|
|
_HELPERS = (
|
|
ROOT / "ui_template" / "ui_template_resizer.ts",
|
|
ROOT / "ui_template" / "ui_template_overlay.ts",
|
|
ROOT / "ui_template" / "ui_template_overlay_drag.ts",
|
|
)
|
|
|
|
|
|
def test_취향만_브라우저_저장소로_간다():
|
|
source = _STATE.read_text(encoding="utf-8")
|
|
chooser = re.search(r"function storageFor\(key: string\): Storage \{(.*?)\}", source, re.S)
|
|
assert chooser, "저장소를 고르는 자리가 없음"
|
|
body = chooser.group(1)
|
|
assert 'key.startsWith("aislo:pref:")' in body, "취향 말고 다른 통까지 가릴 수 있음"
|
|
assert "localStorage" in body and "sessionStorage" in body, "두 저장소를 다 안 씀"
|
|
|
|
|
|
def test_설계값은_세션_그대로다():
|
|
"""초안·결과가 브라우저 저장소로 새면 프로젝트를 옮겨도 남는다 — 그 경계를 지킨다."""
|
|
source = _STATE.read_text(encoding="utf-8")
|
|
for bucket in ("aislo:draft:", "aislo:result:"):
|
|
assert f'startsWith("{bucket}")' not in source, f"{bucket} 까지 저장소를 갈랐음"
|
|
|
|
|
|
def test_화면_공용_부품도_같은_판단을_쓴다():
|
|
for path in _HELPERS:
|
|
source = path.read_text(encoding="utf-8")
|
|
assert "ByKey(" in source, f"{path.name} 이 저장소를 직접 고르고 있음"
|
|
# 남은 날 `sessionStorage.` 직접 호출이 있으면 그 값만 세션에 남아 갈린다.
|
|
leftovers = [
|
|
line
|
|
for line in source.splitlines()
|
|
if re.search(r"(?<![.\w])sessionStorage\.(get|set|remove)Item\(", line)
|
|
]
|
|
assert not leftovers, f"{path.name} 에 세션 직접 호출이 남음: {leftovers[:2]}"
|
|
|
|
|
|
def test_옛_세션_취향을_한_번_옮긴다():
|
|
"""이 변경 때문에 쓰던 패널 크기가 초기화되지 않게 — 첫 로드 때 쓸어 옮긴다."""
|
|
source = _STATE.read_text(encoding="utf-8")
|
|
assert "function liftPrefsToLocalStorage()" in source, "옮기는 자리가 없음"
|
|
assert re.search(r"^liftPrefsToLocalStorage\(\);", source, re.M), "부르는 자리가 없음"
|