fix(B05 되돌리기): 349 열기만 해도 걸음 생김 고침 — 세운 뒤 첫 손길(누름 · 키 · 칸 바꿈) 전 찍기는 첫 사진 다시 뜨기만 · 열 때 초안(표준 횡단면 · 첫 계산 · 되살린 노선 초안)은 열 때 모습 · 조작 한 번 = 걸음 하나
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013QyNXY2TUKXCFMwAca2APG
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
"""346-4 되돌리기 앞일 — 사진 대상 = aislo:draft: 전부 · 누름 중간은 안 찍고 놓을 때 한 번 · 크기.
|
||||
|
||||
349 — 열기만(손길 없음) = 걸음 0 · 열 때 쓰는 초안은 첫 사진 · 조작 한 번 = 걸음 하나.
|
||||
|
||||
./venv/Scripts/python.exe -m pytest resources/tester/test_346_4_profile_history.py -q
|
||||
"""
|
||||
|
||||
@@ -45,6 +47,7 @@ const K = {
|
||||
for (const k of Object.values(K)) sessionStorage.setItem(k, "0");
|
||||
let restored = 0;
|
||||
const h = createProfileHistory(() => (restored += 1));
|
||||
window.dispatchEvent(new Event("keydown")); // 손길 — 열 때가 끝남
|
||||
for (const k of Object.values(K)) sessionStorage.setItem(k, "1");
|
||||
h.record();
|
||||
out.undo = h.undo();
|
||||
@@ -77,6 +80,7 @@ sessionStorage.setItem(K.pipes, big("p"));
|
||||
globalThis.gc();
|
||||
const before = process.memoryUsage().heapUsed;
|
||||
const h3 = createProfileHistory(() => {});
|
||||
window.dispatchEvent(new Event("keydown"));
|
||||
for (let i = 0; i < 100; i += 1) {
|
||||
sessionStorage.setItem("aislo:draft:alignment-draft:p1:7", JSON.stringify({ i }));
|
||||
h3.record();
|
||||
@@ -86,6 +90,33 @@ out.heapMb = (process.memoryUsage().heapUsed - before) / 1024 / 1024;
|
||||
let steps = 0;
|
||||
while (h3.undo()) steps += 1;
|
||||
out.steps = steps;
|
||||
|
||||
// 4. 열기만 — 메뉴 누름(세우기 전) · 열 때 초안 쓰기 · 되살림 찍기 · 놓은 뒤 기다림 = 걸음 0
|
||||
data.clear();
|
||||
sessionStorage.setItem(K.cross, "saved");
|
||||
window.dispatchEvent(new Event("pointerdown"));
|
||||
const h4 = createProfileHistory(() => {});
|
||||
sessionStorage.setItem("aislo:draft:std-cross:p1", "std");
|
||||
sessionStorage.setItem(K.cross, "opened");
|
||||
sessionStorage.setItem(K.route, "kept");
|
||||
h4.record();
|
||||
window.dispatchEvent(new Event("pointerup"));
|
||||
await new Promise((r) => setTimeout(r, 450));
|
||||
out.openCanUndo = h4.canUndo();
|
||||
// 조작 한 번 — 누름 · 계획고 고침 · 놓음 = 걸음 하나 · 되돌리면 열 때 모습
|
||||
window.dispatchEvent(new Event("pointerdown"));
|
||||
sessionStorage.setItem("aislo:draft:alignment-draft:p1:7", "1");
|
||||
window.dispatchEvent(new Event("pointerup"));
|
||||
await new Promise((r) => setTimeout(r, 450));
|
||||
out.editCanUndo = h4.canUndo();
|
||||
h4.undo();
|
||||
out.openState = {
|
||||
grade: sessionStorage.getItem("aislo:draft:alignment-draft:p1:7"),
|
||||
cross: sessionStorage.getItem(K.cross),
|
||||
route: sessionStorage.getItem(K.route),
|
||||
std: sessionStorage.getItem("aislo:draft:std-cross:p1"),
|
||||
};
|
||||
out.oneStep = !h4.canUndo();
|
||||
writeFileSync(process.argv[2], JSON.stringify(out));
|
||||
"""
|
||||
|
||||
@@ -126,3 +157,12 @@ def test_큰_칸_100단도_바뀐_칸만_늚(result) -> None:
|
||||
assert result["steps"] == 99 # 한도 100(첫 사진 포함)
|
||||
# 같은 글을 같이 쓰지 않으면 900 KB × 100 ≈ 90 MB(UTF-8 1바이트 글 기준 · 실제는 더)
|
||||
assert result["heapMb"] < 10, result["heapMb"]
|
||||
|
||||
|
||||
def test_열기만은_걸음_0(result) -> None:
|
||||
assert result["openCanUndo"] is False
|
||||
|
||||
|
||||
def test_조작_한_번은_걸음_하나_되돌리면_열_때(result) -> None:
|
||||
assert result["editCanUndo"] is True and result["oneStep"] is True
|
||||
assert result["openState"] == {"grade": None, "cross": "opened", "route": "kept", "std": "std"}
|
||||
|
||||
Reference in New Issue
Block a user