UNPKG

@villedemontreal/scripting

Version:
127 lines 5.16 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.isShortHelpDisplayed = isShortHelpDisplayed; exports.isMainHelpDisplayed = isMainHelpDisplayed; exports.withCustomRunFile = withCustomRunFile; exports.withLogNodeInstance = withLogNodeInstance; const caporal_1 = require("@villedemontreal/caporal"); 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(caporal_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, { escapeArgs: true, outputHandler: (stdoutData, stderrData) => { const newOut = `${stdoutData ? ` ${stdoutData}` : ''} ${stderrData ? ` ${stderrData}` : ''} `; output += (0, node_util_1.stripVTControlCharacters)(newOut); }, }); } catch { isSuccess = false; // we have the output } return { output, isSuccess, }; } function isShortHelpDisplayed(output) { return (output.indexOf(`error: Unspecified command. Available commands are:`) > -1 && output.indexOf(`For more help, type run --help`) > -1); } 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 = path.join(configs_1.configs.libRoot, 'runTesting'); let runContent = fs.readFileSync(path.join(configs_1.configs.libRoot, 'run'), 'utf-8'); runContent = runContent.replace(toReplaceInRunFile, replacement); const runCmdTestingFilePath = path.join(configs_1.configs.libRoot, 'runTesting.cmd'); let runCmdContent = fs.readFileSync(path.join(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 = path.join(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