diff --git a/resources/tester/helper_449_save_pipes.cjs b/resources/tester/helper_449_save_pipes.cjs index 03a3bea5f..db946114a 100644 --- a/resources/tester/helper_449_save_pipes.cjs +++ b/resources/tester/helper_449_save_pipes.cjs @@ -1,9 +1,7 @@ /* PLAN 449 헬퍼 — [저장] 관 차례 · 노선 저장 뒤 실패(433-7 · 433-12). 실제 `design_save.ts` · 관 초안 창구 · 가게를 * Node 로 · 서버 창구 · 계획고 초안 · 노선 편집 창구만 가짜. 짝 = `test_449_save_pipes.py`. */ -const fs = require("fs"); const path = require("path"); const { makeLoader } = require("./helper_ts_stub_loader.cjs"); -const CATALOG = require("./helper_322_catalog_module.cjs"); const ROOT = path.join(__dirname, "..", ".."); @@ -27,18 +25,10 @@ globalThis.window = { }; const STUBS = { "/design_leave": { designSignature: () => "", markDesignClean: () => undefined } }; -const { load, loadTs } = makeLoader({ +const { load } = makeLoader({ root: ROOT, - requireFor: (full) => (request) => { - if (CATALOG.isCatalogRequest(request)) return CATALOG; - const key = Object.keys(STUBS).find((name) => request.endsWith(name)); - if (key) return STUBS[key]; - if (request.startsWith("@config/")) return { API_BASE_URL: "http://fake" }; - if (request.startsWith("@util/")) - return loadTs(path.join(ROOT, "common_util", `${request.slice(6)}.ts`)); - if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); - return require(request); - }, + stubs: STUBS, + ui: () => ({ ui_locales: {}, currentLanguageIndex: 0, t: (key) => key }), }); let calls = []; diff --git a/resources/tester/test_346_3_route_save_screen.py b/resources/tester/test_346_3_route_save_screen.py index f99857c69..ed4339af8 100644 --- a/resources/tester/test_346_3_route_save_screen.py +++ b/resources/tester/test_346_3_route_save_screen.py @@ -8,6 +8,7 @@ from __future__ import annotations import json +import re import subprocess from pathlib import Path @@ -118,7 +119,7 @@ def test_노선_반영_단추_없앰_배선(): save = _read("A00_Common/design/design_save.ts") assert "await pendingRouteSave(ctx.projectId)" in save # 6-B — 노선 초안 = 한 본문 `route` 칸 · 서버가 맨 앞에서 노선 저장(옛 차례 길 걷음) - assert "route ? { route, carry: carried?.carry } : {}" in save + assert re.search(r"route \? \{ route, carry: carried\?\.carry[^}]*\} : \{\}", save) assert "carryAfterRouteSave" not in save and "saveRouteDraft" not in save server = _read("B06_Section/B06_Section_Router_DesignSave.py") assert server.index('step("route"') < server.index('step("settings"') diff --git a/resources/tester/test_551_2_draw_tokens.py b/resources/tester/test_551_2_draw_tokens.py index 9e2925ac0..321e7467d 100644 --- a/resources/tester/test_551_2_draw_tokens.py +++ b/resources/tester/test_551_2_draw_tokens.py @@ -1,6 +1,6 @@ """551-2 그림 전용 값(--draw-*) 지킴 — 화면 테마 변수(--color-*)를 바꿔도 그림 색은 그대로. -- `ui_template_theme.css` 끝 블록의 --draw-* 는 밝음 · 어두움 · 시스템 어두움 모두 글자 hex. +- `ui_template_theme.css` 끝 블록의 --draw-* 는 밝음 · 어두움 · 시스템 어두움 모두 글자 hex · 어두움 · 시스템 어두움은 밝음에 있는 것만 덮음. - 그림 CSS(B05 · B06 · B08 SVG)의 stroke · fill 은 --color-* 를 쓰지 않음. - 지도 · 3D · CAD 캔버스가 읽는 바탕 · 선 색은 --draw-*. - 옛 변수 값을 일부러 바꿔도 그림 선언의 풀린 색이 같음(밝음 · 어두움 · 시스템 어두움). @@ -50,6 +50,7 @@ NO_COLOR_READS = [ "B07_DesignDetail/openwebcad/src/drawControllers/screenCanvas.drawController.ts", ] +DRAW_NAMES_READ = {m for _, n in DRAW_READS for m in re.findall(r"--draw-[a-z-]+", n)} DECL = re.compile(r"^\s*(stroke|fill|stop-color|--b06-tag)\s*:(.*);", re.M) VAR = re.compile(r"var\((--[a-z0-9-]+)(?:\s*,\s*([^()]*(?:\([^()]*\))?[^()]*))?\)") HEX = re.compile(r"#[0-9a-f]{6}") @@ -124,7 +125,14 @@ def test_draw_values_are_literal_hex(): assert draws, mode for name, value in draws.items(): assert HEX.fullmatch(value), (mode, name, value) - assert len([k for k in blocks["light"] if k.startswith("--draw-")]) == 21 + # 밝음 블록이 전부 정의 · 어두움 · 시스템 어두움은 그 안의 것만 덮음(고정 개수 아님) + light = {k for k in blocks["light"] if k.startswith("--draw-")} + for mode in ("dark", "auto"): + assert {k for k in blocks[mode] if k.startswith("--draw-")} <= light, mode + # 캔버스 · 3D 가 읽는 바탕 · 선 색은 세 모드 모두에서 풀림 + for mode, env in _modes(THEME.read_text(encoding="utf-8")).items(): + for name in DRAW_NAMES_READ: + assert name in env, (mode, name) def test_drawing_css_uses_no_screen_tokens():