Files
Aislo/resources/tester/test_b05_structures_define.py
T
eomsangdonandClaude Opus 5.5 fc54a385df feat(B05): 48-3 · 48-4 구조물 배치 칸 = 구조물 정의대로 그림
- 정의 덧칸 얹기 — GET /m02/structure-definition 의 구조물군 이름 · 기준측점 · 동작 · 배치 · 규칙 · 그룹 형상을 종류에 얹음(못 받으면 옛 화면 그대로)
- 레지스트리 칸 — 배치(줄 · 칸 · 너비) 격자 · 차례 · 안 씀(enabled:false) · 규칙(선택지 · 보이기 · 기본값) 즉시 적용 · 규칙이 가린 칸은 저장 안 건드림
- 손코딩 시설 폼(동작 계곡통과시설) — 안 씀 · 선택지 · 규칙을 칸 표식으로 붙임 · 배치 · 이름은 손코딩 그대로
- 지난 정의 값 — 지금 정의에 없는 키 값을 읽기만 상자로
- 그룹 형상 칸 — 길이 · 높이 · 전 · 후 받기 켬끔 · 값은 옵션 {그룹 id}__{칸}
- 정의에서 뺀 선택지를 고른 옛 값은 그 값만 남겨 보임
- 시험 test_b05_structures_define 8 · 헬퍼 문맥 groupBoxes 로

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BVPp2o6Mh2FZJr72yW3ofZ
2026-10-05 16:15:37 +09:00

81 lines
2.7 KiB
Python

# -*- coding: utf-8 -*-
"""B05/B06 「구조물 배치」 칸 = 구조물 정의대로 — PLAN 48-3 · 48-4 (2026-10-05).
정의(`구조물정의.json`)가 주는 차례 · 배치 격자 · 안 씀(`enabled:false`) · 규칙(상위 값 → 하위
선택지 · 보이기 · 기본값) · 지난 정의 값 · 그룹 형상 칸 · 정의 덧칸 얹기를 본다.
판 1 정의로는 지금 화면과 같음(차례 그대로 · 2열 · 기준 측점 보임).
순수 규칙은 Node 헬퍼(`helper_b05_structures_define.cjs`)가 돌림 · 화면은 ORCA `ui_checks/48-3_구조물배치_정의그리기.js`.
"""
import json
import os
import subprocess
import pytest
HERE = os.path.dirname(os.path.abspath(__file__))
@pytest.fixture(scope="module")
def out():
proc = subprocess.run(
["node", os.path.join(HERE, "helper_b05_structures_define.cjs")],
capture_output=True,
text=True,
encoding="utf-8",
timeout=60,
)
assert proc.returncode == 0, proc.stderr
return json.loads(proc.stdout)
def test_차례는_배치_줄_칸_뒤는_정의_차례_안씀_숨김_뺌(out):
assert out["order"] == ["t", "p", "q"]
def test_격자_칸수와_자리(out):
assert out["columns"] == 2
assert out["columnsNone"] == 2
assert out["placeT"] == {"row": "1", "column": "1 / span 2"}
assert out["placeNone"] is None
def test_규칙_선택지_보이기_사슬(out):
assert out["stateA"]["q"]["choices"] == ["b", "c"]
assert out["stateA"]["t"]["visible"] is False # q=c → t 가림
assert out["stateB"]["q"]["visible"] is False # p=b → q 가림
assert out["stateB"]["t"]["visible"] is True # 가려진 q 에 매인 줄은 안 걸림
def test_규칙_기본값(out):
assert out["defaultsA"] == {"q": "c"}
assert out["defaultsB"] == {}
def test_지난_정의_값(out):
assert out["stale"] == [["old_key", 3]]
def test_그룹_형상_칸(out):
assert [s["suffix"] for s in out["shapes"]] == ["length_m", "after_m"]
assert out["shapes"][0]["meaning"] == "연장"
assert out["shapeKey"] == "g1__length_m"
def test_정의_덧칸_얹기(out):
assert out["withNull"] == [{"type_id": "a", "group": "A"}]
t = out["withDef"][0]
assert t["group_name"] == "가 군"
assert t["show_anchor"] is False
assert t["behaviors"] == ["계곡통과시설"]
assert t["spots"] == {"k": {"줄": 1, "칸": 1}}
assert [r["종류"] for r in t["rules"]] == ["a"]
assert t["groups"][0]["shape"] == {"길이": {"받기": True}}
def test_판1_정의는_지금_화면과_같음(out):
assert out["v1Types"] == 37
assert out["v1Same"] is True
assert out["v1Columns"] == [2]
assert out["v1Anchor"] is True