Files
Aislo/resources/tester/test_390_4_snap_step_text.py
T
eomsangdonandClaude Opus 5.5 20d0fd5e51 fix(483-1·2 B05 스냅): 일반측점을 MC 로 옮기지 않음 · MC 특별측점 더함 · 스냅 간격 1 m · 0.1 m 지움
- 서버 snap_curve_stations ↔ TS snapCurveStations · gridIndices 지움 — 스냅 켬 = 끔과 같은 측점(20 m 그대로 + 「No.N+10 (MC)」)
- 고르기 = 10 m · 측점 No. 둘 · load_station_snap_step = 10 만 · 옛 0.1 · 1 = 측점 No.
- 시험 = 새 test_280_4_stations(거울 다섯 경우) · 224_2 · 344_3 · 366_3 · 390_4 · 390_5 · 407 고쳐 씀

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 21:58:53 +09:00

74 lines
2.7 KiB
Python

"""390-4 스냅 상태줄 글 = 고른 간격 따라 — `B05_Profile_UI_RouteEdit_SnapStep.ts` 의 `snapFitText`
를 Node 로 돌려 간격별 글 판정 + 편집기 두 자리(전체 · 놓을 때)가 그 글을 씀.
./venv/Scripts/python.exe -m pytest resources/tester/test_390_4_snap_step_text.py -q
"""
import json
import subprocess
from pathlib import Path
import pytest
ROOT = Path(__file__).resolve().parents[2]
B05 = ROOT / "B05_Profile"
SNAP = B05 / "B05_Profile_UI_RouteEdit_SnapStep.ts"
TS = ROOT / "config" / "node_modules" / "typescript"
STEPS = ["10", "station"] # 280-4 — 0.1 · 1 m 지움
NODE = """
const fs = require("fs");
const ts = require(process.argv[1]);
const js = ts.transpileModule(fs.readFileSync(process.argv[2], "utf8"), {
compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 },
}).outputText;
const box = { exports: {} };
new Function("exports", "module", "require", js)(box.exports, box, () => ({}));
const steps = JSON.parse(process.argv[3]);
console.log(JSON.stringify(Object.fromEntries(steps.map((s) => [s, box.exports.snapFitText(s)]))));
"""
@pytest.fixture(scope="module")
def texts() -> dict:
run = subprocess.run( # noqa: S603 — 고정 실행 파일
["node", "-e", NODE, str(TS), str(SNAP), json.dumps(STEPS)],
capture_output=True,
text=True,
encoding="utf-8",
timeout=60,
)
assert run.returncode == 0, run.stderr
return json.loads(run.stdout)
@pytest.mark.parametrize(
("step", "want"),
[
("station", "곡선 가운데(MC)를 일반측점에 맞췄습니다."),
("10", "곡선 가운데(MC)를 10 m 배수에 맞췄습니다."),
],
)
def test_간격별_상태줄_글(texts, step, want) -> None:
assert texts[step] == want
def test_편집기는_고른_간격_글을_씀() -> None:
edit = (B05 / "B05_Profile_UI_RouteEdit.ts").read_text(encoding="utf-8")
assert "일반측점에 맞췄" not in edit
assert edit.count("applyEdit(snap.text())") == 1 # 켬 · 간격 바꿈
assert 'applyEdit(stationSnap ? snap.text() : "옮겼습니다.")' in edit # 놓을 때(430)
snap = SNAP.read_text(encoding="utf-8")
assert "text: () => snapFitText(select.value)" in snap
def test_고르기는_10_m_측점_No_둘() -> None:
"""280-4 — 고르기 option 둘 · STEPS 둘(옛 pref 0.1 · 1 = 측점 No.)."""
import re
chrome = (B05 / "B05_Profile_UI_RouteEdit_Chrome.ts").read_text(encoding="utf-8")
block = chrome[chrome.index('data-act="snap-step"') :]
block = block[: block.index("</select>")]
assert re.findall(r'<option value="([^"]+)"', block) == ["10", "station"]
assert 'const STEPS = ["10", "station"];' in SNAP.read_text(encoding="utf-8")