UNPKG

jec-cli

Version:

CLI tool for managing JEC projects.

102 lines (101 loc) 3.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const jec_tool_cli_1 = require("jec-tool-cli"); const fs = require("fs"); const fsExtra = require("fs-extra"); const path = require("path"); const typescript_parser_1 = require("typescript-parser"); const jec_cli_template_1 = require("jec-cli-template"); const TestSuiteDto_1 = require("../../utils/TestSuiteDto"); class CreateTestSuite { constructor() { this.DOT = "."; this.SLASH = "/"; this.RELATIVE_PATH = "../"; this.EXTENSION = ".ts"; } createDto(argv) { const result = new TestSuiteDto_1.TestSuiteDto(); const classRef = argv.class; const lastDotId = classRef.lastIndexOf(this.DOT); result.className = classRef.substr(lastDotId + 1); result.name = result.className + "Test"; result.classPath = classRef.substr(0, lastDotId) .replace(this.DOT, this.SLASH); result.testPath = path.join("test", result.classPath); this.createRelativeClassPath(result); return result; } createRelativeClassPath(dto) { const buffer = dto.testPath.split(this.SLASH); let pathFix = this.RELATIVE_PATH; let len = buffer.length; while (len--) { pathFix += this.RELATIVE_PATH; } dto.relativeClassPath = `${pathFix}src/${dto.classPath}/${dto.className}`; } loadClass(dto, onLoad) { const filePath = path.join(process.cwd(), "src", dto.classPath, dto.className + this.EXTENSION); fs.readFile(filePath, (err, data) => { onLoad(err, data); }); } extractDeclarations(data, complete) { const result = new Array(); const parser = new typescript_parser_1.TypescriptParser(); const parsed = parser.parseSource(data); let len = -1; let declarations = null; let declaration = null; parsed.then((file) => { declarations = file.declarations[0].methods; len = declarations.length; while (len--) { declaration = declarations[len]; if (declaration.visibility === 2) { result.push(declaration.name); } } complete(null, result); }, (reason) => { complete(reason, null); }); } write(config, callback) { const builder = new jec_cli_template_1.TemplateBuilder(); const template = builder.build(jec_cli_template_1.TestSuiteTemplateGenerator, config); const name = config.name + this.EXTENSION; fsExtra.ensureDir(config.testPath, (err) => { if (err) callback(err); else { fsExtra.writeFile(path.join(config.testPath, name), template, (err) => { callback(err); }); } }); } run(argv) { const logger = jec_tool_cli_1.ConsoleCliLogger.getInstance(); let dto = this.createDto(argv); this.loadClass(dto, (err, data) => { if (err) logger.error(err); else { this.extractDeclarations(data.toString(), (error, data) => { if (err) logger.error(error); else { dto.methods = data; this.write(dto, (err) => { err ? logger.error(err) : logger.log(`Test suite with name '${dto.name}.ts' created in '${dto.testPath}'.`); }); } }); } }); } } exports.CreateTestSuite = CreateTestSuite;