156 lines
26 KiB
JavaScript
156 lines
26 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 lodash_1 = require("lodash");
|
||
|
const test_run_tracker_1 = __importDefault(require("../../api/test-run-tracker"));
|
||
|
const test_controller_1 = __importDefault(require("../../api/test-controller"));
|
||
|
const observed_callsites_storage_1 = __importDefault(require("../../test-run/observed-callsites-storage"));
|
||
|
const warning_log_1 = __importDefault(require("../../notifications/warning-log"));
|
||
|
const type_1 = __importDefault(require("../../test-run/commands/type"));
|
||
|
const base_1 = require("../../test-run/commands/base");
|
||
|
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
|
||
|
const re_executable_promise_1 = __importDefault(require("../../utils/re-executable-promise"));
|
||
|
const async_event_emitter_1 = __importDefault(require("../../utils/async-event-emitter"));
|
||
|
const marker_symbol_1 = __importDefault(require("../../test-run/marker-symbol"));
|
||
|
const constants_1 = require("../../test-run/execute-js-expression/constants");
|
||
|
const marker_1 = require("../serialization/replicator/transforms/function-marker-transform/marker");
|
||
|
const get_fn_1 = __importDefault(require("../../assertions/get-fn"));
|
||
|
const thennable_1 = require("../../utils/thennable");
|
||
|
const marker_2 = require("../serialization/replicator/transforms/promise-marker-transform/marker");
|
||
|
const observation_1 = require("../../test-run/commands/observation");
|
||
|
class TestRunProxy extends async_event_emitter_1.default {
|
||
|
constructor({ dispatcher, id, test, options, browser, activeWindowId, messageBus }) {
|
||
|
super();
|
||
|
this.debugging = false;
|
||
|
this[marker_symbol_1.default] = true;
|
||
|
this.dispatcher = dispatcher;
|
||
|
this.id = id;
|
||
|
this.test = test;
|
||
|
this.ctx = Object.create(null);
|
||
|
this.fixtureCtx = Object.create(null);
|
||
|
this._options = options;
|
||
|
this.browser = browser;
|
||
|
this.assertionCommands = new Map();
|
||
|
this.switchToWindowByPredicateCommands = new Map();
|
||
|
this.asyncJsExpressionCallsites = new Map();
|
||
|
this.controller = new test_controller_1.default(this);
|
||
|
this.observedCallsites = new observed_callsites_storage_1.default();
|
||
|
this.warningLog = new warning_log_1.default(null, warning_log_1.default.createAddWarningCallback(messageBus));
|
||
|
this.disableMultipleWindows = options.disableMultipleWindows;
|
||
|
this.activeWindowId = activeWindowId;
|
||
|
test_run_tracker_1.default.addActiveTestRun(this);
|
||
|
this._initializeRequestHooks();
|
||
|
}
|
||
|
_initializeRequestHooks() {
|
||
|
this.test.requestHooks.forEach(this._attachWarningLog, this);
|
||
|
}
|
||
|
_attachWarningLog(hook) {
|
||
|
hook._warningLog = this.warningLog;
|
||
|
}
|
||
|
_detachWarningLog(hook) {
|
||
|
hook._warningLog = null;
|
||
|
}
|
||
|
_storeAssertionCommand(command) {
|
||
|
command.id = (0, testcafe_hammerhead_1.generateUniqueId)();
|
||
|
this.assertionCommands.set(command.id, command);
|
||
|
}
|
||
|
_storeSwitchToWindowByPredicateCommand(command) {
|
||
|
command.id = (0, testcafe_hammerhead_1.generateUniqueId)();
|
||
|
this.switchToWindowByPredicateCommands.set(command.id, command);
|
||
|
}
|
||
|
_handleAssertionCommand(command) {
|
||
|
if ((0, lodash_1.isFunction)(command.actual)) {
|
||
|
command.originActual = command.actual;
|
||
|
command.actual = new marker_1.FunctionMarker();
|
||
|
this._storeAssertionCommand(command);
|
||
|
}
|
||
|
else if (command.actual instanceof re_executable_promise_1.default)
|
||
|
this._storeAssertionCommand(command);
|
||
|
else if ((0, thennable_1.isThennable)(command.actual)) {
|
||
|
command.originActual = command.actual;
|
||
|
command.actual = new marker_2.PromiseMarker();
|
||
|
this._storeAssertionCommand(command);
|
||
|
}
|
||
|
}
|
||
|
_handleExecuteClientFunctionCommandBase(command) {
|
||
|
command.esmRuntime = this.test.esmRuntime;
|
||
|
}
|
||
|
_storeActionCallsitesForExecutedAsyncJsExpression(callsite) {
|
||
|
// @ts-ignore
|
||
|
if ((callsite === null || callsite === void 0 ? void 0 : callsite.filename) !== constants_1.ERROR_FILENAME)
|
||
|
return;
|
||
|
const id = (0, testcafe_hammerhead_1.generateUniqueId)();
|
||
|
// @ts-ignore
|
||
|
callsite.id = id;
|
||
|
this.asyncJsExpressionCallsites.set(id, callsite);
|
||
|
}
|
||
|
async executeCommand(command, callsite) {
|
||
|
if (command instanceof base_1.ActionCommandBase && callsite)
|
||
|
this._storeActionCallsitesForExecutedAsyncJsExpression(callsite);
|
||
|
if (command.type === type_1.default.assertion)
|
||
|
this._handleAssertionCommand(command);
|
||
|
else if (command.type === type_1.default.useRole)
|
||
|
this.dispatcher.onRoleAppeared(command.role);
|
||
|
else if (command.type === type_1.default.switchToWindowByPredicate)
|
||
|
this._storeSwitchToWindowByPredicateCommand(command);
|
||
|
else if (command instanceof observation_1.ExecuteClientFunctionCommandBase)
|
||
|
this._handleExecuteClientFunctionCommandBase(command);
|
||
|
return this.dispatcher.executeCommand({
|
||
|
command,
|
||
|
callsite,
|
||
|
id: this.id,
|
||
|
});
|
||
|
}
|
||
|
executeCommandSync(command, callsite) {
|
||
|
if (command.type === type_1.default.assertion)
|
||
|
this._handleAssertionCommand(command);
|
||
|
else if (command.type === type_1.default.useRole)
|
||
|
this.dispatcher.onRoleAppeared(command.role);
|
||
|
return this.dispatcher.executeCommandSync({
|
||
|
command,
|
||
|
callsite,
|
||
|
id: this.id,
|
||
|
});
|
||
|
}
|
||
|
async addRequestHook(hook) {
|
||
|
if (this.test.requestHooks.includes(hook))
|
||
|
return;
|
||
|
this.test.requestHooks.push(hook);
|
||
|
this._attachWarningLog(hook);
|
||
|
await this.dispatcher.addRequestEventListeners({
|
||
|
hookId: hook.id,
|
||
|
hookClassName: hook._className,
|
||
|
rules: hook._requestFilterRules,
|
||
|
});
|
||
|
}
|
||
|
async removeRequestHook(hook) {
|
||
|
if (!this.test.requestHooks.includes(hook))
|
||
|
return;
|
||
|
(0, lodash_1.pull)(this.test.requestHooks, hook);
|
||
|
this._detachWarningLog(hook);
|
||
|
await this.dispatcher.removeRequestEventListeners({ rules: hook._requestFilterRules });
|
||
|
}
|
||
|
async getAssertionActualValue(commandId) {
|
||
|
const command = this.assertionCommands.get(commandId);
|
||
|
return command.actual._reExecute();
|
||
|
}
|
||
|
async executeAssertionFn(commandId) {
|
||
|
const command = this.assertionCommands.get(commandId);
|
||
|
command.actual = command.originActual;
|
||
|
const fn = (0, get_fn_1.default)(command);
|
||
|
return await fn();
|
||
|
}
|
||
|
restoreOriginCallsiteForError(err) {
|
||
|
err.errCallsite = this.asyncJsExpressionCallsites.get(err.errCallsite.id);
|
||
|
this.asyncJsExpressionCallsites.clear();
|
||
|
}
|
||
|
checkWindow(commandId, { title, url }) {
|
||
|
const command = this.switchToWindowByPredicateCommands.get(commandId);
|
||
|
return command.checkWindow({ title, url });
|
||
|
}
|
||
|
}
|
||
|
exports.default = TestRunProxy;
|
||
|
module.exports = exports.default;
|
||
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1ydW4tcHJveHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY29tcGlsZXIvdGVzdC1ydW4tcHJveHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBMEM7QUFDMUMsa0ZBQXdEO0FBRXhELGdGQUF1RDtBQUN2RCwyR0FBaUY7QUFDakYsa0ZBQXlEO0FBR3pELHdFQUF3RDtBQUN4RCx1REFBOEU7QUFJOUUsNkRBQXVEO0FBU3ZELDhGQUFvRTtBQUNwRSwwRkFBZ0U7QUFDaEUsaUZBQXlEO0FBQ3pELDhFQUFnRjtBQUVoRixvR0FBeUc7QUFDekcscUVBQTRDO0FBQzVDLHFEQUFvRDtBQUNwRCxtR0FBdUc7QUFDdkcscUVBQXVGO0FBRXZGLE1BQU0sWUFBYSxTQUFRLDZCQUFpQjtJQW1CeEMsWUFBb0IsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQW9CO1FBQ3hHLEtBQUssRUFBRSxDQUFDO1FBWkwsY0FBUyxHQUFHLEtBQUssQ0FBQztRQWNyQixJQUFJLENBQUMsdUJBQWEsQ0FBQyxHQUFzQixJQUFJLENBQUM7UUFDOUMsSUFBSSxDQUFDLFVBQVUsR0FBMEIsVUFBVSxDQUFDO1FBQ3BELElBQUksQ0FBQyxFQUFFLEdBQWtDLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFnQyxJQUFJLENBQUM7UUFDOUMsSUFBSSxDQUFDLEdBQUcsR0FBaUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsVUFBVSxHQUEwQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLEdBQTRCLE9BQU8sQ0FBQztRQUNqRCxJQUFJLENBQUMsT0FBTyxHQUE2QixPQUFPLENBQUM7UUFDakQsSUFBSSxDQUFDLGlC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
|