- 종단 도구 · [창 분할] = 단추 유리 · 보조 단 18 · ▲▼ = 아이콘 단추 선 18 · 배율 + − ⤢ = 아이콘 단추 22 - 배수 머리 단추 = 단추 22 · 층 단추 = 켜기 칩 20(색 점 = 층 색) · 유역 줄 = 목록 줄 32 - [추가] · [삭제] · [리셋] · [해제] · 확폭 = 단추 주 · 위험 고스트 · 보조 · [-][+] = 아이콘 단추 24 - 지도 도구줄 · 3D 보기 줄 = 단 32(34 에서) · 접기 ▾ = 아이콘 단추 18 · 잰 값 닫기 = 아이콘 단추 24 - 페이지 CSS 의 단추 꼴(테두리 · 바탕 · 글 · 둥글기) 지움 · 날 색 대체값(#d98a00 · #5b8def · #3a3f4a) 지움 - 시험 선택자 · 가짜 DOM(setAttribute) 같이 고침 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
111 lines
3.9 KiB
Python
111 lines
3.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""224-1c(PLAN 325-3) 유토곡선 · 배수유역 [창 분할] — 종단 [창 분할]과 같은 양식 · 따로 새 창.
|
|
|
|
- 단추 = 유토 판 좌상단 · 배수 머리줄 맨 앞 · 글 [창 분할]/[창 결합] · 툴팁에 판 이름.
|
|
- 창 이름 셋 다름(같으면 앞 창 body 를 덮어 조각이 사라짐).
|
|
- 뗌 = 새 창 body · 유토 손잡이 숨김 · 인라인 높이 비움 · 배수 지도 관찰 rehome.
|
|
- 붙임(단추 · 새 창 닫힘 · 페이지 떠남) = 제자리 — 유토 손잡이 바로 앞 · 배수 content 끝.
|
|
- 종단 새 창 안에서 다시 떼면 그 창이 새 창을 엶(메인 창 팝업 차단 피함).
|
|
|
|
`helper_224_1c_subpanel_popout.cjs` 가 진짜 TS 를 가짜 DOM · 가짜 창 위에서 돌림.
|
|
"""
|
|
|
|
import json
|
|
import os
|
|
import re
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
|
ROOT = Path(HERE).parents[1]
|
|
NAMES = ["aislo-profile-popout", "aislo-masshaul-popout", "aislo-drainage-popout"]
|
|
|
|
|
|
@pytest.fixture(scope="module")
|
|
def r():
|
|
proc = subprocess.run(
|
|
["node", os.path.join(HERE, "helper_224_1c_subpanel_popout.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):
|
|
cls = "ui-btn ui-btn--ghost b05-subpanel__popout"
|
|
assert r["mass"] == {
|
|
"text": "창 분할",
|
|
"title": "유토곡선 창 분할",
|
|
"className": cls,
|
|
"type": "button",
|
|
}
|
|
assert r["drainage"] == {
|
|
"text": "창 분할",
|
|
"title": "배수유역 창 분할",
|
|
"className": cls,
|
|
"type": "button",
|
|
}
|
|
assert "b05-route-profile__popout" in r["profile"]["className"]
|
|
|
|
|
|
def test_유토_뗌(r):
|
|
assert r["massOpened"] == {
|
|
"inPopupBody": True,
|
|
"isPopout": True,
|
|
"handleHidden": True,
|
|
"inline": "",
|
|
"text": "창 결합",
|
|
"docTitle": "유토곡선 — Aislo",
|
|
}
|
|
|
|
|
|
def test_배수_뗌은_rehome(r):
|
|
assert r["drainOpened"] == {"inPopupBody": True, "rehomes": 1, "text": "창 결합"}
|
|
|
|
|
|
def test_새_창_닫힘과_단추로_제자리(r):
|
|
assert r["massClosed"] == {
|
|
"order": ["b05-profile__masshaul-overlay", "b05-profile__masshaul-handle"],
|
|
"handleHidden": False,
|
|
"isPopout": False,
|
|
"text": "창 분할",
|
|
}
|
|
assert r["drainClosed"] == {"popupClosed": True, "last": True, "rehomes": 2, "text": "창 분할"}
|
|
|
|
|
|
def test_창_이름_셋_다름과_여는_창(r):
|
|
names = [name for _, name in r["opened"]]
|
|
assert set(names) == set(NAMES) and len(set(NAMES)) == 3
|
|
# 종단 새 창 안의 단추는 종단 새 창이 엶
|
|
assert r["opened"][3] == ["aislo-profile-popout", "aislo-masshaul-popout"]
|
|
assert r["nested"]["profileInPopup"] is True
|
|
|
|
|
|
def test_페이지_떠나면_셋_다_닫고_제자리(r):
|
|
assert r["disposed"] == {
|
|
"closed": [True, True, True],
|
|
"profileInSlot": True,
|
|
"massBeforeHandle": True,
|
|
"drainInContent": True,
|
|
"handleHidden": False,
|
|
"original": 1,
|
|
}
|
|
|
|
|
|
def test_배선과_양식():
|
|
shared = (ROOT / "A00_Common/design/design_shared.ts").read_text(encoding="utf-8")
|
|
assert "attachSubPanelPopouts(profile);" in shared
|
|
css = (ROOT / "A00_Common/design/design_page.css").read_text(encoding="utf-8")
|
|
block = re.search(r"\n\.b05-subpanel__popout \{([^}]*)\}", css).group(1)
|
|
# 크기 = 부품 단추 단 18(553-2) — 페이지 CSS 여백 덮어쓰기 없음
|
|
assert "flex: none;" in block and "padding" not in block
|
|
popout = (ROOT / "A00_Common/design/design_profile_popout.ts").read_text(encoding="utf-8")
|
|
assert popout.count('button.setAttribute("data-size", "18")') == 2
|
|
assert ".b05-profile__masshaul-overlay.is-popout," in css
|
|
assert ".b05-drainage.is-popout {" in css
|