# -*- coding: utf-8 -*- """배수유역 판 기본 닫힘(계획서 392-1). 진짜 `b_page_state.ts` 를 가짜 저장소 위에서 돌림 — 옛 기억("false" · 옛 키 · 판 없는 키)은 버리고 기억 없음 = null. 판은 "false"(사용자가 펼친 기억)만 펼침 · B06 도 같은 전역 키. """ import json import os import subprocess HERE = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.dirname(os.path.dirname(HERE)) NODE = r""" const path = require("path"), fs = require("fs"); const ts = require(path.join(process.argv[1], "config", "node_modules", "typescript")); const src = fs.readFileSync(path.join(process.argv[1], "A00_Common", "b_page_state.ts"), "utf8"); const js = ts.transpileModule(src, { compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 } }).outputText; const mk = (init) => { const m = new Map(Object.entries(init)); return { getItem: (k) => (m.has(k) ? m.get(k) : null), setItem: (k, v) => m.set(k, String(v)), removeItem: (k) => m.delete(k), key: (i) => [...m.keys()][i] ?? null, get length() { return m.size; }, _m: m }; }; const local = mk({ "aislo:pref:drainage-collapsed": "false", "b05-route-drainage-collapsed": "false" }); const window = { localStorage: local, sessionStorage: mk({}) }; const exports = {}; new Function("exports", "window", "require", js)(exports, window, () => ({})); const out = { key: exports.stateKey("drainage-collapsed"), old: exports.readStateRaw("drainage-collapsed") }; exports.writeStateRaw("drainage-collapsed", "false"); out.kept = exports.readStateRaw("drainage-collapsed"); process.stdout.write(JSON.stringify(out)); """ def test_old_memory_dropped_and_new_kept(): res = subprocess.run( ["node", "-e", NODE, ROOT], capture_output=True, text=True, encoding="utf-8", check=True ) out = json.loads(res.stdout) assert out["key"] == "aislo:pref:drainage-collapsed-v2" assert out["old"] is None # 옛 "false" 두 키 모두 안 읽음 assert out["kept"] == "false" # 새 기억은 그대로 def test_panel_default_closed(): with open( os.path.join(ROOT, "B05_Profile", "B05_Profile_UI_Drainage_Panel.ts"), encoding="utf-8" ) as f: src = f.read() # 기억 없음(null) = 닫힘 · "false" 만 펼침 assert 'setCollapsed(readStateRaw("drainage-collapsed") !== "false")' in src