- test_b05_structures_registry_policy: 우클릭 목록 수 28 · 끈 종류 목록 · 바닥막이 켬 단언 → 마스터 파일(켬 · 끔 · managed_by)과 같은지로(수 · 이름 안 박음) · 맹암거 암거 높이 3 m · 경사 3 % = 사용자 지시(요구 223 · 4baf49ba4) 근거로 허용 목록
- test_prefs_persist_across_tabs: 388-3 세션 넘침 때 결과 칸 비우는 글(setOrMakeRoom)을 저장소 가름으로 오판 → storageFor 안만 판정
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
64 lines
3.3 KiB
Python
64 lines
3.3 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_설계값은_세션_그대로다():
|
|
"""초안·결과가 브라우저 저장소로 새면 프로젝트를 옮겨도 남는다 — 그 경계를 지킨다.
|
|
|
|
판정 = 저장소를 고르는 자리(`storageFor`)만 — 세션 한도 넘침 때 결과 칸을 비우는 자리(388-3
|
|
`setOrMakeRoom`)는 세션 안에서 지울 열쇠를 고를 뿐 저장소를 가르지 않음.
|
|
"""
|
|
source = _STATE.read_text(encoding="utf-8")
|
|
chooser = re.search(r"function storageFor\(key: string\): Storage \{(.*?)\}", source, re.S)
|
|
assert chooser, "저장소를 고르는 자리가 없음"
|
|
for bucket in ("aislo:draft:", "aislo:result:"):
|
|
assert bucket not in chooser.group(1), 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), "부르는 자리가 없음"
|