From 82ab2c60b72c090e9b98f25136aebdae938c2457 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Fri, 16 Oct 2026 12:19:58 +0900 Subject: [PATCH] =?UTF-8?q?test(B05=20=EB=B0=B0=EC=88=98=EC=9C=A0=EC=97=AD?= =?UTF-8?q?):=20347=20=EB=8D=A7=202=20test=5F298=20=C2=B7=20test=5F126=20?= =?UTF-8?q?=EB=B3=B8=EB=AC=B8=20=EA=B2=80=EC=82=AC=20=EC=9E=90=EB=A6=AC=20?= =?UTF-8?q?=E2=80=94=20=EC=9A=94=EC=B2=AD=20=EA=B0=90=EC=8B=B8=EA=B8=B0?= =?UTF-8?q?=EB=A5=BC=20=EB=82=98=EB=88=88=20B05=5FProfile=5FUI=5FDrainage?= =?UTF-8?q?=5FRun=20=EC=9D=84=20=EB=B4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 동작 그대로(최신 응답만 · 지도 칸 표시만 · 실패 토스트 한 줄) · 검사 자리만 판 → _Run · 판은 createDetailRunner 에 apply · label 넘김 확인 - test_298 12 · test_126 9 통과 · 판 · 배수유역 파일을 읽는 옛 시험 19 파일 다시 돌려 모두 통과 Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01XWh5wNNycMkbwMpACz1rte --- resources/tester/test_126_ford_right_click.py | 11 +++++----- resources/tester/test_298_add_reanalyze.py | 21 ++++++++++++------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/resources/tester/test_126_ford_right_click.py b/resources/tester/test_126_ford_right_click.py index cdfff91e9..4be5a8a71 100644 --- a/resources/tester/test_126_ford_right_click.py +++ b/resources/tester/test_126_ford_right_click.py @@ -87,13 +87,14 @@ def test_관이_사라지거나_종류가_바뀌면_그만_기다림(out): def test_배수유역_패널_배선(): src = _read("B05_Profile", "B05_Profile_UI_Drainage_Panel.ts") - # 최신 응답만 채택 - run = src[src.index("async function run(") : src.index("/** 지금 관 목록")] + # 최신 응답만 채택 — 요청 감싸기는 347-2 에 `B05_Profile_UI_Drainage_Run.ts` 로 나눔 + runner = _read("B05_Profile", "B05_Profile_UI_Drainage_Run.ts") + run = runner[runner.index("async run(") :] assert "const seq = ++requestSeq;" in run - assert run.index("await request()") < run.index("if (seq !== requestSeq) return;") - assert run.index("if (seq !== requestSeq) return;") < run.index("apply(response)") + assert run.index("await request()") < run.index("if (seq !== requestSeq) return false;") + assert run.index("if (seq !== requestSeq) return false;") < run.index("deps.apply(response)") # 채움은 보관소가 응답을 받기 전에 · 채웠으면 세션 초안에 다시 담음 - apply = src[src.index("function apply(") : src.index("async function run(")] + apply = src[src.index("function apply(") : src.index("const runner = createDetailRunner(")] order = [ apply.index("fillFordHeights(response.pipe_points, response.basins, fordWaits())"), apply.index("facilityStore.replaceFromResponse(response.pipe_points)"), diff --git a/resources/tester/test_298_add_reanalyze.py b/resources/tester/test_298_add_reanalyze.py index 8fcfe4b8b..0e6d99d7e 100644 --- a/resources/tester/test_298_add_reanalyze.py +++ b/resources/tester/test_298_add_reanalyze.py @@ -40,6 +40,8 @@ def out(): PANEL = _read("B05_Profile", "B05_Profile_UI_Drainage_Panel.ts") +# 세부유역 요청 감싸기 — 347-2 에 판에서 나눔(`createDetailRunner` · 판이 `label` · `apply` 넘김) +RUN = _read("B05_Profile", "B05_Profile_UI_Drainage_Run.ts") B06 = _read("B06_Section", "B06_Section_UI_Page_Structures_Panel.ts") CROSS = _read("A00_Common", "design", "design_view_cross.ts") @@ -72,7 +74,7 @@ def test_B06_추가_순간_기다림_적고_초안_씀(): def test_판은_같은_표로_채움(): assert "const fordWaits = () => fordWaitsOf(projectId);" in PANEL - assert "new Set()" not in _body(PANEL, "let requestSeq = 0;", "let canvasWidth") + assert "new Set()" not in _body(PANEL, "let loadSequence = 0;", "let canvasWidth") def test_채운_높이를_B06_목록_폼이_받음(): @@ -107,7 +109,7 @@ def test_다시_나눔은_세션_초안으로_계산만_저장_안_함(): assert "computeDetailBasins(projectId as string, pending)" in load analyze = _body(PANEL, "const analyze = ", "analyzeButton.addEventListener") assert "computeDetailBasins(" in analyze - run = _body(PANEL, "async function run(", "/** 지금 관 목록") + run = RUN[RUN.index("async run(") :] assert "saveDetailPipePoints" not in run + load + analyze # B05 [추가] = 판 addPipe → 배치 바뀜 → 초안 + 다시 나눔 commit = _body(PANEL, "const pipeEditor = createPipeEditor(", "(fromM, toM) =>") @@ -115,21 +117,24 @@ def test_다시_나눔은_세션_초안으로_계산만_저장_안_함(): def test_최신_응답만_잠금_없이_지도_칸_표시(): - run = _body(PANEL, "async function run(", "/** 지금 관 목록") + run = RUN[RUN.index("async run(") :] assert "const seq = ++requestSeq;" in run - assert run.index("if (seq !== requestSeq) return;") < run.index("apply(response)") + assert run.index("if (seq !== requestSeq) return false;") < run.index("deps.apply(response)") # 지도 칸 안 작은 표시(문구 · 지도 가운데 서클)만 — 화면 전체 잠금 없음 - assert 'status.textContent = L("B05_Drainage_Status_Analyzing");' in run - assert 'showProgress(null, L("B05_Drainage_Status_Analyzing"));' in run + assert 'status.textContent = label("B05_Drainage_Status_Analyzing");' in run + assert 'showProgress(null, label("B05_Drainage_Status_Analyzing"));' in run + wire = _body(PANEL, "const runner = createDetailRunner({", "});") + assert " apply," in wire and " label: L," in wire assert "Overlay" not in run and "lock" not in run.lower() chrome = _read("B05_Profile", "B05_Profile_UI_Drainage_Chrome.ts") assert "viewport.append(" in chrome and "progress.root," in chrome def test_실패하면_토스트_한_줄(out): - run = _body(PANEL, "async function run(", "/** 지금 관 목록") + run = RUN[RUN.index("async run(") :] assert ( - 'status.textContent = analyzeFailed(error, L("B05_Drainage_Status_AnalyzeFailed"));' in run + 'status.textContent = analyzeFailed(error, label("B05_Drainage_Status_AnalyzeFailed"));' + in run ) failed = out["failed"] assert failed["status"] == "502 Bad Gateway"