- 공용 모달 바깥 누르기 = 누름 · 뗌 둘 다 배경일 때만 닫음(숫자 칸 끌기로 안 닫힘 · 평면도 ⚙ 포함 모든 openModal) - ⚙ 설정 모달(종단 · 횡단 · 토적 · 구조물 · 전개도) 폭 720 → 360 px · 그룹 상자(legend) · 맨 아래 단추 줄 하나([안내선 숨기기] [기본값] [취소] [확인]) - [확인] = 바뀐 것만 저장(축척 → 배치) 뒤 다시 그림 · 붉은 칸이면 꺼짐 · 횡단 [이 장] [모든 장] [배율 적용] 단추 → 「적용」 고르기 + [확인] - 축척 「자동」 체크 걷음 — 기본 = 지정값(종단 평면도 1/5,000 · 토적 X 1/2,000 · 전개도 X · Y 1/50) · 옛 null = 기본으로 읽음 - 낡은 시험 고침: 153-1(지운 buildCrossLayoutControls 대신 ⚙ 횡단 모달) · 212-3 · 180-3(안내선 단추 자리) · 280-5(자동 체크 · 단추 판정) · 485 축척 · 토적 · 종단 평면 칸(옛 자동 축척 값 → 지정 기본값) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
80 lines
3.5 KiB
Python
80 lines
3.5 KiB
Python
"""180-3 B07 횡단 장 안내선 보이기 / 숨기기 단추.
|
|
|
|
- 끄는 것 = 점선 작도 영역 + 붉은 넘침 틀(화면 전용) · 인쇄 칸선 · 도면 개체는 그대로
|
|
- 단추 = 배치 칸 줄 · ghost sm · 글 「안내선 숨기기」 ↔ 「안내선 보이기」 · 상태는 모듈 값(저장 안 함)
|
|
- 숨김이면 넘침 토스트도 안 띄움 · 메시지 한 줄(`aislo:b08:guide-visible`) · cad_host `setGuideVisible`
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import re
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
ROOT = Path(HERE).parents[1]
|
|
B07 = ROOT / "B07_DesignDetail"
|
|
|
|
|
|
def _read(path: Path) -> str:
|
|
return path.read_text(encoding="utf-8")
|
|
|
|
|
|
def test_단추_글_누름_상태_이어짐():
|
|
proc = subprocess.run(
|
|
["node", os.path.join(HERE, "helper_180_3_b07_guide_toggle.cjs")],
|
|
capture_output=True,
|
|
text=True,
|
|
encoding="utf-8",
|
|
timeout=60,
|
|
)
|
|
assert proc.returncode == 0, proc.stderr
|
|
out = json.loads(proc.stdout)
|
|
assert out["first"] == {
|
|
"text": "안내선 숨기기",
|
|
"cls": "ui-btn ui-btn--ghost ui-btn--sm",
|
|
"pressed": "false",
|
|
"shown": True,
|
|
}
|
|
assert out["hidden"]["text"] == "안내선 보이기" and out["hidden"]["pressed"] == "true"
|
|
assert out["hidden"]["shown"] is False
|
|
assert out["again"]["text"] == "안내선 숨기기" and out["again"]["shown"] is True
|
|
assert out["last"]["shown"] is False
|
|
assert out["sent"] == [False, True, False] # CAD 에 알린 값
|
|
# 화면을 다시 세워 새 단추를 만들어도 숨김 유지
|
|
assert out["rebuilt"] == {"text": "안내선 보이기", "pressed": "true"}
|
|
|
|
|
|
def test_메시지_짝_호스트_CAD():
|
|
host = _read(ROOT / "ui_template" / "cad_host" / "cad_host.ts")
|
|
bridge = _read(B07 / "openwebcad" / "src" / "integration" / "aislo-drawing-bridge.ts")
|
|
guide = _read(B07 / "openwebcad" / "src" / "integration" / "guide-area.ts")
|
|
name = "aislo:b08:guide-visible"
|
|
assert f'"{name}"' in host and f"'{name}'" in bridge # 짝 메시지 이름 같음
|
|
assert "setGuideVisible: (visible) => postAfterLoad(" in host
|
|
assert "setGuideVisible: (visible: boolean) => void;" in host
|
|
assert "return setGuideVisible(guideMessage.visible);" in bridge
|
|
assert "if (!guide || !guideVisible) return;" in guide # 그리기 거름
|
|
assert "!guideVisible) return;" in guide # 끌기 집기도 거름
|
|
# 싣기(setGuide)가 보임 값을 건드리지 않음
|
|
body = guide[
|
|
guide.index("export function setGuide(") : guide.index("export function setGuideArea")
|
|
]
|
|
assert "guideVisible" not in body
|
|
|
|
|
|
def test_페이지_잇기_토스트_거름_장만():
|
|
page = _read(B07 / "B07_DesignDetail_UI_Page.ts")
|
|
assert "if (guideShown() && guide?.marks?.length) {" in page # 숨김 = 넘침 토스트 없음
|
|
assert "cad.setGuideVisible(visible)" in page
|
|
assert "if (!guideShown()) cad.setGuideVisible(false);" in page # 다시 세운 화면에 이어 줌
|
|
# ⚙ 횡단 모달(280-5) 맨 아래 단추 줄(523-1)
|
|
assert "if (cross) footer.append(deps.cross.guideToggle);" in _read(
|
|
B07 / "B07_DesignDetail_UI_Settings.ts"
|
|
)
|
|
assert "guideToggle.disabled = !isCrossSheet(drawing);" in page # 장만
|
|
# 단추는 인쇄 칸선(도각 층) · 도면 개체를 건드리지 않음 — 파이썬 쪽 변경 없음
|
|
assert not re.search(
|
|
r"guide.?visible", _read(B07 / "B07_DesignDetail_Engine_Cad_Sheet.py"), re.I
|
|
)
|