UNPKG

@browserstack/testcafe

Version:

Automated browser testing for the modern web development stack.

82 lines 11 kB
"use strict"; 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 module_1 = __importDefault(require("module")); const path_1 = __importDefault(require("path")); const exportable_lib_1 = __importDefault(require("../exportable-lib")); const OPTIONS_KEY = Symbol('options'); const NODE_MODULES_DIR = 'node_modules'; 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_DIR)); } 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.getExecutionContext()[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 }; return 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9leGVjdXRpb24tY29udGV4dC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJCQUFtQztBQUNuQyxvREFBNEI7QUFDNUIsZ0RBQXdCO0FBQ3hCLHVFQUE4QztBQUU5QyxNQUFNLFdBQVcsR0FBUSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0MsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUM7QUFFeEMsU0FBUyxrQkFBa0IsQ0FBRSxXQUFXO0lBQ3BDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNyQixJQUFJLFNBQVMsR0FBSyxjQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTVDLE9BQU8sV0FBVyxLQUFLLFNBQVMsRUFBRTtRQUM5QixXQUFXLEdBQUcsU0FBUyxDQUFDO1FBQ3hCLFNBQVMsR0FBSyxjQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXhDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFFLFFBQVE7SUFDNUIsZ0NBQWdDO0lBQ2hDLElBQUksZ0JBQU0sQ0FBQyxxQkFBcUI7UUFDNUIsT0FBTyxnQkFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWxELElBQUksZ0JBQU0sQ0FBQyxhQUFhO1FBQ3BCLE9BQU8sZ0JBQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFMUMsTUFBTSxXQUFXLEdBQVksSUFBSSxnQkFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMxRCxNQUFNLGlCQUFpQixHQUFNLGtC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Q29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAndm0nO1xuaW1wb3J0IE1vZHVsZSBmcm9tICdtb2R1bGUnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgZXhwb3J0YWJsZUxpYiBmcm9tICcuLi9leHBvcnRhYmxlLWxpYic7XG5cbmNvbnN0IE9QVElPTlNfS0VZICAgICAgPSBTeW1ib2woJ29wdGlvbnMnKTtcbmNvbnN0IE5PREVfTU9EVUxFU19ESVIgPSAnbm9kZV9tb2R1bGVzJztcblxuZnVuY3Rpb24gZ2V0TW9kdWxlQmFzZVBhdGhzIChjdXJyZW50UGF0aCkge1xuICAgIGNvbnN0IG5vZGVQYXRocyA9IFtdO1xuICAgIGxldCBwYXJlbnREaXIgICA9IHBhdGguZGlybmFtZShjdXJyZW50UGF0aCk7XG5cbiAgICB3aGlsZSAoY3VycmVudFBhdGggIT09IHBhcmVudERpcikge1xuICAgICAgICBjdXJyZW50UGF0aCA9IHBhcmVudERpcjtcbiAgICAgICAgcGFyZW50RGlyICAgPSBwYXRoLmRpcm5hbWUoY3VycmVudFBhdGgpO1xuXG4gICAgICAgIG5vZGVQYXRocy5wdXNoKHBhdGguam9pbihjdXJyZW50UGF0aCwgTk9ERV9NT0RVTEVTX0RJUikpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlUGF0aHM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVJlcXVpcmUgKGZpbGVuYW1lKSB7XG4gICAgLy9EZXByZWNhdGVkIHNpbmNlOiBOb2RlIHYxMi4yLjBcbiAgICBpZiAoTW9kdWxlLmNyZWF0ZVJlcXVpcmVGcm9tUGF0aClcbiAgICAgICAgcmV0dXJuIE1vZHVsZS5jcmVhdGVSZXF1aXJlRnJvbVBhdGgoZmlsZW5hbWUpO1xuXG4gICAgaWYgKE1vZHVsZS5jcmVhdGVSZXF1aXJlKVxuICAgICAgICByZXR1cm4gTW9kdWxlLmNyZWF0ZVJlcXVpcmUoZmlsZW5hbWUpO1xuXG4gICAgY29uc3QgZHVtbXlNb2R1bGUgICAgICAgICAgPSBuZXcgTW9kdWxlKGZpbGVuYW1lLCBtb2R1bGUpO1xuICAgIGNvbnN0IGxvY2FsTW9kdWxlc1BhdGhzICAgID0gZ2V0TW9kdWxlQmFzZVBhdGhzKGZpbGVuYW1lKTtcblxuICAgIGR1bW15TW9kdWxlLmZpbGVuYW1lID0gZmlsZW5hbWU7XG4gICAgZHVtbXlNb2R1bGUucGF0aHMgICAgPSBsb2NhbE1vZHVsZXNQYXRocy5jb25jYXQobW9kdWxlLnBhdGhzKTtcblxuICAgIHJldHVybiBpZCA9PiBkdW1teU1vZHVsZS5yZXF1aXJlKGlkKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU2VsZWN0b3JEZWZpbml0aW9uICh0ZXN0UnVuKSB7XG4gICAgcmV0dXJuIChmbiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2tpcFZpc2liaWxpdHlDaGVjaywgY29sbGVjdGlvbk1vZGUgfSA9IHRlc3RSdW4uY29udHJvbGxlci5nZXRFeGVjdXRpb25Db250ZXh0KClbT1BUSU9OU19LRVldO1xuXG4gICAgICAgIGlmIChza2lwVmlzaWJpbGl0eUNoZWNrKVxuICAgICAgICAgICAgb3B0aW9ucy52aXNpYmlsaXR5Q2hlY2sgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGVzdFJ1biAmJiB0ZXN0UnVuLmlkKVxuICAgICAgICAgICAgb3B0aW9ucy5ib3VuZFRlc3RSdW4gPSB0ZXN0UnVuO1xuXG4gICAgICAgIGlmIChjb2xsZWN0aW9uTW9kZSlcbiAgICAgICAgICAgIG9wdGlvbnMuY29sbGVjdGlvbk1vZGUgPSBjb2xsZWN0aW9uTW9kZTtcblxuICAgICAgICByZXR1cm4gZXhwb3J0YWJsZUxpYi5TZWxlY3Rvcihmbiwgb3B0aW9ucyk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xpZW50RnVuY3Rpb25EZWZpbml0aW9uICh0ZXN0UnVuKSB7XG4gICAgcmV0dXJuIChmbiwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGlmICh0ZXN0UnVuICYmIHRlc3RSdW4uaWQpXG4gICAgICAgICAgICBvcHRpb25zLmJvdW5kVGVzdFJ1biA9IHRlc3RSdW47XG5cbiAgICAgICAgcmV0dXJuIGV4cG9ydGFibGVMaWIuQ2xpZW50RnVuY3Rpb24oZm4sIG9wdGlvbnMpO1xuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb250ZXh0T3B0aW9ucyAoY29udGV4dCwgb3B0aW9ucykge1xuICAgIGNvbnRleHRbT1BUSU9OU19LRVldID0gb3B0aW9ucztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV4ZWN1dGlvbkNvbnRleHQgKHRlc3RSdW4pIHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHRlc3RSdW4udGVzdC50ZXN0RmlsZS5maWxlbmFtZTtcblxuICAgIGNvbnN0IHJlcGxhY2VycyA9IHtcbiAgICAgICAgcmVxdWlyZTogICAgICAgIGNyZWF0ZVJlcXVpcmUoZmlsZW5hbWUpLFxuICAgICAgICBfX2ZpbGVuYW1lOiAgICAgZmlsZW5hbWUsXG4gICAgICAgIF9fZGlybmFtZTogICAgICBwYXRoLmRpcm5hbWUoZmlsZW5hbWUpLFxuICAgICAgICB0OiAgICAgICAgICAgICAgdGVzdFJ1bi5jb250cm9sbGVyLFxuICAgICAgICBTZWxlY3RvcjogICAgICAgY3JlYXRlU2VsZWN0b3JEZWZpbml0aW9uKHRlc3RSdW4pLFxuICAgICAgICBDbGllbnRGdW5jdGlvbjogY3JlYXRlQ2xpZW50RnVuY3Rpb25EZWZpbml0aW9uKHRlc3RSdW4pLFxuICAgICAgICBSb2xlOiAgICAgICAgICAgZXhwb3J0YWJsZUxpYi5Sb2xlLFxuICAgICAgICBSZXF1ZXN0TG9nZ2VyOiAgZXhwb3J0YWJsZUxpYi5SZXF1ZXN0TG9nZ2VyLFxuICAgICAgICBSZXF1ZXN0TW9jazogICAgZXhwb3J0YWJsZUxpYi5SZXF1ZXN0TW9jayxcbiAgICAgICAgUmVxdWVzdEhvb2s6ICAgIGV4cG9ydGFibGVMaWIuUmVxdWVzdEhvb2tcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNyZWF0ZUNvbnRleHQobmV3IFByb3h5KHJlcGxhY2Vycywge1xuICAgICAgICBnZXQ6ICh0YXJnZXQsIHByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVwbGFjZXJzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVwbGFjZXJzW3Byb3BlcnR5XTtcblxuICAgICAgICAgICAgaWYgKGdsb2JhbC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFtwcm9wZXJ0eV07XG5cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwcm9wZXJ0eX0gaXMgbm90IGRlZmluZWRgKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbn1cbiJdfQ==