UNPKG

intern

Version:

Intern. A next-generation code testing stack for JavaScript.

118 lines 5.05 kB
(function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "tslib", "@theintern/leadfoot/Session", "@theintern/common"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var Session_1 = tslib_1.__importDefault(require("@theintern/leadfoot/Session")); var common_1 = require("@theintern/common"); function getCoverageData(coverageVariable) { var coverageData = (function () { return this; })()[coverageVariable]; return coverageData && JSON.stringify(coverageData); } var ProxiedSession = (function (_super) { tslib_1.__extends(ProxiedSession, _super); function ProxiedSession() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.baseUrl = ''; _this.coverageVariable = ''; return _this; } Object.defineProperty(ProxiedSession.prototype, "coverageEnabled", { get: function () { return this.executor.config.coverage !== false; }, enumerable: false, configurable: true }); ProxiedSession.prototype.get = function (url) { var _this = this; if (!/^[A-Za-z][A-Za-z0-9+.-]+:/.test(url)) { if (url.indexOf(this.executor.config.basePath) === 0) { url = url.slice(this.executor.config.basePath.length); } url = this.baseUrl + url; } if (!this.coverageEnabled) { return _super.prototype.get.call(this, url); } return this._getCoverage().finally(function () { return _super.prototype.get.call(_this, url); }); }; ProxiedSession.prototype.quit = function () { var _this = this; this.executor.log('Quitting', this.sessionId); return this.setHeartbeatInterval(0) .then(function () { if (_this.coverageEnabled) { return _this._getCoverage(); } }) .finally(function () { return _super.prototype.quit.call(_this); }); }; ProxiedSession.prototype.setHeartbeatInterval = function (delay) { var _this = this; this._heartbeatIntervalHandle && this._heartbeatIntervalHandle.remove(); if (delay) { var sendHeartbeat_1 = function () { var timeoutId; var cancelled = false; var startTime = Date.now(); _this._heartbeatIntervalHandle = { remove: function () { cancelled = true; clearTimeout(timeoutId); } }; _this.getCurrentUrl() .then(function () { if (!cancelled) { timeoutId = global.setTimeout(sendHeartbeat_1, delay - (Date.now() - startTime)); } }) .catch(function (error) { return _this.executor.emit('error', error); }); }; sendHeartbeat_1(); } return common_1.Task.resolve(); }; ProxiedSession.prototype._getCoverage = function () { var _this = this; var shouldGetPromise; if (this.capabilities.brokenExecuteForNonHttpUrl) { shouldGetPromise = common_1.Task.resolve(this.getCurrentUrl().then(function (url) { return /^https?:/i.test(url); })); } else { shouldGetPromise = common_1.Task.resolve(true); } return shouldGetPromise.then(function (shouldGetCoverage) { if (shouldGetCoverage) { return _this.execute(getCoverageData, [ _this.coverageVariable ]).then(function (coverageData) { _this.executor.log('Got coverage data for', _this.sessionId); if (coverageData) { return _this.executor.emit('coverage', { sessionId: _this.sessionId, source: 'remote session', coverage: JSON.parse(coverageData) }); } }); } }); }; return ProxiedSession; }(Session_1.default)); exports.default = ProxiedSession; }); //# sourceMappingURL=ProxiedSession.js.map