flagpole
Version:
Simple and fast DOM integration, headless or headful browser, and REST API testing framework.
151 lines • 5.37 kB
JavaScript
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
;