testcafe
Version:
Automated browser testing for the modern web development stack.
51 lines • 7.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const vm_1 = require("vm");
const selector_builder_1 = __importDefault(require("../client-functions/selectors/selector-builder"));
const client_function_builder_1 = __importDefault(require("../client-functions/client-function-builder"));
const contextsInfo = [];
function getContextInfo(testRun) {
let contextInfo = contextsInfo.find(info => info.testRun === testRun);
if (!contextInfo) {
contextInfo = { testRun, context: createExecutionContext(testRun), options: {} };
contextsInfo.push(contextInfo);
}
return contextInfo;
}
function getContext(testRun, options = {}) {
const contextInfo = getContextInfo(testRun);
contextInfo.options = options;
return contextInfo.context;
}
function createExecutionContext(testRun) {
const sandbox = {
Selector: (fn, options = {}) => {
const { skipVisibilityCheck, collectionMode } = getContextInfo(testRun).options;
if (skipVisibilityCheck)
options.visibilityCheck = false;
if (testRun && testRun.id)
options.boundTestRun = testRun;
if (collectionMode)
options.collectionMode = collectionMode;
const builder = new selector_builder_1.default(fn, options, { instantiation: 'Selector' });
return builder.getFunction();
},
ClientFunction: (fn, options = {}) => {
if (testRun && testRun.id)
options.boundTestRun = testRun;
const builder = new client_function_builder_1.default(fn, options, { instantiation: 'ClientFunction' });
return builder.getFunction();
}
};
return vm_1.createContext(sandbox);
}
function default_1(expression, testRun, options) {
const context = getContext(testRun, options);
return vm_1.runInContext(expression, context, { displayErrors: false });
}
exports.default = default_1;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1qcy1leHByZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3QtcnVuL2V4ZWN1dGUtanMtZXhwcmVzc2lvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJCQUFpRDtBQUNqRCxzR0FBNkU7QUFDN0UsMEdBQWdGO0FBRWhGLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUV4QixTQUFTLGNBQWMsQ0FBRSxPQUFPO0lBQzVCLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDO0lBRXRFLElBQUksQ0FBQyxXQUFXLEVBQUU7UUFDZCxXQUFXLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUVqRixZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ2xDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFFLE9BQU8sRUFBRSxPQUFPLEdBQUcsRUFBRTtJQUN0QyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFNUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFFOUIsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLHNCQUFzQixDQUFFLE9BQU87SUFDcEMsTUFBTSxPQUFPLEdBQUc7UUFDWixRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFO1lBQzNCLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBRWhGLElBQUksbUJBQW1CO2dCQUNuQixPQUFPLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUVwQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRTtnQkFDckIsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7WUFFbkMsSUFBSSxjQUFjO2dCQUNkLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1lBRTVDLE1BQU0sT0FBTyxHQUFHLElBQUksMEJBQWUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7WUFFaEYsT0FBTyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsQ0FBQztRQUVELGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUU7WUFDakMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLEVBQUU7Z0JBQ3JCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO1lBRW5DLE1BQU0sT0FBTyxHQUFHLElBQUksaUNBQXFCLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFFNUYsT0FBTyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakMsQ0FBQztLQUNKLENBQUM7SUFFRixPQUFPLGtCQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELG1CQUF5QixVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU87SUFDakQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUU3QyxPQUFPLGlCQUFZLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFKRCw0QkFJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHJ1bkluQ29udGV4dCB9IGZyb20gJ3ZtJztcbmltcG9ydCBTZWxlY3RvckJ1aWxkZXIgZnJvbSAnLi4vY2xpZW50LWZ1bmN0aW9ucy9zZWxlY3RvcnMvc2VsZWN0b3ItYnVpbGRlcic7XG5pbXBvcnQgQ2xpZW50RnVuY3Rpb25CdWlsZGVyIGZyb20gJy4uL2NsaWVudC1mdW5jdGlvbnMvY2xpZW50LWZ1bmN0aW9uLWJ1aWxkZXInO1xuXG5jb25zdCBjb250ZXh0c0luZm8gPSBbXTtcblxuZnVuY3Rpb24gZ2V0Q29udGV4dEluZm8gKHRlc3RSdW4pIHtcbiAgICBsZXQgY29udGV4dEluZm8gPSBjb250ZXh0c0luZm8uZmluZChpbmZvID0+IGluZm8udGVzdFJ1biA9PT0gdGVzdFJ1bik7XG5cbiAgICBpZiAoIWNvbnRleHRJbmZvKSB7XG4gICAgICAgIGNvbnRleHRJbmZvID0geyB0ZXN0UnVuLCBjb250ZXh0OiBjcmVhdGVFeGVjdXRpb25Db250ZXh0KHRlc3RSdW4pLCBvcHRpb25zOiB7fSB9O1xuXG4gICAgICAgIGNvbnRleHRzSW5mby5wdXNoKGNvbnRleHRJbmZvKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dEluZm87XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHQgKHRlc3RSdW4sIG9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IGNvbnRleHRJbmZvID0gZ2V0Q29udGV4dEluZm8odGVzdFJ1bik7XG5cbiAgICBjb250ZXh0SW5mby5vcHRpb25zID0gb3B0aW9ucztcblxuICAgIHJldHVybiBjb250ZXh0SW5mby5jb250ZXh0O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFeGVjdXRpb25Db250ZXh0ICh0ZXN0UnVuKSB7XG4gICAgY29uc3Qgc2FuZGJveCA9IHtcbiAgICAgICAgU2VsZWN0b3I6IChmbiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHNraXBWaXNpYmlsaXR5Q2hlY2ssIGNvbGxlY3Rpb25Nb2RlIH0gPSBnZXRDb250ZXh0SW5mbyh0ZXN0UnVuKS5vcHRpb25zO1xuXG4gICAgICAgICAgICBpZiAoc2tpcFZpc2liaWxpdHlDaGVjaylcbiAgICAgICAgICAgICAgICBvcHRpb25zLnZpc2liaWxpdHlDaGVjayA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAodGVzdFJ1biAmJiB0ZXN0UnVuLmlkKVxuICAgICAgICAgICAgICAgIG9wdGlvbnMuYm91bmRUZXN0UnVuID0gdGVzdFJ1bjtcblxuICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb25Nb2RlKVxuICAgICAgICAgICAgICAgIG9wdGlvbnMuY29sbGVjdGlvbk1vZGUgPSBjb2xsZWN0aW9uTW9kZTtcblxuICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IG5ldyBTZWxlY3RvckJ1aWxkZXIoZm4sIG9wdGlvbnMsIHsgaW5zdGFudGlhdGlvbjogJ1NlbGVjdG9yJyB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0RnVuY3Rpb24oKTtcbiAgICAgICAgfSxcblxuICAgICAgICBDbGllbnRGdW5jdGlvbjogKGZuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgICAgIGlmICh0ZXN0UnVuICYmIHRlc3RSdW4uaWQpXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5ib3VuZFRlc3RSdW4gPSB0ZXN0UnVuO1xuXG4gICAgICAgICAgICBjb25zdCBidWlsZGVyID0gbmV3IENsaWVudEZ1bmN0aW9uQnVpbGRlcihmbiwgb3B0aW9ucywgeyBpbnN0YW50aWF0aW9uOiAnQ2xpZW50RnVuY3Rpb24nIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gYnVpbGRlci5nZXRGdW5jdGlvbigpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBjcmVhdGVDb250ZXh0KHNhbmRib3gpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoZXhwcmVzc2lvbiwgdGVzdFJ1biwgb3B0aW9ucykge1xuICAgIGNvbnN0IGNvbnRleHQgPSBnZXRDb250ZXh0KHRlc3RSdW4sIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHJ1bkluQ29udGV4dChleHByZXNzaW9uLCBjb250ZXh0LCB7IGRpc3BsYXlFcnJvcnM6IGZhbHNlIH0pO1xufVxuIl19