UNPKG

e1c-test-tools

Version:

Набор инструментов для тестирования (предварительная версия)

95 lines (92 loc) 5.39 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateMockedExternalBinFile = exports.getRootSrcFiles = void 0; const path_1 = require("path"); const E1cDispatcher_1 = __importDefault(require("e1c-repo-tools/dist/E1cDispatcher")); const os_1 = require("os"); const glob_1 = __importDefault(require("glob")); const fs_extra_1 = require("fs-extra"); const fs_1 = require("fs"); const NameToReplace = 'TesterSpecialLongNameForSelfTesting_afd1dd579eec439eb41e09c4b84f3222'; // TODO: move to utils const promiseGlob = (pattern, options) => new Promise((resolve, reject) => { glob_1.default(pattern, options, (err, matches) => { if (err) { reject(err); } else { resolve(matches); } }); }); // FIXME: till Great refactoring const getRootSrcFiles = async (dispatcher) => Promise.all((await fs_1.promises.readdir(dispatcher.pathToSrcDir, { 'encoding': 'utf8', 'withFileTypes': true })) .filter((file) => file.isDirectory && !file.name.match(/.bak\d*$/gmi)) .map(async (dir) => path_1.join(dispatcher.pathToSrcDir, dir.name, (await fs_1.promises.readdir(path_1.join(dispatcher.pathToSrcDir, dir.name), { 'encoding': 'utf8', 'withFileTypes': true })) .filter((file) => file.isFile && file.name.match(/.xml$/gmi))[0].name))); exports.getRootSrcFiles = getRootSrcFiles; const getTextForInsert = (pathToFile) => { let prefix = ''; if (!path_1.basename(pathToFile).startsWith('ObjectModule')) { prefix = '&НаКлиенте'; } return ` ${prefix} Функция ЭкспортируемыйМетод(ИмяМетода, ПараметрыМетода) Экспорт ИнициализацияПараметров = ""; ИменаПараметров = ""; Для Инд = 0 По ПараметрыМетода.Количество() - 1 Цикл ИмяПараметра = "__Парам" + Инд; ИменаПараметров = ИменаПараметров + ИмяПараметра + ", "; ИнициализацияПараметров = ИнициализацияПараметров + ИмяПараметра + " = ПараметрыМетода[" + Инд + "];" + Символы.ПС; КонецЦикла; Если СтрДлина(ИменаПараметров) > 0 Тогда ИменаПараметров = Лев(ИменаПараметров, СтрДлина(ИменаПараметров) - 2); КонецЕсли; Результат = Неопределено; Выполнить(ИнициализацияПараметров + "Результат = " + ИмяМетода + "(" + ИменаПараметров + ");"); Возврат Результат; КонецФункции `; }; const generateMockedExternalBinFile = async (pathToExternalBinFile) => { const workDir = await fs_extra_1.mkdtemp(path_1.join(os_1.tmpdir(), 'mock_')); const distDir = path_1.join(workDir, 'dist'); await fs_extra_1.ensureDir(distDir); const srcDir = path_1.join(workDir, 'src'); await fs_extra_1.ensureDir(srcDir); const logsDir = path_1.join(workDir, 'logs'); await fs_extra_1.ensureDir(logsDir); const repoConfig = { 'pathToExecutable': process.env.PATH_TO_E1C_EXECUTABLE, 'pathToDistDir': distDir, 'pathToSrcDir': srcDir, 'pathToLogsDir': logsDir, 'filesExtensions': [path_1.extname(pathToExternalBinFile)], }; const repoDispatcher = new E1cDispatcher_1.default(repoConfig); const result = await repoDispatcher.DumpExternalBinFile(pathToExternalBinFile); await Promise.all((await promiseGlob('**/*.bsl', { 'cwd': result.pathToSrcFiles })) .map((filename) => path_1.join(result.pathToSrcFiles, filename)) .map(async (filename) => [filename, (await fs_extra_1.readFile(filename, 'utf8')).concat(getTextForInsert(filename))]) .map(async (fileData) => (fs_extra_1.outputFile(...(await fileData))))); await Promise.all((await promiseGlob('**/*.xml', { 'cwd': result.pathToSrcFiles })) .map((filename) => path_1.join(result.pathToSrcFiles, filename)) .map(async (filename) => [filename, (await fs_extra_1.readFile(filename, 'utf8')).split(NameToReplace).join('Tester')]) .map(async (fileData) => (fs_extra_1.outputFile(...(await fileData))))); const pathToMockedExternalBinFiles = process.env.PATH_TO_MOCKED_EXTERNAL_BIN_FILES; const rootSrcFiles = await exports.getRootSrcFiles(repoDispatcher); for (let i = 0; i < rootSrcFiles.length; i += 1) { // eslint-disable-next-line no-await-in-loop const dumpedFileInfo = await repoDispatcher.BuildExternalBinFile(rootSrcFiles[i]); if (pathToMockedExternalBinFiles) { const parsedPath = path_1.parse(dumpedFileInfo.pathToBinFile); // eslint-disable-next-line no-await-in-loop await fs_extra_1.move(dumpedFileInfo.pathToBinFile, path_1.join(pathToMockedExternalBinFiles, `${parsedPath.base}`), { 'overwrite': true }); } } }; exports.generateMockedExternalBinFile = generateMockedExternalBinFile;