109 lines
13 KiB
JavaScript
109 lines
13 KiB
JavaScript
|
"use strict";
|
||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
|
};
|
||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||
|
const events_1 = __importDefault(require("events"));
|
||
|
const logger_1 = __importDefault(require("./logger"));
|
||
|
const file_watcher_1 = __importDefault(require("./file-watcher"));
|
||
|
const keyboard_observer_1 = __importDefault(require("./keyboard-observer"));
|
||
|
const types_1 = require("../errors/types");
|
||
|
const runtime_1 = require("../errors/runtime");
|
||
|
class LiveModeController extends events_1.default {
|
||
|
constructor(runner) {
|
||
|
super();
|
||
|
this.running = false;
|
||
|
this.restarting = false;
|
||
|
this.watchingPaused = false;
|
||
|
this.stopping = false;
|
||
|
this.logger = new logger_1.default();
|
||
|
this.runner = runner;
|
||
|
this.keyboardObserver = this._createKeyboardObserver();
|
||
|
this.fileWatcher = this._createFileWatcher();
|
||
|
}
|
||
|
_isTestFilesNotFoundError(err) {
|
||
|
// @ts-ignore
|
||
|
return runtime_1.GeneralError.isGeneralError(err) && err.code === types_1.RUNTIME_ERRORS.testFilesNotFound;
|
||
|
}
|
||
|
init(files) {
|
||
|
this.keyboardObserver.push(this);
|
||
|
this._initFileWatching(files);
|
||
|
this._setRunning();
|
||
|
return Promise.resolve()
|
||
|
.then(() => this.logger.writeIntroMessage(files));
|
||
|
}
|
||
|
dispose() {
|
||
|
this.fileWatcher.stop();
|
||
|
this.keyboardObserver.remove(this);
|
||
|
}
|
||
|
runTests(sourceChanged) {
|
||
|
if (this.watchingPaused || this.running)
|
||
|
return Promise.resolve();
|
||
|
this._setRunning();
|
||
|
this.logger.writeRunTestsMessage(sourceChanged);
|
||
|
return this.runner.runTests();
|
||
|
}
|
||
|
onTestRunDone(err) {
|
||
|
this.running = false;
|
||
|
if (this._isTestFilesNotFoundError(err))
|
||
|
throw err;
|
||
|
if (!this.restarting)
|
||
|
this.logger.writeTestsFinishedMessage();
|
||
|
if (err)
|
||
|
this.logger.err(err);
|
||
|
}
|
||
|
toggleWatching() {
|
||
|
this.watchingPaused = !this.watchingPaused;
|
||
|
this.logger.writeToggleWatchingMessage(!this.watchingPaused);
|
||
|
}
|
||
|
stop() {
|
||
|
if (!this.runner || !this.running) {
|
||
|
this.logger.writeNothingToStopMessage();
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
this.logger.writeStopRunningMessage();
|
||
|
return this.runner.suspend()
|
||
|
.then(() => {
|
||
|
this.restarting = false;
|
||
|
this.running = false;
|
||
|
});
|
||
|
}
|
||
|
restart() {
|
||
|
if (this.restarting || this.watchingPaused)
|
||
|
return Promise.resolve();
|
||
|
this.restarting = true;
|
||
|
if (this.running) {
|
||
|
return this.stop()
|
||
|
.then(() => this.logger.writeTestsFinishedMessage())
|
||
|
.then(() => this.runTests());
|
||
|
}
|
||
|
return this.runTests();
|
||
|
}
|
||
|
exit() {
|
||
|
if (this.stopping)
|
||
|
return Promise.resolve();
|
||
|
this.logger.writeExitMessage();
|
||
|
this.stopping = true;
|
||
|
return this.runner ? this.runner.exit() : Promise.resolve();
|
||
|
}
|
||
|
addFileToWatches(filename) {
|
||
|
this.fileWatcher.addFile(this, filename);
|
||
|
}
|
||
|
_createFileWatcher() {
|
||
|
return new file_watcher_1.default();
|
||
|
}
|
||
|
_createKeyboardObserver() {
|
||
|
return new keyboard_observer_1.default();
|
||
|
}
|
||
|
_initFileWatching(files) {
|
||
|
files.forEach(file => this.addFileToWatches(file));
|
||
|
}
|
||
|
_setRunning() {
|
||
|
this.running = true;
|
||
|
this.restarting = false;
|
||
|
this.stopping = false;
|
||
|
}
|
||
|
}
|
||
|
exports.default = LiveModeController;
|
||
|
module.exports = exports.default;
|
||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXZlL2NvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBa0M7QUFDbEMsc0RBQThCO0FBQzlCLGtFQUF5QztBQUN6Qyw0RUFBZ0U7QUFFaEUsMkNBQWlEO0FBQ2pELCtDQUFpRDtBQUdqRCxNQUFNLGtCQUFtQixTQUFRLGdCQUFZO0lBZXpDLFlBQW9CLE1BQXNCO1FBQ3RDLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGdCQUFNLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBakJPLHlCQUF5QixDQUFFLEdBQVU7UUFDekMsYUFBYTtRQUNiLE9BQU8sc0JBQVksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxzQkFBYyxDQUFDLGlCQUFpQixDQUFDO0lBQzdGLENBQUM7SUFnQk0sSUFBSSxDQUFFLEtBQWU7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5C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
|