UNPKG

@villedemontreal/scripting

Version:
121 lines 4.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setTestingConfigs = setTestingConfigs; exports.timeout = timeout; exports.containsText = containsText; exports.run = run; exports.runCore = runCore; exports.isMainHelpDisplayed = isMainHelpDisplayed; exports.withCustomRunFile = withCustomRunFile; exports.withLogNodeInstance = withLogNodeInstance; const core_1 = require("@caporal/core"); const general_utils_1 = require("@villedemontreal/general-utils"); const chai_1 = require("chai"); const child_process_1 = require("child_process"); const fs = require("fs-extra"); const path = require("path"); const node_util_1 = require("node:util"); const configs_1 = require("../config/configs"); function setTestingConfigs() { configs_1.configs.setCaporal(core_1.program); configs_1.configs.setProjectRoot(path.resolve(`${__dirname}/../../..`)); configs_1.configs.setProjectOutDir(`${configs_1.configs.projectRoot}/dist`); } /** * The "--no-timeouts" arg doesn't work to disable * the Mocha timeouts (while debugging) if a timeout * is specified in the code itself. Using this to set the * timeouts does. */ function timeout(mocha, milliSec) { mocha.timeout(process.argv.includes('--no-timeouts') ? 0 : milliSec); } function containsText(corpus, text) { const lines = text .split('\n') .map((line) => line.trim()) .filter((line) => line.trim() !== ''); if (lines.length === 0) { return false; } let lastIdx = -1; for (const line of lines) { const idx = corpus.indexOf(line, lastIdx); if (idx < 0) { console.log('Could not find line', line, 'in corpus', corpus); return false; } lastIdx = idx; } return true; } async function run(...args) { return await runCore(configs_1.configs.isWindows ? 'run.cmd' : './run', ...args); } async function runCore(runFilePath, ...args) { let output = ``; let isSuccess = true; try { await general_utils_1.utils.exec(runFilePath, args, { outputHandler: (stdoutData, stderrData) => { const newOut = `${stdoutData ? ' ' + stdoutData : ''} ${stderrData ? ' ' + stderrData : ''} `; output += (0, node_util_1.stripVTControlCharacters)(newOut); }, }); } catch (err) { isSuccess = false; // we have the output } return { output, isSuccess, }; } function isMainHelpDisplayed(output) { return (output.indexOf(`to get some help about a command`) > -1 && output.indexOf(`A simple testing script`) > -1 && output.indexOf(`A testing hidden script`) <= -1); } async function withCustomRunFile(toReplaceInRunFile, replacement, ...runArgs) { const runTestingFilePath = `${configs_1.configs.libRoot}/runTesting`; let runContent = fs.readFileSync(`${configs_1.configs.libRoot}/run`, 'utf-8'); runContent = runContent.replace(toReplaceInRunFile, replacement); const runCmdTestingFilePath = `${configs_1.configs.libRoot}/runTesting.cmd`; let runCmdContent = fs.readFileSync(`${configs_1.configs.libRoot}/run.cmd`, 'utf-8'); runCmdContent = runCmdContent.replace(`"%~dp0\\run"`, `"%~dp0\\runTesting"`); try { fs.writeFileSync(runTestingFilePath, runContent, 'utf-8'); if (!configs_1.configs.isWindows) { (0, child_process_1.execSync)(`chmod +x ${runTestingFilePath}`); } fs.writeFileSync(runCmdTestingFilePath, runCmdContent, 'utf-8'); const { output, isSuccess } = await runCore(configs_1.configs.isWindows ? 'runTesting.cmd' : './runTesting', ...runArgs); return { output, isSuccess }; } finally { if (fs.existsSync(runTestingFilePath)) { fs.unlinkSync(runTestingFilePath); } if (fs.existsSync(runCmdTestingFilePath)) { fs.unlinkSync(runCmdTestingFilePath); } } } async function withLogNodeInstance(...runArgs) { const mainJsPath = `${configs_1.configs.libRoot}/dist/src/main.js`; const mainJsCodeOriginal = fs.readFileSync(mainJsPath, 'utf8'); try { const anchor = `addUnhandledRejectionHandler();`; chai_1.assert.isTrue(mainJsCodeOriginal.indexOf(anchor) > -1); const outputCode = `console.info('MAIN NODE_APP_INSTANCE: ' + process.env.${general_utils_1.globalConstants.envVariables.NODE_APP_INSTANCE});`; const newCode = mainJsCodeOriginal.replace(anchor, `${anchor}\n${outputCode}`); fs.writeFileSync(mainJsPath, newCode, 'utf8'); const { output, isSuccess } = await run(...runArgs); return { output, isSuccess }; } finally { fs.writeFileSync(mainJsPath, mainJsCodeOriginal, 'utf8'); } } //# sourceMappingURL=testingUtils.js.map