1 | ;
|
2 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
3 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
4 | };
|
5 | Object.defineProperty(exports, "__esModule", { value: true });
|
6 | const events_1 = __importDefault(require("events"));
|
7 | const logger_1 = __importDefault(require("./logger"));
|
8 | const file_watcher_1 = __importDefault(require("./file-watcher"));
|
9 | const keyboard_observer_1 = __importDefault(require("./keyboard-observer"));
|
10 | class 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 | }
|
99 | exports.default = LiveModeController;
|
100 | module.exports = exports.default;
|
101 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saXZlL2NvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBa0M7QUFDbEMsc0RBQThCO0FBQzlCLGtFQUF5QztBQUN6Qyw0RUFBZ0U7QUFHaEUsTUFBTSxrQkFBbUIsU0FBUSxnQkFBWTtJQVV6QyxZQUFvQixNQUFzQjtRQUN0QyxLQUFLLEVBQUUsQ0FBQztRQUVSLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxnQkFBTSxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDakQsQ0FBQztJQUVNLElBQUksQ0FBRSxLQUFlO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUU7YUFDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRU0sT0FBTztRQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxF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RUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFUyx1QkFBdUI7UUFDN0IsT0FBTyxJQUFJLDJCQUE2QixFQUFFLENBQUM7SUFDL0MsQ0FBQztJQUVPLGlCQUFpQixDQUFFLEtBQWU7UUFDdEMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFTyxXQUFXO1FBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztDQUNKO0FBRUQsa0JBQWUsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCBGaWxlV2F0Y2hlciBmcm9tICcuL2ZpbGUtd2F0Y2hlcic7XG5pbXBvcnQgTGl2ZU1vZGVLZXlib2FyZEV2ZW50T2JzZXJ2ZXIgZnJvbSAnLi9rZXlib2FyZC1vYnNlcnZlcic7XG5pbXBvcnQgTGl2ZU1vZGVSdW5uZXIgZnJvbSAnLi90ZXN0LXJ1bm5lcic7XG5cbmNsYXNzIExpdmVNb2RlQ29udHJvbGxlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gICAgcHJpdmF0ZSBydW5uaW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVzdGFydGluZzogYm9vbGVhbjtcbiAgICBwcml2YXRlIHdhdGNoaW5nUGF1c2VkOiBib29sZWFuO1xuICAgIHByaXZhdGUgc3RvcHBpbmc6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlcjtcbiAgICBwcml2YXRlIHJ1bm5lcjogTGl2ZU1vZGVSdW5uZXI7XG4gICAgcHJpdmF0ZSBrZXlib2FyZE9ic2VydmVyOiBMaXZlTW9kZUtleWJvYXJkRXZlbnRPYnNlcnZlcjtcbiAgICBwcml2YXRlIGZpbGVXYXRjaGVyOiBGaWxlV2F0Y2hlcjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvciAocnVubmVyOiBMaXZlTW9kZVJ1bm5lcikge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc3RhcnRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy53YXRjaGluZ1BhdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0b3BwaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gbmV3IExvZ2dlcigpO1xuICAgICAgICB0aGlzLnJ1bm5lciA9IHJ1bm5lcjtcblxuICAgICAgICB0aGlzLmtleWJvYXJkT2JzZXJ2ZXIgPSB0aGlzLl9jcmVhdGVLZXlib2FyZE9ic2VydmVyKCk7XG4gICAgICAgIHRoaXMuZmlsZVdhdGNoZXIgPSB0aGlzLl9jcmVhdGVGaWxlV2F0Y2hlcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbml0IChmaWxlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5rZXlib2FyZE9ic2VydmVyLnB1c2godGhpcyk7XG5cbiAgICAgICAgdGhpcy5faW5pdEZpbGVXYXRjaGluZyhmaWxlcyk7XG5cbiAgICAgICAgdGhpcy5fc2V0UnVubmluZygpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5sb2dnZXIud3JpdGVJbnRyb01lc3NhZ2UoZmlsZXMpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcG9zZSAoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsZVdhdGNoZXIuc3RvcCgpO1xuXG4gICAgICAgIHRoaXMua2V5Ym9hcmRPYnNlcnZlci5yZW1vdmUodGhpcyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJ1blRlc3RzIChzb3VyY2VDaGFuZ2VkPzogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy53YXRjaGluZ1BhdXNlZCB8fCB0aGlzLnJ1bm5pbmcpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5fc2V0UnVubmluZygpO1xuXG4gICAgICAgIHRoaXMubG9nZ2VyLndyaXRlUnVuVGVzdHNNZXNzYWdlKHNvdXJjZUNoYW5nZWQpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bm5lci5ydW5UZXN0cygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRlc3RSdW5Eb25lIChlcnI6IEVycm9yKTogdm9pZCB7XG4gICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghdGhpcy5yZXN0YXJ0aW5nKVxuICAgICAgICAgICAgdGhpcy5sb2dnZXIud3JpdGVUZXN0c0ZpbmlzaGVkTWVzc2FnZSgpO1xuXG4gICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnIoZXJyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlV2F0Y2hpbmcgKCk6IHZvaWQge1xuICAgICAgICB0aGlzLndhdGNoaW5nUGF1c2VkID0gIXRoaXMud2F0Y2hpbmdQYXVzZWQ7XG5cbiAgICAgICAgdGhpcy5sb2dnZXIud3JpdGVUb2dnbGVXYXRjaGluZ01lc3NhZ2UoIXRoaXMud2F0Y2hpbmdQYXVzZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdG9wICgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLnJ1bm5lciB8fCAhdGhpcy5ydW5uaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53cml0ZU5vdGhpbmdUb1N0b3BNZXNzYWdlKCk7XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nZ2VyLndyaXRlU3RvcFJ1bm5pbmdNZXNzYWdlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyLnN1c3BlbmQoKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdGFydGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc3RhcnQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5yZXN0YXJ0aW5nIHx8IHRoaXMud2F0Y2hpbmdQYXVzZWQpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgdGhpcy5yZXN0YXJ0aW5nID0gdHJ1ZTtcblxuICAgICAgICBpZiAodGhpcy5ydW5uaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9wKClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLmxvZ2dlci53cml0ZVRlc3RzRmluaXNoZWRNZXNzYWdlKCkpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5ydW5UZXN0cygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnJ1blRlc3RzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4aXQgKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5zdG9wcGluZylcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgICAgICB0aGlzLmxvZ2dlci53cml0ZUV4aXRNZXNzYWdlKCk7XG5cbiAgICAgICAgdGhpcy5zdG9wcGluZyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyID8gdGhpcy5ydW5uZXIuZXhpdCgpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZEZpbGVUb1dhdGNoZXMgKGZpbGVuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWxlV2F0Y2hlci5hZGRGaWxlKHRoaXMsIGZpbGVuYW1lKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZUZpbGVXYXRjaGVyICgpOiBGaWxlV2F0Y2hlciB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsZVdhdGNoZXIoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZUtleWJvYXJkT2JzZXJ2ZXIgKCk6IExpdmVNb2RlS2V5Ym9hcmRFdmVudE9ic2VydmVyIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMaXZlTW9kZUtleWJvYXJkRXZlbnRPYnNlcnZlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRGaWxlV2F0Y2hpbmcgKGZpbGVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4gdGhpcy5hZGRGaWxlVG9XYXRjaGVzKGZpbGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRSdW5uaW5nICgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXN0YXJ0aW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RvcHBpbmcgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpdmVNb2RlQ29udHJvbGxlcjtcbiJdfQ== |
\ | No newline at end of file |