UNPKG

testcafe

Version:

Automated browser testing for the modern web development stack.

91 lines 12.2 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createExecutionContext = exports.setContextOptions = exports.DEFAULT_CONTEXT_OPTIONS = void 0; const vm_1 = require("vm"); const module_1 = __importDefault(require("module")); const path_1 = __importDefault(require("path")); const exportable_lib_1 = __importDefault(require("../exportable-lib")); const node_modules_folder_name_1 = __importDefault(require("../../utils/node-modules-folder-name")); const OPTIONS_KEY = Symbol('options'); exports.DEFAULT_CONTEXT_OPTIONS = { skipVisibilityCheck: false, collectionMode: false, }; function getModuleBasePaths(currentPath) { const nodePaths = []; let parentDir = path_1.default.dirname(currentPath); while (currentPath !== parentDir) { currentPath = parentDir; parentDir = path_1.default.dirname(currentPath); nodePaths.push(path_1.default.join(currentPath, node_modules_folder_name_1.default)); } return nodePaths; } function createRequire(filename) { //Deprecated since: Node v12.2.0 if (module_1.default.createRequireFromPath) return module_1.default.createRequireFromPath(filename); if (module_1.default.createRequire) return module_1.default.createRequire(filename); const dummyModule = new module_1.default(filename, module); const localModulesPaths = getModuleBasePaths(filename); dummyModule.filename = filename; dummyModule.paths = localModulesPaths.concat(module.paths); return id => dummyModule.require(id); } function createSelectorDefinition(testRun) { return (fn, options = {}) => { const { skipVisibilityCheck, collectionMode } = testRun.controller ? testRun.controller.getExecutionContext()[OPTIONS_KEY] : createExecutionContext(testRun)[OPTIONS_KEY]; if (skipVisibilityCheck) options.visibilityCheck = false; if (testRun && testRun.id) options.boundTestRun = testRun; if (collectionMode) options.collectionMode = collectionMode; return exportable_lib_1.default.Selector(fn, options); }; } function createClientFunctionDefinition(testRun) { return (fn, options = {}) => { if (testRun && testRun.id) options.boundTestRun = testRun; return exportable_lib_1.default.ClientFunction(fn, options); }; } function setContextOptions(context, options) { context[OPTIONS_KEY] = options; } exports.setContextOptions = setContextOptions; function createExecutionContext(testRun) { const filename = testRun.test.testFile.filename; const replacers = { require: createRequire(filename), __filename: filename, __dirname: path_1.default.dirname(filename), t: testRun.controller, Selector: createSelectorDefinition(testRun), ClientFunction: createClientFunctionDefinition(testRun), Role: exportable_lib_1.default.Role, RequestLogger: exportable_lib_1.default.RequestLogger, RequestMock: exportable_lib_1.default.RequestMock, RequestHook: exportable_lib_1.default.RequestHook, [OPTIONS_KEY]: exports.DEFAULT_CONTEXT_OPTIONS, userVariables: exportable_lib_1.default.userVariables, }; return (0, vm_1.createContext)(new Proxy(replacers, { get: (target, property) => { if (replacers.hasOwnProperty(property)) return replacers[property]; if (global.hasOwnProperty(property)) return global[property]; throw new Error(`${property} is not defined`); }, })); } exports.createExecutionContext = createExecutionContext; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9leGVjdXRpb24tY29udGV4dC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQkFBbUM7QUFDbkMsb0RBQTRCO0FBQzVCLGdEQUF3QjtBQUN4Qix1RUFBOEM7QUFDOUMsb0dBQWdFO0FBRWhFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV6QixRQUFBLHVCQUF1QixHQUFHO0lBQ25DLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsY0FBYyxFQUFPLEtBQUs7Q0FDN0IsQ0FBQztBQUVGLFNBQVMsa0JBQWtCLENBQUUsV0FBVztJQUNwQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDckIsSUFBSSxTQUFTLEdBQUssY0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU1QyxPQUFPLFdBQVcsS0FBSyxTQUFTLEVBQUU7UUFDOUIsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUN4QixTQUFTLEdBQUssY0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4QyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGtDQUFZLENBQUMsQ0FBQyxDQUFDO0tBQ3hEO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFFLFFBQVE7SUFDNUIsZ0NBQWdDO0lBQ2hDLElBQUksZ0JBQU0sQ0FBQyxxQkFBcUI7UUFDNUIsT0FBTyxnQkFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWxELElBQUksZ0JBQU0sQ0FBQyxhQUFhO1FBQ3BCLE9BQU8sZ0JBQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFMUMsTUFBTSxXQUFXLEdBQVksSUFBSSxnQkFB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QyxRQUFRLENBQUMsQ0FBQztZQUUvQixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dCQUMvQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU1QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsUUFBUSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7S0FDSixDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUE3QkQsd0RBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ZtJztcbmltcG9ydCBNb2R1bGUgZnJvbSAnbW9kdWxlJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGV4cG9ydGFibGVMaWIgZnJvbSAnLi4vZXhwb3J0YWJsZS1saWInO1xuaW1wb3J0IE5PREVfTU9EVUxFUyBmcm9tICcuLi8uLi91dGlscy9ub2RlLW1vZHVsZXMtZm9sZGVyLW5hbWUnO1xuXG5jb25zdCBPUFRJT05TX0tFWSA9IFN5bWJvbCgnb3B0aW9ucycpO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT05URVhUX09QVElPTlMgPSB7XG4gICAgc2tpcFZpc2liaWxpdHlDaGVjazogZmFsc2UsXG4gICAgY29sbGVjdGlvbk1vZGU6ICAgICAgZmFsc2UsXG59O1xuXG5mdW5jdGlvbiBnZXRNb2R1bGVCYXNlUGF0aHMgKGN1cnJlbnRQYXRoKSB7XG4gICAgY29uc3Qgbm9kZVBhdGhzID0gW107XG4gICAgbGV0IHBhcmVudERpciAgID0gcGF0aC5kaXJuYW1lKGN1cnJlbnRQYXRoKTtcblxuICAgIHdoaWxlIChjdXJyZW50UGF0aCAhPT0gcGFyZW50RGlyKSB7XG4gICAgICAgIGN1cnJlbnRQYXRoID0gcGFyZW50RGlyO1xuICAgICAgICBwYXJlbnREaXIgICA9IHBhdGguZGlybmFtZShjdXJyZW50UGF0aCk7XG5cbiAgICAgICAgbm9kZVBhdGhzLnB1c2gocGF0aC5qb2luKGN1cnJlbnRQYXRoLCBOT0RFX01PRFVMRVMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZVBhdGhzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXF1aXJlIChmaWxlbmFtZSkge1xuICAgIC8vRGVwcmVjYXRlZCBzaW5jZTogTm9kZSB2MTIuMi4wXG4gICAgaWYgKE1vZHVsZS5jcmVhdGVSZXF1aXJlRnJvbVBhdGgpXG4gICAgICAgIHJldHVybiBNb2R1bGUuY3JlYXRlUmVxdWlyZUZyb21QYXRoKGZpbGVuYW1lKTtcblxuICAgIGlmIChNb2R1bGUuY3JlYXRlUmVxdWlyZSlcbiAgICAgICAgcmV0dXJuIE1vZHVsZS5jcmVhdGVSZXF1aXJlKGZpbGVuYW1lKTtcblxuICAgIGNvbnN0IGR1bW15TW9kdWxlICAgICAgICAgID0gbmV3IE1vZHVsZShmaWxlbmFtZSwgbW9kdWxlKTtcbiAgICBjb25zdCBsb2NhbE1vZHVsZXNQYXRocyAgICA9IGdldE1vZHVsZUJhc2VQYXRocyhmaWxlbmFtZSk7XG5cbiAgICBkdW1teU1vZHVsZS5maWxlbmFtZSA9IGZpbGVuYW1lO1xuICAgIGR1bW15TW9kdWxlLnBhdGhzICAgID0gbG9jYWxNb2R1bGVzUGF0aHMuY29uY2F0KG1vZHVsZS5wYXRocyk7XG5cbiAgICByZXR1cm4gaWQgPT4gZHVtbXlNb2R1bGUucmVxdWlyZShpZCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yRGVmaW5pdGlvbiAodGVzdFJ1bikge1xuICAgIHJldHVybiAoZm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHNraXBWaXNpYmlsaXR5Q2hlY2ssIGNvbGxlY3Rpb25Nb2RlIH0gPSB0ZXN0UnVuLmNvbnRyb2xsZXIgP1xuICAgICAgICAgICAgdGVzdFJ1bi5jb250cm9sbGVyLmdldEV4ZWN1dGlvbkNvbnRleHQoKVtPUFRJT05TX0tFWV0gOlxuICAgICAgICAgICAgY3JlYXRlRXhlY3V0aW9uQ29udGV4dCh0ZXN0UnVuKVtPUFRJT05TX0tFWV07XG5cbiAgICAgICAgaWYgKHNraXBWaXNpYmlsaXR5Q2hlY2spXG4gICAgICAgICAgICBvcHRpb25zLnZpc2liaWxpdHlDaGVjayA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0ZXN0UnVuICYmIHRlc3RSdW4uaWQpXG4gICAgICAgICAgICBvcHRpb25zLmJvdW5kVGVzdFJ1biA9IHRlc3RSdW47XG5cbiAgICAgICAgaWYgKGNvbGxlY3Rpb25Nb2RlKVxuICAgICAgICAgICAgb3B0aW9ucy5jb2xsZWN0aW9uTW9kZSA9IGNvbGxlY3Rpb25Nb2RlO1xuXG4gICAgICAgIHJldHVybiBleHBvcnRhYmxlTGliLlNlbGVjdG9yKGZuLCBvcHRpb25zKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDbGllbnRGdW5jdGlvbkRlZmluaXRpb24gKHRlc3RSdW4pIHtcbiAgICByZXR1cm4gKGZuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgaWYgKHRlc3RSdW4gJiYgdGVzdFJ1bi5pZClcbiAgICAgICAgICAgIG9wdGlvbnMuYm91bmRUZXN0UnVuID0gdGVzdFJ1bjtcblxuICAgICAgICByZXR1cm4gZXhwb3J0YWJsZUxpYi5DbGllbnRGdW5jdGlvbihmbiwgb3B0aW9ucyk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbnRleHRPcHRpb25zIChjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgY29udGV4dFtPUFRJT05TX0tFWV0gPSBvcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXhlY3V0aW9uQ29udGV4dCAodGVzdFJ1bikge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gdGVzdFJ1bi50ZXN0LnRlc3RGaWxlLmZpbGVuYW1lO1xuXG4gICAgY29uc3QgcmVwbGFjZXJzID0ge1xuICAgICAgICByZXF1aXJlOiAgICAgICAgY3JlYXRlUmVxdWlyZShmaWxlbmFtZSksXG4gICAgICAgIF9fZmlsZW5hbWU6ICAgICBmaWxlbmFtZSxcbiAgICAgICAgX19kaXJuYW1lOiAgICAgIHBhdGguZGlybmFtZShmaWxlbmFtZSksXG4gICAgICAgIHQ6ICAgICAgICAgICAgICB0ZXN0UnVuLmNvbnRyb2xsZXIsXG4gICAgICAgIFNlbGVjdG9yOiAgICAgICBjcmVhdGVTZWxlY3RvckRlZmluaXRpb24odGVzdFJ1biksXG4gICAgICAgIENsaWVudEZ1bmN0aW9uOiBjcmVhdGVDbGllbnRGdW5jdGlvbkRlZmluaXRpb24odGVzdFJ1biksXG4gICAgICAgIFJvbGU6ICAgICAgICAgICBleHBvcnRhYmxlTGliLlJvbGUsXG4gICAgICAgIFJlcXVlc3RMb2dnZXI6ICBleHBvcnRhYmxlTGliLlJlcXVlc3RMb2dnZXIsXG4gICAgICAgIFJlcXVlc3RNb2NrOiAgICBleHBvcnRhYmxlTGliLlJlcXVlc3RNb2NrLFxuICAgICAgICBSZXF1ZXN0SG9vazogICAgZXhwb3J0YWJsZUxpYi5SZXF1ZXN0SG9vayxcbiAgICAgICAgW09QVElPTlNfS0VZXTogIERFRkFVTFRfQ09OVEVYVF9PUFRJT05TLFxuICAgICAgICB1c2VyVmFyaWFibGVzOiAgZXhwb3J0YWJsZUxpYi51c2VyVmFyaWFibGVzLFxuICAgIH07XG5cbiAgICByZXR1cm4gY3JlYXRlQ29udGV4dChuZXcgUHJveHkocmVwbGFjZXJzLCB7XG4gICAgICAgIGdldDogKHRhcmdldCwgcHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBsYWNlcnMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXBsYWNlcnNbcHJvcGVydHldO1xuXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsW3Byb3BlcnR5XTtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5fSBpcyBub3QgZGVmaW5lZGApO1xuICAgICAgICB9LFxuICAgIH0pKTtcbn1cbiJdfQ==