- 흙막이 양식 한 벌(design_structure_guard) — 배관 · 박스 · 세월교가 같은 칸(형태 · 길이 · 높이 · 측점 전후) · 추가 흙막이 · 도수로/돌붙임 상자
- 세월교 · 박스 유입 · 유출: 흙막이 고르면 흙막이 칸(키 {side}_revet_* · 기본 찰 10 · 1.5 · 5 · 5) · [연동][경사] 옵션 줄
- B06 측벽 높이 · 좌우 · 상하 · 바닥판 읽기 줄을 세월교 · 박스 유입 · 유출 칸에 안 옮김(강조만)
- 유입 · 유출 「없음」 = 목록 램프 · 구조물 조합 잇기 줄 없음(명세 none)
- 세월교: 수량(련) 관경 바로 뒤 · 련 기본 2 · 새 시설 빈 월류 높이 = 유량 오면 필요 수심 · 종류 바꿀 때 유량 넘김
- 물넘이 포장: 경사각 기본 3° · 월류 폭 · 높이 칸(세월교와 같은 키 ford_width_m · ford_height_m · 같은 계산)
- 구조물정의 판 18(판_17 이력) · 이름 표 · 집계표 선택 컨테이너 짝 · 저장 병합 키
- 시험: 세월교 · 박스 · 물넘이 명세 기대값 · 흙막이 짝 자리 옮김
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BVPp2o6Mh2FZJr72yW3ofZ
74 lines
3.4 KiB
Python
74 lines
3.4 KiB
Python
"""횡단에서 고르기 · 목록에서 고르기 좌측 패널 같은 글 (PLAN 54-29).
|
|
|
|
짝: `B06_Section/B06_Section_UI_Adjust_Dock.ts`(배관 칸 = 이름표 그대로 · 옵션 · 읽기 · 유출 단 수 줄 안 받음) ·
|
|
`B06_Section/B06_Section_UI_Cross_Structure_Panel.ts`(배관 유입 벽 단 수 줄 = 선 단이 있을 때만) ·
|
|
`B06_Section/B06_Section_UI_Page_Structures_Panel.ts`(폼을 다시 그린 뒤 강조 다시).
|
|
화면 확인은 ORCA(목록 · 횡단 innerText · 칸 수 · 값 같음 · 강조 상자 하나만 다름).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os
|
|
import re
|
|
|
|
HERE = os.path.dirname(__file__)
|
|
|
|
|
|
def _src(rel: str) -> str:
|
|
with open(os.path.join(HERE, "..", "..", rel), encoding="utf-8") as f:
|
|
return f.read()
|
|
|
|
|
|
def test_배관_칸은_옵션_읽기_줄을_안_받음() -> None:
|
|
dock = _src("B06_Section/B06_Section_UI_Adjust_Dock.ts")
|
|
inlet = re.search(r"const PIPE_INLET_ROWS = \[(.*?)\]", dock, re.S)
|
|
assert inlet
|
|
assert "struct--options" not in inlet.group(1)
|
|
assert "struct--readout" not in inlet.group(1)
|
|
assert 'const PIPE_OUTLET_ROWS = ".b06-structure-panel__struct--basin-size";' in dock
|
|
|
|
|
|
def test_배관_칸_이름표는_그대로() -> None:
|
|
dock = _src("B06_Section/B06_Section_UI_Adjust_Dock.ts")
|
|
assert 'setGroupLabel(group, pipe ? "" : (panelRoot.dataset.panelTitle ?? ""));' in dock
|
|
|
|
|
|
def test_배관_유입_단_수_줄은_선_단이_있을_때만() -> None:
|
|
panel = _src("B06_Section/B06_Section_UI_Cross_Structure_Panel.ts")
|
|
assert "!isBasin && !deps.hiddenPipe()" in panel
|
|
assert "(pipeInlet && tiers.count === 0)" in panel
|
|
|
|
|
|
def test_폼을_다시_그리면_강조_다시() -> None:
|
|
"""54-30 — 상자를 새로 세울 때마다(단 수 · 유입 형식 · 벽 조작 · 저장 · 넘김) 한 곳에서 강조를 다시 얹음."""
|
|
form = _src("A00_Common/design/design_structure_form.ts")
|
|
assert 'root.dispatchEvent?.(new Event("specpaint", { bubbles: true }));' in form
|
|
page = _src("B06_Section/B06_Section_UI_Page_Structures_Panel.ts")
|
|
assert 'addEventListener("specpaint", () => refreshAdjustSlots(false))' in page
|
|
|
|
|
|
def test_상자_칸을_고치면_그_부분을_고름() -> None:
|
|
"""54-30 — 칸 고침 = 횡단에서 그 벽을 누른 것과 같은 길 · 단 수 칸은 고른 단을 지킴."""
|
|
page = _src("B06_Section/B06_Section_UI_Page_Structures_Panel.ts")
|
|
assert '[data-spec-item="outlet.tiers"]' in page
|
|
assert "`extra${Number(box.dataset.specIndex)}`" in page
|
|
assert "refreshCard?.(target.chainage_m);" in page
|
|
|
|
|
|
def test_흙막이_상자는_사면안정_흙막이와_같은_칸() -> None:
|
|
# 흙막이 양식 한 벌(65-2) — 배관 · 박스 · 세월교가 같은 상자를 씀
|
|
guard = _src("A00_Common/design/design_structure_guard.ts")
|
|
soil = guard[guard.index('id: "soil_add"') :]
|
|
assert soil[: soil.index("};")].count("items: guardItems(),") == 1
|
|
for spec in ("pipe", "box", "ford"):
|
|
assert "SOIL_ADD" in _src(f"A00_Common/design/design_structure_{spec}.ts")
|
|
|
|
|
|
def test_관_보호공_연동_경사_단추() -> None:
|
|
row = _src("B05_Profile/B05_Profile_UI_Drainage_Revet_Choice.ts")
|
|
assert 'toggleButton("연동"' in row and 'toggleButton("경사"' in row
|
|
assert "b05-structure__half-pair" in row
|
|
session = _src("B06_Section/B06_Section_UI_Page_Link_Session.ts")
|
|
assert "revetLink.setFollowGrade(owner, on)" in session
|
|
assert "revetLink.setLinked(s.chainage_m, on)" in session
|