UNPKG

12.6 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const events_1 = __importDefault(require("events"));
7const logger_1 = __importDefault(require("./logger"));
8const file_watcher_1 = __importDefault(require("./file-watcher"));
9const keyboard_observer_1 = __importDefault(require("./keyboard-observer"));
10class LiveModeController extends events_1.default {
11 constructor(runner) {
12 super();
13 this.running = false;
14 this.restarting = false;
15 this.watchingPaused = false;
16 this.stopping = false;
17 this.logger = new logger_1.default();
18 this.runner = runner;
19 this.keyboardObserver = this._createKeyboardObserver();
20 this.fileWatcher = this._createFileWatcher();
21 }
22 init(files) {
23 this.keyboardObserver.push(this);
24 this._initFileWatching(files);
25 this._setRunning();
26 return Promise.resolve()
27 .then(() => this.logger.writeIntroMessage(files));
28 }
29 dispose() {
30 this.fileWatcher.stop();
31 this.keyboardObserver.remove(this);
32 }
33 runTests(sourceChanged) {
34 if (this.watchingPaused || this.running)
35 return Promise.resolve();
36 this._setRunning();
37 this.logger.writeRunTestsMessage(sourceChanged);
38 return this.runner.runTests();
39 }
40 onTestRunDone(err) {
41 this.running = false;
42 if (!this.restarting)
43 this.logger.writeTestsFinishedMessage();
44 if (err)
45 this.logger.err(err);
46 }
47 toggleWatching() {
48 this.watchingPaused = !this.watchingPaused;
49 this.logger.writeToggleWatchingMessage(!this.watchingPaused);
50 }
51 stop() {
52 if (!this.runner || !this.running) {
53 this.logger.writeNothingToStopMessage();
54 return Promise.resolve();
55 }
56 this.logger.writeStopRunningMessage();
57 return this.runner.suspend()
58 .then(() => {
59 this.restarting = false;
60 this.running = false;
61 });
62 }
63 restart() {
64 if (this.restarting || this.watchingPaused)
65 return Promise.resolve();
66 this.restarting = true;
67 if (this.running) {
68 return this.stop()
69 .then(() => this.logger.writeTestsFinishedMessage())
70 .then(() => this.runTests());
71 }
72 return this.runTests();
73 }
74 exit() {
75 if (this.stopping)
76 return Promise.resolve();
77 this.logger.writeExitMessage();
78 this.stopping = true;
79 return this.runner ? this.runner.exit() : Promise.resolve();
80 }
81 addFileToWatches(filename) {
82 this.fileWatcher.addFile(this, filename);
83 }
84 _createFileWatcher() {
85 return new file_watcher_1.default();
86 }
87 _createKeyboardObserver() {
88 return new keyboard_observer_1.default();
89 }
90 _initFileWatching(files) {
91 files.forEach(file => this.addFileToWatches(file));
92 }
93 _setRunning() {
94 this.running = true;
95 this.restarting = false;
96 this.stopping = false;
97 }
98}
99exports.default = LiveModeController;
100module.exports = exports.default;
101//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXZlL2NvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBa0M7QUFDbEMsc0RBQThCO0FBQzlCLGtFQUF5QztBQUN6Qyw0RUFBZ0U7QUFHaEUsTUFBTSxrQkFBbUIsU0FBUSxnQkFBWTtJQVV6QyxZQUFvQixNQUFzQjtRQUN0QyxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxnQkFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVNLElBQUksQ0FBRSxLQUFlO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUU7YUFDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxF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RUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFUyx1QkFBdUI7UUFDN0IsT0FBTyxJQUFJLDJCQUE2QixFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVPLGlCQUFpQixDQUFFLEtBQWU7UUFDdEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxXQUFXO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztDQUNKO0FBRUQsa0JBQWUsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBGaWxlV2F0Y2hlciBmcm9tICcuL2ZpbGUtd2F0Y2hlcic7XG5pbXBvcnQgTGl2ZU1vZGVLZXlib2FyZEV2ZW50T2JzZXJ2ZXIgZnJvbSAnLi9rZXlib2FyZC1vYnNlcnZlcic7XG5pbXBvcnQgTGl2ZU1vZGVSdW5uZXIgZnJvbSAnLi90ZXN0LXJ1bm5lcic7XG5cbmNsYXNzIExpdmVNb2RlQ29udHJvbGxlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBydW5uaW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVzdGFydGluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHdhdGNoaW5nUGF1c2VkOiBib29sZWFuO1xuICAgIHByaXZhdGUgc3RvcHBpbmc6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlcjtcbiAgICBwcml2YXRlIHJ1bm5lcjogTGl2ZU1vZGVSdW5uZXI7XG4gICAgcHJpdmF0ZSBrZXlib2FyZE9ic2VydmVyOiBMaXZlTW9kZUtleWJvYXJkRXZlbnRPYnNlcnZlcjtcbiAgICBwcml2YXRlIGZpbGVXYXRjaGVyOiBGaWxlV2F0Y2hlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAocnVubmVyOiBMaXZlTW9kZVJ1bm5lcikge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc3RhcnRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy53YXRjaGluZ1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0b3BwaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuICAgICAgICB0aGlzLnJ1bm5lciA9IHJ1bm5lcjtcblxuICAgICAgICB0aGlzLmtleWJvYXJkT2JzZXJ2ZXIgPSB0aGlzLl9jcmVhdGVLZXlib2FyZE9ic2VydmVyKCk7XG4gICAgICAgIHRoaXMuZmlsZVdhdGNoZXIgPSB0aGlzLl9jcmVhdGVGaWxlV2F0Y2hlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0IChmaWxlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5rZXlib2FyZE9ic2VydmVyLnB1c2godGhpcyk7XG5cbiAgICAgICAgdGhpcy5faW5pdEZpbGVXYXRjaGluZyhmaWxlcyk7XG5cbiAgICAgICAgdGhpcy5fc2V0UnVubmluZygpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2dnZXIud3JpdGVJbnRyb01lc3NhZ2UoZmlsZXMpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcG9zZSAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsZVdhdGNoZXIuc3RvcCgpO1xuXG4gICAgICAgIHRoaXMua2V5Ym9hcmRPYnNlcnZlci5yZW1vdmUodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1blRlc3RzIChzb3VyY2VDaGFuZ2VkPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy53YXRjaGluZ1BhdXNlZCB8fCB0aGlzLnJ1bm5pbmcpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5fc2V0UnVubmluZygpO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLndyaXRlUnVuVGVzdHNNZXNzYWdlKHNvdXJjZUNoYW5nZWQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bm5lci5ydW5UZXN0cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRlc3RSdW5Eb25lIChlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5yZXN0YXJ0aW5nKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIud3JpdGVUZXN0c0ZpbmlzaGVkTWVzc2FnZSgpO1xuXG4gICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnIoZXJyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlV2F0Y2hpbmcgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLndhdGNoaW5nUGF1c2VkID0gIXRoaXMud2F0Y2hpbmdQYXVzZWQ7XG5cbiAgICAgICAgdGhpcy5sb2dnZXIud3JpdGVUb2dnbGVXYXRjaGluZ01lc3NhZ2UoIXRoaXMud2F0Y2hpbmdQYXVzZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLnJ1bm5lciB8fCAhdGhpcy5ydW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53cml0ZU5vdGhpbmdUb1N0b3BNZXNzYWdlKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLndyaXRlU3RvcFJ1bm5pbmdNZXNzYWdlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyLnN1c3BlbmQoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdGFydGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc3RhcnQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5yZXN0YXJ0aW5nIHx8IHRoaXMud2F0Y2hpbmdQYXVzZWQpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5yZXN0YXJ0aW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5ydW5uaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9wKClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmxvZ2dlci53cml0ZVRlc3RzRmluaXNoZWRNZXNzYWdlKCkpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5ydW5UZXN0cygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJ1blRlc3RzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4aXQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5zdG9wcGluZylcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICB0aGlzLmxvZ2dlci53cml0ZUV4aXRNZXNzYWdlKCk7XG5cbiAgICAgICAgdGhpcy5zdG9wcGluZyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyID8gdGhpcy5ydW5uZXIuZXhpdCgpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbGVUb1dhdGNoZXMgKGZpbGVuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxlV2F0Y2hlci5hZGRGaWxlKHRoaXMsIGZpbGVuYW1lKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZUZpbGVXYXRjaGVyICgpOiBGaWxlV2F0Y2hlciB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsZVdhdGNoZXIoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZUtleWJvYXJkT2JzZXJ2ZXIgKCk6IExpdmVNb2RlS2V5Ym9hcmRFdmVudE9ic2VydmVyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaXZlTW9kZUtleWJvYXJkRXZlbnRPYnNlcnZlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRGaWxlV2F0Y2hpbmcgKGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4gdGhpcy5hZGRGaWxlVG9XYXRjaGVzKGZpbGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRSdW5uaW5nICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXN0YXJ0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RvcHBpbmcgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpdmVNb2RlQ29udHJvbGxlcjtcbiJdfQ==
\No newline at end of file