'use strict'; const test = require('node:test'); const assert = require('node:assert/strict'); const logger = require('../logger'); // 暫時攔截 process.stdout.write,回傳期間內寫出的內容 function captureStdout(fn) { const original = process.stdout.write; let out = ''; process.stdout.write = (chunk) => { out += chunk; return true; }; try { fn(); } finally { process.stdout.write = original; } return out; } // 暫時攔截 process.stderr.write,回傳期間內寫出的內容 function captureStderr(fn) { const original = process.stderr.write; let out = ''; process.stderr.write = (chunk) => { out += chunk; return true; }; try { fn(); } finally { process.stderr.write = original; } return out; } test('section 以主/次分隔線包夾標題輸出至 stdout', () => { const out = captureStdout(() => logger.section('參數檢查')); const line = '='.repeat(50); const subline = '-'.repeat(50); assert.equal(out, `\n${line}\n參數檢查\n${subline}\n`); }); test('info 以 [info] 前綴與換行輸出至 stdout', () => { const out = captureStdout(() => logger.info('IS_BETA=false')); assert.equal(out, '[info] IS_BETA=false\n'); }); test('error 以 [error] 前綴與換行輸出至 stderr', () => { const out = captureStderr(() => logger.error('GITEA_SERVER_URL 未設定')); assert.equal(out, '[error] GITEA_SERVER_URL 未設定\n'); }); test('error 僅輸出不終止行程,呼叫後仍可繼續執行', () => { let reached = false; captureStderr(() => { logger.error('still alive'); reached = true; }); assert.equal(reached, true); });