UNPKG

detox-allure2-adapter

Version:
161 lines 6.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.listener = void 0; const tslib_1 = require("tslib"); const detox_1 = tslib_1.__importDefault(require("detox")); const internals_1 = require("detox/internals"); const api_1 = require("jest-allure2-reporter/api"); const file_handlers_1 = require("./file-handlers"); const logs_1 = require("./logs"); const screenshots_1 = require("./screenshots"); const steps_1 = require("./steps"); const utils_1 = require("./utils"); const video_1 = require("./video"); const view_hierarchy_1 = require("./view-hierarchy"); const listener = ({ testEvents }, { deviceLogs = true, deviceScreenshots = true, deviceVideos = true, deviceViewHierarchy = true, userArtifacts = 'move', onError: onErrorOption, } = {}) => { let workerWrapper; let logs; let screenshots; let videoManager; let viewHierarchy; let $test; let $hook; let failing = false; const onError = (0, utils_1.createErrorHandler)(onErrorOption ?? 'warn'); const recycleBin = file_handlers_1.RecycleBin.instance(onError); const flushArtifacts = (0, utils_1.once)(async () => { await Promise.all([ logs?.close(), videoManager?.stopAndAttach($hook, failing), recycleBin.clear(), ]); workerWrapper = logs = screenshots = viewHierarchy = videoManager = undefined; }); testEvents .on('setup', () => { api_1.allure.$plug((context) => { context.fileAttachmentHandlers['mv-delayed'] ??= (0, file_handlers_1.createDelayedMvHandler)(context); context.fileAttachmentHandlers['zip'] ??= (0, file_handlers_1.createZipHandler)(context); context.fileAttachmentHandlers['zip-rm'] ??= (0, file_handlers_1.createZipRmHandler)(context); context.handlebars.registerHelper('firstOr', function (defaultValue) { return this[0] || defaultValue; }); }); workerWrapper = new utils_1.WorkerWrapper(internals_1.worker); const device = new utils_1.DeviceWrapper(detox_1.default.device); if (device.platform !== 'ios' && device.platform !== 'android') { return; } if (workerWrapper.artifactsManager) { const noop = () => Promise.resolve(); const artifactsManager = workerWrapper.artifactsManager; if (artifactsManager._artifactPlugins.uiHierarchy) { artifactsManager._artifactPlugins.uiHierarchy._registerSnapshot = noop; } if (artifactsManager._artifactPlugins.screenshot) { artifactsManager._artifactPlugins.screenshot._registerSnapshot = noop; } artifactsManager._callPlugins = noop; artifactsManager._callSinglePlugin = noop; } if (deviceLogs) { logs = new logs_1.LogBuffer({ device, options: deviceLogs, onError, }); workerWrapper.eventEmitter.on('beforeLaunchApp', () => logs?.setPid(Number.NaN)); workerWrapper.eventEmitter.on('launchApp', ({ pid }) => logs?.setPid(pid)); workerWrapper.eventEmitter.on('terminateApp', () => logs?.setPid(Number.NaN)); } if (deviceScreenshots) { screenshots = new screenshots_1.ScreenshotHelper({ device, options: deviceScreenshots, onError, }); } if (deviceVideos) { const baseOptions = deviceVideos === true ? {} : deviceVideos; videoManager = new video_1.VideoManager({ device, options: baseOptions, onError }); } if (deviceViewHierarchy) { viewHierarchy = new view_hierarchy_1.ViewHierarchyHelper({ device, onError, screenshotsHelper: new screenshots_1.ScreenshotHelper({ device, options: true, onError, }), }); } if (device.platform === 'ios') { workerWrapper.eventEmitter.on('beforeLaunchApp', (event) => { if (viewHierarchy) { event.launchArgs.detoxDebugVisibility = 'YES'; event.launchArgs.detoxDisableHierarchyDump = 'NO'; } else { event.launchArgs.detoxDebugVisibility = 'NO'; event.launchArgs.detoxDisableHierarchyDump = 'YES'; } }); } }) .on('setup', async () => { if (workerWrapper) { (0, steps_1.wrapWithSteps)({ detox: detox_1.default, worker: workerWrapper, allure: api_1.allure, logs, screenshots, videoManager, viewHierarchy, userArtifacts, }); } }) .on('run_start', async () => { await videoManager?.ensureRecordingEager(); }) .on('test_started', async () => { await videoManager?.ensureRecordingEager(); }) .on('test_start', async () => { $test = api_1.allure.$bind(); $hook = undefined; logs?.attachBefore(api_1.allure); failing = false; }) .on('hook_start', async ({ event }) => { logs?.attachBefore(api_1.allure); if (event.hook.type === 'beforeAll' || event.hook.type === 'afterAll') { $hook ??= api_1.allure.$bind(); await videoManager?.ensureRecordingEager(); } }) .on('hook_failure', async () => { failing = true; await Promise.all([logs?.attachAfterFailure(api_1.allure), screenshots?.attachFailure(api_1.allure)]); }) .on('hook_success', async () => { await Promise.all([logs?.attachAfterSuccess(api_1.allure), screenshots?.attachSuccess(api_1.allure)]); }) .on('test_fn_failure', async () => { failing = true; await Promise.all([logs?.attachAfterFailure(api_1.allure), screenshots?.attachFailure(api_1.allure)]); }) .on('test_fn_success', async () => { await Promise.all([logs?.attachAfterSuccess(api_1.allure), screenshots?.attachSuccess(api_1.allure)]); }) .on('test_done', async () => { await videoManager?.stopAndAttach($test, failing); $test = undefined; }) .once('teardown', flushArtifacts, -1) .once('test_environment_teardown', flushArtifacts, -1); }; exports.listener = listener; //# sourceMappingURL=listener.js.map