Files
Aislo/resources/tester/test_224_1c_subpanel_popout.py
T
eomsangdonandClaude Opus 5.5 baea638043 refactor(B05): 날 단추 · 작은 도구 단추를 부품 단추 · 아이콘 단추 · 켜기 칩 · 목록 줄로 (PLAN 553-2)
- 종단 도구 · [창 분할] = 단추 유리 · 보조 단 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>
2026-10-26 22:51:58 +09:00

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