intern
Version:
Intern. A next-generation code testing stack for JavaScript.
118 lines • 5.05 kB
JavaScript
(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