Files
Aislo/resources/tester/test_m02_so_def_spec.py
T
eomsangdonandClaude Opus 5.5 2471a14a62 feat(M02): 구조물 옵션 정의 = 정의 그룹 꼴 종류도 이름 나무 · 옛 편집기 모든 종류에서 숨김(52-12)
- 명세 없는 종류 = 그룹 제목(그룹.이름) › 칸 이름(옵션 label) › 선택지 이름(종류.이름 `{옵션}={값}` · 값 그대로) · 그룹 밖 칸은 머리 줄 아래
- 칸 더하기 · 빼기 · 꼴 · 필수는 읽기만 · 칸 없는 종류(개거 · 노출형 횡단수로)는 「고칠 이름 없음」 · 종류 이름은 머리 칸
- 옛 편집기(옵션 · 배치 · 그룹 · 규칙 · 기준 측점)는 OLD_EDITOR 거짓으로 숨김(코드 그대로)
- 미리보기 = B05 칸 부품(field · optionControl · 그룹 상자)으로 같은 차례
- B05 · B06 고르기 칸 보기 글 = 정의 이름 표(값 그대로 · 규칙 선택지 · 시설 폼 덧보기 포함)
- 시험: test_m02_so_def_spec 정의 그룹 꼴 더함 · 헬퍼가 이웃 TS 를 읽게 고침 · ui_checks/52-11 에 맹암거 · 바닥막이 · 개거 더함

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UoSr2sqvYtBf1dtQdus88s
2026-10-05 23:59:41 +09:00

75 lines
2.7 KiB
Python

"""M02 구조물 명세 이름 고치기(`M02_SO_Def_Spec_Model.ts` · PLAN 52-11) 단위검증.
Node 헬퍼(`helper_m02_so_def_spec.cjs`)가 TS 를 트랜스파일해 진짜 정의 사본(메모리)으로 돌리고
pytest 는 그 결과(JSON)를 판정.
못박는 것
- 배관 명세 나무: 컨테이너 5 · 항목 · 값 줄 · 이름 키 겹침 없음 · 필수/선택 · 꼴 표시.
- 필수 컨테이너 제목은 정의 그룹 이름에 씀 · 항목 · 값 · 선택 컨테이너는 이름 표에 씀.
- 이름만 바뀜 — types(옵션 · 키) 그대로 · 이름 표에 없는 키를 새로 만들지 않음.
- 이름 표가 빈 종류는 명세 글로 읽음.
- 정의 그룹 꼴(52-12): 그룹 제목 › 칸 › 선택지 · 제목 = 그룹 이름 · 칸 = 옵션 이름 ·
선택지 = 이름 표(값 그대로) · 칸 없는 종류는 줄 없음.
"""
from __future__ import annotations
import json
import subprocess
from pathlib import Path
import pytest
HERE = Path(__file__).resolve().parent
@pytest.fixture(scope="module")
def r() -> dict:
proc = subprocess.run(
["node", str(HERE / "helper_m02_so_def_spec.cjs")],
capture_output=True,
text=True,
encoding="utf-8",
timeout=60,
)
assert proc.returncode == 0, proc.stderr
return json.loads(proc.stdout)
def test_배관_나무(r) -> None:
assert r["levels"][0] == 5
assert r["levels"][1] > 5 and r["levels"][2] > 10
assert r["unique"] is True
assert r["pipeTitle"]["tag"] == "required" and r["pipeTitle"]["group"] == "grv6lny"
assert r["optional"]["tag"] == "optional" and r["optional"]["group"] is None
assert r["basinForm"]["label"] == "I형" and r["basinForm"]["key"] == "I"
def test_이름_고침_자리(r) -> None:
assert r["groupName"] == "관 본체"
assert r["names"] == [None, "관 지름", "Ø800", "흙막이 더"]
assert r["reread"] == ["관 본체", "관 지름", "Ø800", "흙막이 더"]
def test_구조는_그대로(r) -> None:
assert r["sameTypes"] is True and r["sameKeys"] is True
def test_이름_표_없는_종류(r) -> None:
assert r["bareLabel"] == "흙막이"
assert r["bareGroup"] == "유입"
def test_정의_그룹_꼴(r) -> None:
assert r["udRows"] == [
[0, "#gcrossud", "맹암거"],
[1, "culvert_height_m", "암거 높이"],
[1, "culvert_slope_pct", "암거 경사"],
]
assert r["udGroup"] == "맹암거 본체" and r["udLabel"] == "암거 높이 칸"
assert r["sideHead"]["nameKey"] == "" and r["sideHead"]["level"] == 0
assert r["sideChoice"] == [2, "L형"]
assert r["sideName"] == "L 모양" and r["sideReread"] == "L 모양"
assert "L형" in r["sideChoices"]
assert r["bareKind"] == 0