Files
Aislo/resources/tester/test_261_1_b08_milestone_km_fmt.py
T
eomsangdonandClaude Sonnet 5.5 4737756502 fix(b08): 거리이정표 km 칸 끝수 정리 — 3자리 반올림 · 끝 0 지움 · 안 고치면 저장 m 그대로 (261-1)
- 시점 창 · 구간 창 · 다이어그램 선 위 km 칸 · 자동 값 글 = 같은 도우미(fmtKm)
- 안 고친 칸은 반올림 값으로 덮지 않음
- 시험 test_261_1 추가 · test_255_1 기대값만 고침

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018jonfdxn1Xit9bdkNJpE4G
2026-10-11 15:17:40 +09:00

72 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""261-1 거리이정표 km 칸 끝수 — 보이는 km = 3자리(1 m) 반올림 · 끝 0 지움 · 안 고치면 저장 m 그대로 ·
고치면 km × 1000 → m(끝수 없이)."""
import json
import re
import subprocess
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
IMPORTS = re.compile(r"^import[^;]*;\n", re.MULTILINE)
UI = "B08_Quantity/B08_Quantity_UI_Milestone"
def _read(rel):
return (ROOT / rel).read_text(encoding="utf-8")
def _node(src, expr):
result = subprocess.run(
["node", "--experimental-strip-types", "--no-warnings",
"--input-type=module-typescript", "-e",
IMPORTS.sub("", src) + f"\nconsole.log(JSON.stringify({expr}));"],
capture_output=True, text=True, encoding="utf-8", timeout=60,
) # fmt: skip
assert result.returncode == 0, result.stderr
return json.loads(result.stdout)
def _fmt(values):
modal = _read(f"{UI}_Modal.ts")
line = next(ln for ln in modal.splitlines() if ln.startswith("export const fmtKm"))
return _node(line.replace("export ", ""), f"{json.dumps(values)}.map(fmtKm)")
def test_km_글_3자리_끝0_지움():
assert _fmt([576.595 / 1000, 0.3, 0.1 + 0.2, 12, 0, 1.2345, 0.0005, 2 / 3]) == [
"0.577", "0.3", "0.3", "12", "0", "1.235", "0.001", "0.667",
] # fmt: skip
def test_고치면_km_곱하기_1000_끝수_없이():
layout = _read("B08_Quantity/B08_Quantity_Milestone_Layout.ts")
data = {"site": {"mid_station_m": 576.595, "mid_road": "비포장"}, "base": {}, "routes": []}
expr = f'setLeg({json.dumps(data)}, "start", 0, {{ km: 0.3 }}).site.mid_station_m'
assert _node(layout, expr) == 300
# 안 고침 = km 키 없는 patch → 저장 m 그대로
expr = f'setLeg({json.dumps(data)}, "start", 0, {{ road: "비포장" }}).site.mid_station_m'
assert _node(layout, expr) == 576.595
def test_모든_km_칸_같은_규칙():
modal = _read(f"{UI}_Modal.ts")
site = modal[modal.index("export function openSiteInfo") :]
assert "fmtKm(data.site.mid_station_m / 1000)" in site
assert "fmtKm(site.mid_default_m / 1000)" in site
assert "...(text === shown ? {} : { km })" in site # 안 고침 = 덮지 않음
leg = _read(f"{UI}_LegModal.ts")
assert "fmtKm(data.site.mid_station_m / 1000)" in leg
assert "fmtKm(site.mid_default_m / 1000)" in leg
assert "...(dist.input.value === shown ? {} : { km: km(dist.input.value) })" in leg
assert "dist.value === shown ? orig : km(dist.value)" in leg # 구간 줄
assert "fmtKm(leg.km)" in leg and "fmtKm(auto)" in leg
diagram = _read(f"{UI}_Diagram.ts")
assert "fmtKm(leg.km)" in diagram and "fmtKm(leg.auto_km)" in diagram
assert "km.value === shown" in diagram # 선 위 km 고치기 칸 · 안 고침 = 덮지 않음
for src in (modal, leg, diagram):
assert "String(leg.km)" not in src and "mid_station_m / 1000)" not in src.replace(
"fmtKm(data.site.mid_station_m / 1000)", ""
) # 맨 String 변환 없음