fix(513-2 패널 열림 상태 유지): 측점 · 구조물 고름 = 내용만 갱신 · B05 우측 횡단 판(393-1 자동 열림) · B05 ~ B06 「구조물 배치」 카드(398-1 onReveal · 우클릭 추가 펴기) 열림 · 닫힘은 사용자 손잡이만 — 요구 327-2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -69,17 +69,9 @@ const notify = (projectId: string): void => {
|
||||
busyListeners.get(projectId)?.forEach((fn) => fn(now));
|
||||
};
|
||||
|
||||
const launchedBy = new Map<string, Event>();
|
||||
|
||||
/** 이 누름이 묶음 차례를 띄웠나 — 그 누름 안 폼 다시 실음은 좌측 패널 안 폄(`design_user_pick` · 398-1 · 505-2). */
|
||||
export const pageLaunchedBy = (projectId: string, event: Event): boolean =>
|
||||
launchedBy.get(projectId) === event;
|
||||
|
||||
/** 묶음 차례 하나가 뜸 — 띄운 누름을 적음 · 끝나면(밀림 · 실패 포함) 내림. */
|
||||
/** 묶음 차례 하나가 뜸 — 끝나면(밀림 · 실패 포함) 내림. */
|
||||
export function trackPageBusy(projectId: string, run: Promise<unknown> | null): void {
|
||||
if (!run) return;
|
||||
const event = (globalThis as { event?: Event }).event;
|
||||
if (event) launchedBy.set(projectId, event);
|
||||
busy.set(projectId, (busy.get(projectId) ?? 0) + 1);
|
||||
notify(projectId);
|
||||
const done = (): void => {
|
||||
|
||||
@@ -41,7 +41,6 @@ import type { DesignView } from "./design_dock";
|
||||
import type { FacilityLane } from "./design_facility_lane";
|
||||
import { routeDraftBridge, type PagePipelineOptions } from "./design_pipeline_page";
|
||||
import { plantedBase } from "./design_pipeline_base";
|
||||
import { isUserPick } from "./design_user_pick";
|
||||
import { SECTION_STATION_INTERVAL_M } from "../../B05_Profile/logic/B05_Profile_Sections_Stations";
|
||||
import {
|
||||
applyStructureAreaRows,
|
||||
@@ -331,10 +330,8 @@ export function sharedStructures(shared: DesignPageShared): StructuresSection {
|
||||
onPipeUpdate: (from, to, attributes) => on().onPipeUpdate?.(from, to, attributes),
|
||||
onPipeRemove: (chainageM) => on().onPipeRemove?.(chainageM),
|
||||
onPipeSelect: (chainageM) => on().onPipeSelect?.(chainageM),
|
||||
// 고름은 내용만 — 좌측 패널 · 「구조물 배치」 카드 열림 · 닫힘은 사용자가 둔 그대로(513-2)
|
||||
onListRelease: () => on().onListRelease?.(),
|
||||
// 사용자 고름 = 「구조물 배치」 카드 폄 — 좌측 패널 열림 · 닫힘은 그대로(398-1 · 499-1)
|
||||
onReveal: () =>
|
||||
isUserPick(shared.projectId) && shared.structures?.root.classList.remove("is-collapsed"),
|
||||
},
|
||||
{ includeDetail: () => shared.view() === "cross", projectId: shared.projectId },
|
||||
);
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
/* =============================================================================
|
||||
* A00_Common/design/design_user_pick.ts
|
||||
* 「사용자 고름」 표시 한 칸(PLAN 398-1) — 좌측 패널 저절로 펴기(09-04 「바깥에서 고르면 좌측 패널도」)는
|
||||
* 사용자가 직접 누른 고름에서만.
|
||||
*
|
||||
* 사용자 고름 = 지금 브라우저가 진짜 누름(포인터 · 마우스 · 우클릭)을 처리하는 중 — 눈금 · 마름모 · 3D ·
|
||||
* 종단 알약 · 배수유역도 · 횡단 카드 · 우클릭 추가가 다 그 누름 안에서 폼을 엶.
|
||||
* 아님 = 누름 밖(서버 응답 · 타이머 — 배수유역 다시 나눔 · 횡단 다시 그림) · 방향키 · 묶음을 띄운 그 누름
|
||||
* (교점 끌기 · 곡선 지우기 · 되돌리기가 띄운 차례의 관 · 구조물 따라가기 · 다시 칠하기).
|
||||
* 「계산 중」 동안 새로 누른 고름은 폄(505-2).
|
||||
* 폼이 고른 것을 다시 실을 때마다 부르는 쪽을 막지 않고 펴기 한 곳(`design_shared` onReveal)이 여기만 봄.
|
||||
* ========================================================================== */
|
||||
|
||||
import { pageLaunchedBy } from "./design_page_data";
|
||||
|
||||
const PICK_EVENTS = new Set([
|
||||
"pointerdown",
|
||||
"pointerup",
|
||||
"mousedown",
|
||||
"mouseup",
|
||||
"click",
|
||||
"dblclick",
|
||||
"contextmenu",
|
||||
]);
|
||||
|
||||
/** 지금 사용자 누름 안이고 그 누름이 묶음을 안 띄웠나 — 좌측 패널을 펴도 되는가. */
|
||||
export function isUserPick(projectId: string | null): boolean {
|
||||
const event = (globalThis as { event?: Event }).event; // 처리 중인 이벤트(그 마이크로태스크까지)
|
||||
if (!event?.isTrusted || !PICK_EVENTS.has(event.type)) return false;
|
||||
return !projectId || !pageLaunchedBy(projectId, event);
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import { createButton } from "@ui/ui_template_elements";
|
||||
import { createSidePanels, type SidePanels } from "@ui/ui_template_side_panels";
|
||||
import { createSidePanels } from "@ui/ui_template_side_panels";
|
||||
import { bindFootprintToggle } from "./B05_Profile_UI_RouteEdit_Footprint";
|
||||
import { bindMarkToggle } from "./B05_Profile_UI_RouteEdit_Marks";
|
||||
import { bottomRowNarrow, infoLiftPx } from "./logic/B05_Profile_RouteEdit_InfoLift";
|
||||
@@ -65,9 +65,6 @@ export interface RouteEditChrome {
|
||||
/** 손잡이 자리(24) + 틈(8) — 접혀도 남는 폭(`.ui-side-panels` margin-left). */
|
||||
const SIDE_HANDLE_PX = 32;
|
||||
|
||||
/** 횡단 판 몸 → 패널 묶음 — 고른 측점 횡단을 띄울 때 접힌 판을 폄(382-2 · `_Cross`). */
|
||||
export const sidePanelsOf = new WeakMap<HTMLElement, SidePanels>();
|
||||
|
||||
// 글판 접기 기억(345-5 덧 3) — 페이지 동안만(모듈 값) · 다시 열어도 그대로.
|
||||
let hintOpen = false;
|
||||
let infoCollapsed = false;
|
||||
@@ -155,7 +152,7 @@ export function createRouteEditChrome(
|
||||
overlay.querySelector('[data-slot="tools"]')!.replaceWith(...tools);
|
||||
|
||||
// 횡단 미리보기 = 패널 양식(382-1 · 손잡이 · 머리 · 폭 끌기 · 열림 · 폭 기억) · 자리는 지도 위 덮개 그대로 ·
|
||||
// 기본 접힘(393-1 · 키 -v2 = 옛 열림 기억 한 번 버림) · 손잡이로 연 것만 기억 · 잰 값 창이 판을 비킴(--b05-side-open).
|
||||
// 기본 접힘(393-1 · 키 -v2 = 옛 열림 기억 한 번 버림) · 열림 · 닫힘은 손잡이만(513-2) · 잰 값 창이 판을 비킴(--b05-side-open).
|
||||
const side = document.createElement("div");
|
||||
side.className = "b05-routeedit__side";
|
||||
const setSideOpen = (): void =>
|
||||
@@ -172,7 +169,6 @@ export function createRouteEditChrome(
|
||||
onChange: setSideOpen,
|
||||
onResize: setSideOpen,
|
||||
});
|
||||
sidePanelsOf.set(side, panels);
|
||||
overlay.querySelector(".b05-routeedit__side-wrap")!.append(panels.root);
|
||||
setSideOpen();
|
||||
|
||||
|
||||
@@ -46,7 +46,6 @@ import {
|
||||
import { readStateRaw } from "../A00_Common/b_page_state";
|
||||
import { pageRouteId } from "../A00_Common/design/design_page_route";
|
||||
import { stationLabel as formatStation } from "../common_util/common_util_station";
|
||||
import { sidePanelsOf } from "./B05_Profile_UI_RouteEdit_Chrome";
|
||||
import type { FootprintRecord } from "./logic/B05_Profile_PlanFootprint";
|
||||
import {
|
||||
routeCrossCard,
|
||||
@@ -320,13 +319,8 @@ export function createCrossPreview(params: CrossPreviewParams): CrossPreviewWind
|
||||
stopPick();
|
||||
};
|
||||
|
||||
/** 그 측점 횡단을 위 판에 · 아래 판은 비움(전후 비교는 노선을 고쳤을 때만) · 접힌 판은 폄(`open`). */
|
||||
function showStation(
|
||||
key: string | null,
|
||||
chainageM: number,
|
||||
structure = false,
|
||||
open = true,
|
||||
): void {
|
||||
/** 그 측점 횡단을 위 판에 · 아래 판은 비움(전후 비교는 노선을 고쳤을 때만) · 접힌 판은 접힌 채 내용만(513-2). */
|
||||
function showStation(key: string | null, chainageM: number, structure = false): void {
|
||||
// 아래 판은 **노선을 고쳤을 때만** 채운다(2026-09-12 사용자 지시 ⑤). 예전에는 같은
|
||||
// 측점을 두 번 누르면 위·아래에 **같은 그림 두 장**이 떠 전후 비교가 되지 않았다.
|
||||
previous.show(null, interval());
|
||||
@@ -334,12 +328,10 @@ export function createCrossPreview(params: CrossPreviewParams): CrossPreviewWind
|
||||
drawnRoute = pipe?.input("route") ?? null;
|
||||
shown = null;
|
||||
redraw();
|
||||
const panels = sidePanelsOf.get(params.side);
|
||||
if (open && panels && panels.current() === null) panels.open("cross", false); // 열되 기억 안 함(393-1)
|
||||
}
|
||||
|
||||
/** 다른 보기(종단 · 3D · 목록 · 횡단 카드 · 평면 마커) 고름 → 그 측점 횡단(구조물 · 관도 · 411-A). */
|
||||
function follow(selection: DesignSelection, open = true): void {
|
||||
function follow(selection: DesignSelection): void {
|
||||
attach();
|
||||
const at = selection.chainageM;
|
||||
if (at === null) {
|
||||
@@ -352,16 +344,16 @@ export function createCrossPreview(params: CrossPreviewParams): CrossPreviewWind
|
||||
}
|
||||
const station = nearestWithin(stationsNow(), at, (entry) => entry.chainageM);
|
||||
const structure = !!selection.structureId || (!!station && !isGridStation(station));
|
||||
showStation(station?.key ?? null, station?.chainageM ?? at, structure, open);
|
||||
showStation(station?.key ?? null, station?.chainageM ?? at, structure);
|
||||
}
|
||||
const stopPick = subscribeSelection(params.projectId, (selection, from) => {
|
||||
// 평면 이름 = 눈금 누름(제가 이미 그림)만 거름 · 마커 고름 풂(값 없음)은 따라 비움(500-1)
|
||||
if (from !== PLAN_PICK_FROM || selection.chainageM === null) follow(selection);
|
||||
});
|
||||
attach();
|
||||
// 들어올 때 이미 고른 것 — 판에 그 측점 횡단(494-1 · 안 그리면 고른 채 빈 판 · 다시 누르면 고름이 풀림) · 판은 안 폄
|
||||
// 들어올 때 이미 고른 것 — 판에 그 측점 횡단(494-1 · 안 그리면 고른 채 빈 판 · 다시 누르면 고름이 풀림)
|
||||
const picked = readSelection(params.projectId);
|
||||
if (picked) follow(picked, false);
|
||||
if (picked) follow(picked);
|
||||
|
||||
/** 그 측점 발자국 기록(열쇠 · 없으면 누가거리) — 발자국 단계 전이면 없음. */
|
||||
const footprintAt = (key: string | null, chainageM: number): FootprintRecord | undefined => {
|
||||
|
||||
@@ -597,7 +597,6 @@ export function createStructuresSection(
|
||||
if (moved) callbacks.onPipeSelect(moved.chainage_m); // 고름(알약 · 측점선)도 따라감
|
||||
},
|
||||
selectPipeByChainage(chainageM) {
|
||||
if (chainageM !== null) callbacks.onReveal?.();
|
||||
if (chainageM === null) {
|
||||
// 외부 해제(빈 공간 클릭 등) — 임시 배치는 취소, 선택 중이던 시설도 구조물군·
|
||||
// 종류까지 완전 리셋(2026-08-18 사용자 지시). 아무것도 안 골랐으면 무시.
|
||||
@@ -621,7 +620,6 @@ export function createStructuresSection(
|
||||
return hit;
|
||||
},
|
||||
selectById(structureId) {
|
||||
if (structureId !== null) callbacks.onReveal?.();
|
||||
if (structureId === null) {
|
||||
// 그래프·3D 빈 공간 클릭 등 외부 해제 — 선택 중이었으면 구조물군·종류까지
|
||||
// 완전 리셋(2026-08-18 사용자 지시). 선택 없는 신규 작성 중에는 두지 않는다.
|
||||
@@ -637,11 +635,9 @@ export function createStructuresSection(
|
||||
const type = typeMap().get(typeId);
|
||||
if (!type) return;
|
||||
// 우클릭 = [추가]까지 끝난 상태(116-1 · 08-18 「즉시 추가 폐지」를 바꿈) — 새로 놓기에서
|
||||
// 시작해 옛 고름 · 집계 항목 · 그룹 잇기를 비우고 「구조물 배치」를 폄(좌측 패널은 안 엶 · 499-1).
|
||||
// 시작해 옛 고름 · 집계 항목 · 그룹 잇기를 비우고 고름만 바꿈(좌측 패널 · 「구조물 배치」 카드 열림 · 닫힘은 그대로 · 513-2).
|
||||
// 등록부 기본값 뒤 필수 빈칸이 없으면 바로 추가 + 새 항목 고름 · 남으면 폼만(A군은 임시 배치까지).
|
||||
startNew(type.group, typeId);
|
||||
callbacks.onReveal?.();
|
||||
root.classList.remove("is-collapsed");
|
||||
positionConfirmed = true; // 우클릭은 측점이 확정돼 들어온다 — 옵션도 바로 연다.
|
||||
const placement = placementOf(typeId);
|
||||
const step = interval();
|
||||
|
||||
@@ -204,12 +204,6 @@ export interface StructuresCallbacks {
|
||||
/** 계곡 통과 시설을 목록에서 골랐을 때(시설 폼·유역 동기화는 배수유역 패널 몫).
|
||||
* null = 재클릭 해제 — 전 화면(그래프·3D·배수유역도) 선택도 함께 푼다(2026-08-18). */
|
||||
onPipeSelect: (chainageM: number | null) => void;
|
||||
/**
|
||||
* 바깥(3D·종단 그래프·배수유역도·횡단도)에서 고른 것이 폼에 실릴 때 — 좌측 패널이
|
||||
* 접혀 있으면 펼친다(2026-09-04 사용자: 선택하면 좌측 패널도 함께 활성화돼야 함).
|
||||
* 목록에서 직접 고른 경우엔 이미 펼쳐져 있어 아무 일도 안 한다.
|
||||
*/
|
||||
onReveal?: () => void;
|
||||
/** 목록에서 고른 줄을 다시 눌러 풂 — 다른 화면의 고름(횡단 카드)도 함께 끔(54-8). */
|
||||
onListRelease?: () => void;
|
||||
}
|
||||
|
||||
@@ -67,8 +67,7 @@ let stations = [
|
||||
];
|
||||
let footprint = null;
|
||||
let route = { v: 1 };
|
||||
// 접힌 판 펴기 — 몸(side)에 묶인 패널 묶음 흉내
|
||||
// 393-1 — 측점 눈금이 연 판은 기억 안 함(remember 거짓)
|
||||
// 패널 묶음 흉내 — 513-2 고름은 판을 안 엶(now 그대로 null)
|
||||
const panels = {
|
||||
now: null,
|
||||
current: () => panels.now,
|
||||
@@ -186,7 +185,7 @@ async function run() {
|
||||
out.afterEdit = cross.watched();
|
||||
out.cardsAfterEdit = cards.slice();
|
||||
|
||||
// 평면 눈금 클릭 = 공용 고름에 적음 · 판이 접혀 있으면 폄
|
||||
// 평면 눈금 클릭 = 공용 고름에 적음 · 접힌 판은 그대로(513-2)
|
||||
const heard = [];
|
||||
pick.subscribeSelection("p-1", (selection, from) =>
|
||||
heard.push({ at: selection.chainageM, from }),
|
||||
@@ -201,7 +200,7 @@ async function run() {
|
||||
watched: cross.watched(),
|
||||
};
|
||||
|
||||
// 다른 보기 고름 — 일반측점 = 그 측점(판 폄) · 관 측점 · 구조물 id = 마름모 · 풂 = 없음
|
||||
// 다른 보기 고름 — 일반측점 = 그 측점(판 그대로) · 관 측점 · 구조물 id = 마름모 · 풂 = 없음
|
||||
panels.now = null;
|
||||
pick.selectDesign("p-1", { chainageM: 60, structureId: null }, { from: "b06-card" });
|
||||
out.otherGrid = { watched: cross.watched(), panel: panels.now };
|
||||
|
||||
@@ -81,12 +81,11 @@ def _add_at_body() -> str:
|
||||
return src[start : src.index(" moveById(", start)]
|
||||
|
||||
|
||||
def test_addAt_은_새로_놓기_패널_폄_후_판정():
|
||||
def test_addAt_은_새로_놓기_후_판정_카드_열림_그대로():
|
||||
body = _add_at_body()
|
||||
assert "is-collapsed" not in body # 「구조물 배치」 카드 열림 · 닫힘 안 건드림(513-2)
|
||||
order = [
|
||||
body.index("startNew(type.group, typeId)"),
|
||||
body.index("callbacks.onReveal?.()"),
|
||||
body.index('root.classList.remove("is-collapsed")'),
|
||||
body.index("addsAtOnce(optionInputs)"),
|
||||
body.index("finishAdd("),
|
||||
body.index("commitTempPipe(true)"), # 폼만 갈래 — A군 임시 배치 그대로(우클릭만 · 291-1)
|
||||
|
||||
@@ -1,26 +1,16 @@
|
||||
"""PLAN 398-1 sub7 — 교점 옮기면 좌측 패널 열림(요구 248).
|
||||
"""PLAN 398-1 sub7 — 교점 옮기면 좌측 패널 열림(요구 248) · 513-2 로 뒤집음.
|
||||
|
||||
못박는 것
|
||||
- 좌측 패널 저절로 펴기는 사용자 고름만 — 진짜 누름(click · pointerup · contextmenu) 안 = 1.
|
||||
- 다시 칠하기 · 누가거리 따라가기 · 되돌리기 · 묶음 다시 돎 = 0 — 누름 밖(배수유역 다시 나눔 응답) ·
|
||||
방향키 · 끌기 도중 · 가짜 누름 · 묶음 차례를 띄운 그 누름(교점 놓음 · 곡선 지우기 · 되돌리기) ·
|
||||
「계산 중」 동안 새 누름 = 1(505-2).
|
||||
- 뿌리 한 곳 — 폼(`selectPipeByChainage` · `selectById` · `addAt`)은 그대로 펴기를 부르고 `design_shared`
|
||||
onReveal 하나가 `isUserPick` 으로 거름.
|
||||
- 499-1 뒤집음 — 펴기 = 「구조물 배치」 카드만 · 좌측 패널은 안 엶(`revealLeft` · `setOptionsOpen(` 없음) ·
|
||||
- 513-2 — 고름은 내용만 · 좌측 패널 · 「구조물 배치」 카드 열림 · 닫힘은 사용자가 둔 그대로
|
||||
(옛 onReveal · `isUserPick` 펴기 걷음 · 우클릭 추가도 카드 안 폄).
|
||||
- 499-1 그대로 — 좌측 패널은 안 엶(`revealLeft` · `setOptionsOpen(` 없음) ·
|
||||
패널을 열 때 고른 줄 · 강조 상자로 한 번 밂 · B06 평면 겹침 기준 = main 전체.
|
||||
|
||||
짝: `helper_398_1_user_pick.cjs`(진짜 `design_user_pick` · `design_page_data`).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
|
||||
import pytest
|
||||
|
||||
HERE = Path(__file__).resolve().parent
|
||||
ROOT = HERE.parents[1]
|
||||
|
||||
@@ -29,54 +19,15 @@ def _read(rel: str) -> str:
|
||||
return (ROOT / rel).read_text(encoding="utf-8")
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
def r() -> dict:
|
||||
proc = subprocess.run( # noqa: S603 — 고정 실행 파일
|
||||
["node", str(HERE / "helper_398_1_user_pick.cjs")],
|
||||
capture_output=True,
|
||||
text=True,
|
||||
encoding="utf-8",
|
||||
timeout=60,
|
||||
)
|
||||
assert proc.returncode == 0, proc.stderr
|
||||
return json.loads(proc.stdout)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("way", ["click", "pointerup", "contextmenu", "afterRun", "busyPick"])
|
||||
def test_사용자_고름은_폄(r, way):
|
||||
assert r[way] == 1 # busyPick = 「계산 중」 동안 새 누름(505-2)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("way", ["outside", "arrow", "drag", "synthetic", "pipelineRepaint"])
|
||||
def test_다시_칠하기는_안_폄(r, way):
|
||||
assert r[way] == 0
|
||||
|
||||
|
||||
def test_뿌리_한_곳():
|
||||
def test_513_2_고름은_카드_열림_안_건드림():
|
||||
shared = _read("A00_Common/design/design_shared.ts")
|
||||
assert (
|
||||
'isUserPick(shared.projectId) && shared.structures?.root.classList.remove("is-collapsed")'
|
||||
in shared
|
||||
)
|
||||
assert "onReveal" not in shared and "isUserPick" not in shared
|
||||
for rel in ("A00_Common/design/design_shared.ts", "A00_Common/design/design_page.ts"):
|
||||
assert "revealLeft" not in _read(rel) and "setOptionsOpen(" not in _read(rel) # 499-1
|
||||
panel = _read("B05_Profile/B05_Profile_UI_Structures_Panel.ts")
|
||||
assert panel.count("callbacks.onReveal?.()") == 3 # 고름 둘 · 우클릭 추가 — 부르는 쪽은 안 막음
|
||||
found = subprocess.run( # noqa: S603, S607 — 고정 실행 파일
|
||||
["git", "grep", "-l", "isUserPick(", "--", "*.ts"],
|
||||
cwd=ROOT,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
encoding="utf-8",
|
||||
)
|
||||
users = set(found.stdout.split()) | {
|
||||
"A00_Common/design/design_user_pick.ts",
|
||||
"A00_Common/design/design_shared.ts",
|
||||
} # 새 파일(추적 전)
|
||||
assert sorted(users) == [
|
||||
"A00_Common/design/design_shared.ts",
|
||||
"A00_Common/design/design_user_pick.ts",
|
||||
]
|
||||
assert "onReveal" not in panel
|
||||
assert 'root.classList.remove("is-collapsed")' not in panel
|
||||
assert not (ROOT / "A00_Common/design/design_user_pick.ts").exists()
|
||||
|
||||
|
||||
def test_열_때_고른_줄로_밂():
|
||||
|
||||
@@ -124,9 +124,6 @@ def test_눈금_클릭은_폼_그대로(got2) -> None:
|
||||
def test_폼_닫기는_패널_안_폄() -> None:
|
||||
panel = _read("B05_Profile", "B05_Profile_UI_Structures_Panel.ts")
|
||||
head = panel[panel.index(" selectById(structureId) {") :]
|
||||
assert head.index("if (structureId !== null) callbacks.onReveal?.();") < head.index(
|
||||
"resetForm();"
|
||||
)
|
||||
assert "is-collapsed" not in head[: head.index(" addAt(")] # 접힘 · 펼침 안 건드림
|
||||
pick = _read("A00_Common", "design", "design_pick_profile.ts")
|
||||
assert "from === PLAN_PICK_FROM && selection.chainageM === null" in pick
|
||||
|
||||
@@ -72,18 +72,18 @@ def test_노선_고친_뒤_같은_열쇠_측점의_새_발자국(results):
|
||||
}
|
||||
|
||||
|
||||
def test_평면_눈금_클릭은_공용_고름에_적고_판을_편다(results):
|
||||
def test_평면_눈금_클릭은_공용_고름에_적고_판은_그대로(results):
|
||||
click = results["planClick"]
|
||||
assert click["selection"] == {"chainageM": 40, "structureId": None}
|
||||
assert click["heard"] == [{"at": 40, "from": "b05-plan"}]
|
||||
assert click["panel"] == "cross"
|
||||
assert click["panel"] is None # 접힌 판은 접힌 채 내용만(513-2)
|
||||
assert click["watched"]["chainageM"] == 40
|
||||
|
||||
|
||||
def test_다른_보기_일반측점_고름은_평면_판(results):
|
||||
assert results["otherGrid"]["watched"]["chainageM"] == 60
|
||||
assert "structure" not in results["otherGrid"]["watched"]
|
||||
assert results["otherGrid"]["panel"] == "cross"
|
||||
assert results["otherGrid"]["panel"] is None # 513-2
|
||||
|
||||
|
||||
def test_관_구조물_고름은_마름모만(results):
|
||||
@@ -101,9 +101,10 @@ def test_393_판_그림은_B06_카드_사본_노선_고치면_전후(results):
|
||||
assert results["cardsAfterEdit"] == ["b05-prev-s100", "b05-cur-s102"]
|
||||
|
||||
|
||||
def test_393_1_눈금이_연_판은_기억_안_함(results):
|
||||
assert results["planClick"]["panel"] == "cross"
|
||||
assert results["planClick"]["remember"] is False
|
||||
def test_513_2_고름은_판_열림_안_건드림(results):
|
||||
# 393-1 「눈금이 판을 엶(기억 안 함)」 뒤집음 — 열림 · 닫힘은 손잡이만
|
||||
assert results["planClick"]["panel"] is None
|
||||
assert "remember" not in results["planClick"]
|
||||
|
||||
|
||||
def test_393_3_판_칸은_그래프만():
|
||||
|
||||
Reference in New Issue
Block a user