Files
Aislo/resources/tester/helper_233_1_profile_pick.cjs
T
eomsangdonandClaude Sonnet 5.5 03eddde558 test(508-1b 옛 헬퍼 공용 불러오기 2/7): 헬퍼 26 곳 loadTs 베낌 걷고 makeLoader 로
- 헬퍼 동작 그대로(풀이 함수 본문은 옮겨 담음) · 제품 코드 안 고침
- 확인: 이 묶음 헬퍼를 쓰는 시험 279 개 전 279 통과 → 후 279 통과 (시험별 junit 대조 · 어긋남 0)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 17:07:17 +09:00

121 lines
4.1 KiB
JavaScript

/* 233-1 종단도 강조 = 고름 한 칸에서 파생 — 진짜 `design_pick_profile` · `design_selection` ·
* `graphTargetAt`(B05_Profile_UI_Selection) 를 Node 로 돌림. 종단도는 고른 측점 · 알약 두 칸만 흉내.
* 표준출력 JSON 한 벌 · 짝 = test_233_1_profile_pick.py.
*/
const fs = require("fs");
const path = require("path");
const ROOT = path.join(__dirname, "..", "..");
const { makeLoader } = require("./helper_ts_stub_loader.cjs");
function loadTs(file, stubs = {}) {
return makeLoader({
root: ROOT,
cache: false,
requireFor: (full) => (request) => {
if (stubs[request]) return stubs[request];
throw new Error(`stub 없음: ${request}`);
},
}).loadTs(path.join(ROOT, file));
}
const store = new Map();
const DSel = loadTs("A00_Common/design/design_selection.ts", {
"../../common_util/common_util_pipe_match": { PIPE_MATCH_M: 0.51 }, // 찾는 거리 정의 자리(472-6)
"../b_page_state": {
readState: (key, pid) => store.get(`${key}:${pid}`) ?? null,
writeState: (key, value, pid) => store.set(`${key}:${pid}`, value),
},
});
globalThis.window = { addEventListener() {}, removeEventListener() {} };
const ESC = loadTs("A00_Common/design/design_pick_escape.ts", { "./design_selection": DSel });
const IRR = {
irregularStationId: (id) => `irregular:${id}`,
isPipeStation: (s) => s.origin === "pipe",
};
const SY = loadTs("B05_Profile/B05_Profile_UI_Selection.ts", {
"../A00_Common/design/design_selection": DSel,
"./B05_Profile_UI_IrregularStations": IRR,
});
const PP = loadTs("A00_Common/design/design_pick_profile.ts", {
"./design_selection": DSel,
"./design_pipe_ids": { pipeIdAt: (at) => `pipe-${at.toFixed(2)}` }, // 프로젝트 없음 = 옛 자리 이름(323-5)
"./design_pick_escape": ESC,
"../../B05_Profile/B05_Profile_UI_Selection": SY,
"../../B05_Profile/B05_Profile_UI_IrregularStations": IRR,
});
const PID = "p233";
const sections = [80, 100, 120, 140, 300].map((at) => ({ station_id: `s${at}`, chainage_m: at }));
let pipes = [{ chainage_m: 80.17 }, { chainage_m: 300.4 }];
const irregular = [
{ id: "p80", chainage_m: 80.17, origin: "pipe" },
{ id: "sign", chainage_m: 127.86, origin: "user" },
];
/* 종단도 흉내 — 고른 측점 · 알약 */
const profile = { station: null, structure: null, paints: 0 };
const target = {
setSelectedStation: (id) => {
profile.station = id;
profile.structure = null;
profile.paints += 1;
},
setSelectedStructure: (id) => {
profile.structure = id;
profile.station = null;
profile.paints += 1;
},
};
let visible = true;
const disposers = [];
const pick = PP.bindProfilePick(
PID,
{ profile: target },
{ visible: () => visible, onDispose: (fn) => disposers.push(fn) },
{ irregular: () => irregular, pipes: () => pipes, sections: () => sections },
);
const snap = () => ({ station: profile.station, structure: profile.structure });
const sel = (chainageM, structureId = null) =>
DSel.selectDesign(PID, chainageM === null ? DSel.NO_SELECTION : { chainageM, structureId });
const out = {};
sel(120);
out.card = snap();
sel(127.86);
out.irregularSign = snap();
sel(80);
out.card80 = snap(); // 관 80.17 옆 카드 80 = 카드 선(관 아님)
sel(80.17);
out.pipe80 = snap();
sel(300.2);
out.pipePill = snap();
pipes = [{ chainage_m: 80.17 }, { chainage_m: 300.45 }]; // 관이 옮겨짐
pick.paint();
out.pipeMoved = snap();
sel(100, "wall");
out.structure = snap();
// 다른 길이 강조를 끔(저장 뒤 관 폼 닫힘 · 목록 다시 세움) → 값은 그대로 → 다시 얹음
target.setSelectedStructure(null);
out.clearedByOther = snap();
pick.paint();
out.repainted = snap();
// 숨은 보기는 안 그림 · 보이면 다시 얹음
visible = false;
sel(140);
out.hidden = snap();
visible = true;
pick.paint();
out.shownAgain = snap();
// 풂(값 비움) = 선 · 알약 모두 끔
sel(null);
out.released = snap();
// 보기를 떠나면 구독 끊음
disposers.forEach((fn) => fn());
const before = profile.paints;
sel(120);
out.paintsAfterDispose = profile.paints - before;
out.disposers = disposers.length;
process.stdout.write(JSON.stringify(out));