UNPKG

flagpole

Version:

Simple and fast DOM integration, headless or headful browser, and REST API testing framework.

151 lines 5.37 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.addScenario = exports.addSuite = exports.Cli = void 0; const flagpole_execution_1 = require("../flagpole-execution"); const flagpole_config_1 = require("../flagpole-config"); const fs = require("fs-extra"); const cli_helper_1 = require("./cli-helper"); const cli_ansi_1 = require("cli-ansi"); class Cli { constructor() { this._consoleLog = []; } static createSingleton() { if (!Cli._singleton) { Cli._singleton = new Cli(); } return Cli._singleton; } static get instance() { return Cli.createSingleton(); } static fatalError(message, exitCode = 1) { Cli.log(message).exit(exitCode); } static subheader(message) { return Cli.instance.subheader(message); } static log(...messages) { return Cli.instance.log.apply(Cli.instance, messages); } static list(...messages) { return Cli.instance.list.apply(Cli.instance, messages); } static exit(exitCode) { return Cli.instance.exit(exitCode); } stripLineBreaks(message) { return message.replace(/\n$/, ""); } subheader(heading) { cli_helper_1.printSubheader(this.stripLineBreaks(heading)); return this; } log(...messages) { messages.forEach((message) => { this._consoleLog.push(this.stripLineBreaks(message)); }); return this; } list(...messages) { const log = (message) => { this.log(" » " + this.stripLineBreaks(message)); }; messages.forEach((message) => { if (typeof message === "string") { log(message); } else { message.forEach((subMessage) => { log(subMessage); }); } }); return this; } exit(exitCode) { this._consoleLog.forEach((output) => { const lines = output.split("\n"); lines.forEach((line) => { process.send ? process.send(line) : console.log(line); }); }); process.exit(exitCode); } spinner(message, states = ["/", "—", "\\", "|"]) { let stateIndex = 0; const timer = setInterval(() => { cli_ansi_1.default.writeLine(cli_ansi_1.default.cursorUp(), cli_ansi_1.default.eraseLine(), `${states[stateIndex]} ${message}`); stateIndex = stateIndex < states.length - 1 ? stateIndex + 1 : 0; }, 100); return { updateMessage: (updatedMessage) => { message = updatedMessage; }, stop: () => { clearInterval(timer); }, }; } } exports.Cli = Cli; const addSuite = (suite, scenario) => __awaiter(void 0, void 0, void 0, function* () { const suiteConfig = new flagpole_config_1.SuiteConfig(flagpole_execution_1.FlagpoleExecution.global.config, suite); const suitePath = suiteConfig.getSourcePath(); let fileContents = flagpole_execution_1.FlagpoleExecution.global.config.project .isTypeScript ? `import flagpole from "flagpole";` : `const flagpole = require("flagpole");`; fileContents += "\n\n" + `flagpole('${suite.description || ""}', async (suite) => {` + "\n\n" + `suite.scenario("${scenario.description}", "${scenario.type}")` + "\n" + ` .open("${scenario.path}")` + "\n" + ` .next(async (context) => {` + "\n" + ` ` + "\n" + ` });` + "\n\n" + `});` + "\n\n"; yield fs.writeFile(suitePath, fileContents); flagpole_execution_1.FlagpoleExecution.global.config.addSuite(suite); yield flagpole_execution_1.FlagpoleExecution.global.config.save(); return suite; }); exports.addSuite = addSuite; const addScenario = (suite, opts) => __awaiter(void 0, void 0, void 0, function* () { const suitePath = suite.getSourcePath(); const fileContents = "\n\n" + `suite.scenario("${opts.description}", "${opts.type}")` + "\n" + ` .open("${opts.path}")` + "\n" + ` .next(async (context) => {` + "\n" + ` ` + "\n" + ` });` + "\n"; if (yield fs.pathExists(suitePath)) { yield fs.appendFile(suitePath, fileContents); } else { throw `Suite file ${suitePath} does not exist.`; } }); exports.addScenario = addScenario; //# sourceMappingURL=cli.js.map