# -*- 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