From c05a4ba798a15e2be97667b4f25c4095cec42750 Mon Sep 17 00:00:00 2001 From: umsangdon Date: Wed, 21 Oct 2026 17:30:35 +0900 Subject: [PATCH] =?UTF-8?q?test(508-1b=20=EC=98=9B=20=ED=97=AC=ED=8D=BC=20?= =?UTF-8?q?=EA=B3=B5=EC=9A=A9=20=EB=B6=88=EB=9F=AC=EC=98=A4=EA=B8=B0=207/7?= =?UTF-8?q?):=20=ED=97=AC=ED=8D=BC=208=20=EA=B3=B3=20`loadTs`=20=EB=B2=A0?= =?UTF-8?q?=EB=82=8C=20=EA=B1=B7=EA=B3=A0=20`makeLoader`=20=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 헬퍼 동작 그대로(풀이 함수 본문은 옮겨 담음) · 제품 코드 안 고침 - 확인: 이 묶음 헬퍼를 쓰는 시험 70 개 전 70 통과 → 후 70 통과 (시험별 junit 대조 · 어긋남 0) Co-Authored-By: Claude Sonnet 5.5 --- resources/tester/helper_298_2_b07_buttons.cjs | 17 +++++++-------- .../tester/helper_391_routeedit_plan_draw.cjs | 21 ++++++------------- .../helper_399_plan_structure_marks.cjs | 21 ++++++------------- .../tester/helper_403_triangle_angle.cjs | 18 +++++++--------- .../tester/helper_411_a_cross_structure.cjs | 21 ++++++------------- resources/tester/helper_438_1_straighten.cjs | 21 ++++--------------- resources/tester/helper_472_save_warnings.cjs | 21 ++++++------------- resources/tester/helper_506_3_b07_save.cjs | 17 +++++++-------- 8 files changed, 51 insertions(+), 106 deletions(-) diff --git a/resources/tester/helper_298_2_b07_buttons.cjs b/resources/tester/helper_298_2_b07_buttons.cjs index f145823dd..549f1d48c 100644 --- a/resources/tester/helper_298_2_b07_buttons.cjs +++ b/resources/tester/helper_298_2_b07_buttons.cjs @@ -4,7 +4,7 @@ */ const fs = require("fs"); const path = require("path"); -const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); +const { makeLoader } = require("./helper_ts_stub_loader.cjs"); const B07 = path.join(__dirname, "..", "..", "B07_DesignDetail"); const calls = []; @@ -36,14 +36,13 @@ global.localStorage = { global.location = { reload: () => calls.push(["reload"]) }; global.document = { querySelectorAll: () => [] }; -function loadTs(file) { - const js = ts.transpileModule(fs.readFileSync(file, "utf8"), { - compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, - }).outputText; - const box = { exports: {} }; - new Function("exports", "module", "require", js)(box.exports, box, (r) => STUBS[r] ?? {}); - return box.exports; -} +const { loadTs } = makeLoader({ + root: path.join(__dirname, "..", ".."), + cache: false, + requireFor: (full) => { + return (r) => STUBS[r] ?? {}; + }, +}); const Save = loadTs(path.join(B07, "B07_DesignDetail_UI_Save.ts")); diff --git a/resources/tester/helper_391_routeedit_plan_draw.cjs b/resources/tester/helper_391_routeedit_plan_draw.cjs index 91ba4ea0c..6650277c7 100644 --- a/resources/tester/helper_391_routeedit_plan_draw.cjs +++ b/resources/tester/helper_391_routeedit_plan_draw.cjs @@ -3,27 +3,18 @@ */ const fs = require("fs"); const path = require("path"); -const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); +const { makeLoader } = require("./helper_ts_stub_loader.cjs"); const B05 = path.join(__dirname, "..", "..", "B05_Profile"); const STUBS = { "./B05_Profile_UI_RouteEdit_Input": { pickHover: () => null } }; -const cache = new Map(); -function loadTs(full) { - if (cache.has(full)) return cache.get(full); - const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { - compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, - }).outputText; - const box = { exports: {} }; - cache.set(full, box.exports); - const localRequire = (request) => { +const { loadTs } = makeLoader({ + root: path.join(__dirname, "..", ".."), + requireFor: (full) => (request) => { if (STUBS[request]) return STUBS[request]; if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); return require(request); - }; - new Function("exports", "module", "require", js)(box.exports, box, localRequire); - cache.set(full, box.exports); - return box.exports; -} + }, +}); /** 그린 것만 적는 가짜 캔버스 — 선 = moveTo/lineTo 점 · 점 = arc 가운데 · 획 색. */ function fakeContext() { diff --git a/resources/tester/helper_399_plan_structure_marks.cjs b/resources/tester/helper_399_plan_structure_marks.cjs index 540d11f70..a5a9b13a3 100644 --- a/resources/tester/helper_399_plan_structure_marks.cjs +++ b/resources/tester/helper_399_plan_structure_marks.cjs @@ -5,7 +5,7 @@ */ const fs = require("fs"); const path = require("path"); -const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); +const { makeLoader } = require("./helper_ts_stub_loader.cjs"); const B05 = path.join(__dirname, "..", "..", "B05_Profile"); const out = {}; @@ -94,25 +94,16 @@ const STUBS = { ], }, }; -const cache = new Map(); -function loadTs(full) { - if (cache.has(full)) return cache.get(full); - const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { - compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, - }).outputText; - const box = { exports: {} }; - cache.set(full, box.exports); - const localRequire = (request) => { +const { loadTs } = makeLoader({ + root: path.join(__dirname, "..", ".."), + requireFor: (full) => (request) => { if (STUBS[request]) return STUBS[request]; if (request.startsWith("@ui/")) return loadTs(path.join(B05, "..", "ui_template", `${request.slice(4)}.ts`)); if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); return require(request); - }; - new Function("exports", "module", "require", js)(box.exports, box, localRequire); - cache.set(full, box.exports); - return box.exports; -} + }, +}); /** 그린 것만 적는 가짜 캔버스 — 획 = 색 · 굵기 · 그때 옮긴 자리(translate) · 선 점. */ function fakeContext(canvas) { diff --git a/resources/tester/helper_403_triangle_angle.cjs b/resources/tester/helper_403_triangle_angle.cjs index 72e54682e..876966f48 100644 --- a/resources/tester/helper_403_triangle_angle.cjs +++ b/resources/tester/helper_403_triangle_angle.cjs @@ -1,26 +1,22 @@ /* 403 곡선 창 하단 글 헬퍼 — `_Label.curveInfoText` 를 트랜스파일해 경우별 글을 JSON 으로 낸다. */ const fs = require("fs"); const path = require("path"); -const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); +const { makeLoader } = require("./helper_ts_stub_loader.cjs"); const B05 = path.join(__dirname, "..", "..", "B05_Profile"); const STUBS = { "@ui/ui_template_elements": { createButton: () => null }, "./B05_Profile_UI_Panel_Fields": { numberField: () => null, toggleButton: () => null }, }; -function loadTs(full) { - const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { - compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, - }).outputText; - const box = { exports: {} }; - const localRequire = (request) => { +const { loadTs } = makeLoader({ + root: path.join(__dirname, "..", ".."), + cache: false, + requireFor: (full) => (request) => { if (STUBS[request]) return STUBS[request]; if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); return require(request); - }; - new Function("exports", "module", "require", js)(box.exports, box, localRequire); - return box.exports; -} + }, +}); const { curveInfoText } = loadTs(path.join(B05, "B05_Profile_UI_RouteEdit_Label.ts")); process.stdout.write( diff --git a/resources/tester/helper_411_a_cross_structure.cjs b/resources/tester/helper_411_a_cross_structure.cjs index b31414518..f575cfbfd 100644 --- a/resources/tester/helper_411_a_cross_structure.cjs +++ b/resources/tester/helper_411_a_cross_structure.cjs @@ -5,7 +5,7 @@ */ const fs = require("fs"); const path = require("path"); -const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); +const { makeLoader } = require("./helper_ts_stub_loader.cjs"); const B05 = path.join(__dirname, "..", "..", "B05_Profile"); const out = {}; @@ -84,23 +84,14 @@ const STUBS = { routeCrossSource: () => null, }, }; -const cache = new Map(); -function loadTs(full) { - if (cache.has(full)) return cache.get(full); - const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { - compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, - }).outputText; - const box = { exports: {} }; - cache.set(full, box.exports); - const localRequire = (request) => { +const { loadTs } = makeLoader({ + root: path.join(__dirname, "..", ".."), + requireFor: (full) => (request) => { if (STUBS[request]) return STUBS[request]; if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); return require(request); - }; - new Function("exports", "module", "require", js)(box.exports, box, localRequire); - cache.set(full, box.exports); - return box.exports; -} + }, +}); const cross = loadTs(path.join(B05, "B05_Profile_UI_RouteEdit_Cross.ts")); const station = (key, chainageM, kind, id = null) => ({ key, chainageM, kind, id }); diff --git a/resources/tester/helper_438_1_straighten.cjs b/resources/tester/helper_438_1_straighten.cjs index 88d6355f9..ebbcb8984 100644 --- a/resources/tester/helper_438_1_straighten.cjs +++ b/resources/tester/helper_438_1_straighten.cjs @@ -4,24 +4,11 @@ */ const fs = require("fs"); const path = require("path"); -const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); +const { makeLoader } = require("./helper_ts_stub_loader.cjs"); -const cache = new Map(); -function loadTs(file) { - const full = path.resolve(file); - if (cache.has(full)) return cache.get(full); - const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { - compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, - }).outputText; - const box = { exports: {} }; - cache.set(full, box.exports); - const localRequire = (request) => { - if (request.startsWith(".")) return loadTs(path.join(path.dirname(full), `${request}.ts`)); - return require(request); - }; - new Function("exports", "module", "require", js)(box.exports, box, localRequire); - return box.exports; -} +const { loadTs } = makeLoader({ + root: path.join(__dirname, "..", ".."), +}); const ground = loadTs( path.join(__dirname, "..", "..", "B05_Profile", "logic", "B05_Profile_Grade_Ground.ts"), diff --git a/resources/tester/helper_472_save_warnings.cjs b/resources/tester/helper_472_save_warnings.cjs index e1c90c6d0..3b1dbd0f1 100644 --- a/resources/tester/helper_472_save_warnings.cjs +++ b/resources/tester/helper_472_save_warnings.cjs @@ -3,24 +3,15 @@ */ const fs = require("fs"); const path = require("path"); -const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); +const { makeLoader } = require("./helper_ts_stub_loader.cjs"); -const cache = new Map(); -function loadTs(file) { - const full = path.resolve(file); - if (cache.has(full)) return cache.get(full); - const js = ts.transpileModule(fs.readFileSync(full, "utf8"), { - compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, - }).outputText; - const box = { exports: {} }; - cache.set(full, box.exports); - const localRequire = (request) => +const { loadTs } = makeLoader({ + root: path.join(__dirname, "..", ".."), + requireFor: (full) => (request) => request.startsWith(".") ? loadTs(path.join(path.dirname(full), `${request}.ts`)) - : require(request); - new Function("exports", "module", "require", js)(box.exports, box, localRequire); - return box.exports; -} + : require(request), +}); const align = loadTs( path.join(__dirname, "..", "..", "B05_Profile", "logic", "B05_Profile_UI_Profile_Alignment.ts"), diff --git a/resources/tester/helper_506_3_b07_save.cjs b/resources/tester/helper_506_3_b07_save.cjs index cd9db841b..dd4cc0d74 100644 --- a/resources/tester/helper_506_3_b07_save.cjs +++ b/resources/tester/helper_506_3_b07_save.cjs @@ -3,7 +3,7 @@ */ const fs = require("fs"); const path = require("path"); -const ts = require(path.join(__dirname, "..", "..", "config", "node_modules", "typescript")); +const { makeLoader } = require("./helper_ts_stub_loader.cjs"); const B07 = path.join(__dirname, "..", "..", "B07_DesignDetail"); const calls = []; @@ -39,14 +39,13 @@ global.localStorage = { removeItem: (key) => calls.push(["drop", key]) }; global.location = { reload: () => calls.push(["reload"]) }; global.document = { querySelectorAll: () => [] }; -function loadTs(file) { - const js = ts.transpileModule(fs.readFileSync(file, "utf8"), { - compilerOptions: { module: ts.ModuleKind.CommonJS, target: ts.ScriptTarget.ES2020 }, - }).outputText; - const box = { exports: {} }; - new Function("exports", "module", "require", js)(box.exports, box, (r) => STUBS[r] ?? {}); - return box.exports; -} +const { loadTs } = makeLoader({ + root: path.join(__dirname, "..", ".."), + cache: false, + requireFor: (full) => { + return (r) => STUBS[r] ?? {}; + }, +}); Save = loadTs(path.join(B07, "B07_DesignDetail_UI_Save.ts"));