# -*- coding: utf-8 -*- """224-1c(PLAN 325-3) 유토곡선 · 배수유역 [창 분할] — 종단 [창 분할]과 같은 양식 · 따로 새 창. - 단추 = 두 판 머리줄 맨 앞(유토는 접어도 남는 머리줄 · 354-1) · 글 [창 분할]/[창 결합] · 툴팁에 판 이름. - 창 이름 셋 다름(같으면 앞 창 body 를 덮어 조각이 사라짐). - 뗌 = 새 창 body · 뗀 유토 판 손잡이 · 리사이저는 CSS 로 감춤 · 배수 지도 관찰 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"] assert r["massButtonInHead"] is True def test_유토_뗌(r): assert r["massOpened"] == { "inPopupBody": True, "isPopout": True, "text": "창 결합", "docTitle": "유토곡선 — Aislo", } def test_배수_뗌은_rehome(r): assert r["drainOpened"] == {"inPopupBody": True, "rehomes": 1, "text": "창 결합"} def test_새_창_닫힘과_단추로_제자리(r): assert r["massClosed"] == { "order": ["b05-route-profile__body-wrap", "b05-profile__masshaul-overlay"], "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, "massInColumnEnd": True, "drainInContent": True, "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) assert "var(--btn-bar-padding)" in block and "var(--btn-bar-font-size)" in block assert ".b05-profile__masshaul-overlay.is-popout," in css assert ".b05-profile__masshaul-overlay.is-popout .b05-profile__masshaul-handle," in css assert ".b05-drainage.is-popout {" in css