Best JavaScript code snippet using root
Client.js
Source:Client.js
...60 async connect() {61 await this.open();62 const sessionStatus = await this.sendAction(new actions.Login(this._sessionId));63 if (sessionStatus.appConnected) {64 this._onAppConnected();65 }66 }67 async cleanup() {68 this._isCleaningUp = true;69 this._unscheduleSlowInvocationQuery();70 try {71 if (this.isConnected) {72 await this.sendAction(new actions.Cleanup(this._successfulTestRun)).catch(this._logError);73 this._whenAppIsConnected = this._invalidState('while cleaning up');74 this._whenAppIsReady = this._whenAppIsConnected;75 }76 } finally {77 await this._asyncWebSocket.close().catch(this._logError);78 }79 delete this.terminateApp; // property injection80 }81 setEventCallback(event, callback) {82 this._asyncWebSocket.setEventCallback(event, callback);83 }84 dumpPendingRequests({ testName } = {}) {85 if (this._whenAppIsConnected.isPending()) {86 const unreachableError = failedToReachTheApp.evenThoughAppWasLaunched();87 log.error({ event: 'APP_UNREACHABLE' }, DetoxRuntimeError.format(unreachableError) + '\n\n');88 }89 if (this._asyncWebSocket.hasPendingActions()) {90 const messages = _.values(this._asyncWebSocket.inFlightPromises).map(p => p.message);91 let dump = 'The app has not responded to the network requests below:';92 for (const msg of messages) {93 dump += `\n (id = ${msg.messageId}) ${msg.type}: ${JSON.stringify(msg.params)}`;94 }95 const notice = testName96 ? `That might be the reason why the test "${testName}" has timed out.`97 : `Unresponded network requests might result in timeout errors in Detox tests.`;98 dump += `\n\n${notice}\n`;99 log.warn({ event: 'PENDING_REQUESTS' }, dump);100 }101 this._asyncWebSocket.resetInFlightPromises();102 }103 async execute(invocation) {104 if (typeof invocation === 'function') {105 invocation = invocation();106 }107 try {108 return await this.sendAction(new actions.Invoke(invocation));109 } catch (err) {110 this._successfulTestRun = false;111 throw err;112 }113 }114 async sendAction(action) {115 const { shouldQueryStatus, ...options } = this._inferSendOptions(action);116 return await (shouldQueryStatus117 ? this._sendMonitoredAction(action, options)118 : this._doSendAction(action, options));119 }120 _inferSendOptions(action) {121 const timeout = action.timeout;122 const shouldQueryStatus = timeout === 0;123 return { shouldQueryStatus, timeout };124 }125 async _sendMonitoredAction(action, options) {126 try {127 this._scheduleSlowInvocationQuery();128 return await this._doSendAction(action, options);129 } finally {130 this._unscheduleSlowInvocationQuery();131 }132 }133 async _doSendAction(action, options) {134 const errorWithUserStack = createErrorWithUserStack();135 try {136 const parsedResponse = await this._asyncWebSocket.send(action, options);137 if (parsedResponse && parsedResponse.type === 'serverError') {138 throw deserializeError(parsedResponse.params.error);139 }140 return await action.handle(parsedResponse);141 } catch (err) {142 throw replaceErrorStack(errorWithUserStack, asError(err));143 }144 }145 async reloadReactNative() {146 this._whenAppIsReady = new Deferred();147 await this.sendAction(new actions.ReloadReactNative());148 this._whenAppIsReady.resolve();149 }150 async waitUntilReady() {151 if (!this._whenAppIsConnected.isResolved()) {152 this._whenAppIsConnected = new Deferred();153 this._whenAppIsReady = new Deferred();154 await this._whenAppIsConnected.promise;155 // TODO: optimize traffic (!) - we can just listen for 'ready' event156 // if app always sends it upon load completion. On iOS it works,157 // but not on Android. Afterwards, this will suffice:158 //159 // await this._whenAppIsReady.promise;160 }161 // TODO: move to else branch after the optimization162 if (!this._whenAppIsReady.isResolved()) {163 this._whenAppIsReady = new Deferred();164 await this.sendAction(new actions.Ready());165 this._whenAppIsReady.resolve();166 }167 }168 async waitForBackground() {169 await this.sendAction(new actions.WaitForBackground());170 }171 async waitForActive() {172 await this.sendAction(new actions.WaitForActive());173 }174 async captureViewHierarchy({ viewHierarchyURL }) {175 return await this.sendAction(new actions.CaptureViewHierarchy({176 viewHierarchyURL177 }));178 }179 async currentStatus() {180 return await this.sendAction(new actions.CurrentStatus());181 }182 async setSyncSettings(params) {183 await this.sendAction(new actions.SetSyncSettings(params));184 }185 async shake() {186 await this.sendAction(new actions.Shake());187 }188 async setOrientation(orientation) {189 await this.sendAction(new actions.SetOrientation(orientation));190 }191 async startInstrumentsRecording({ recordingPath, samplingInterval }) {192 await this.sendAction(new actions.SetInstrumentsRecordingState({193 recordingPath, samplingInterval194 }));195 }196 async stopInstrumentsRecording() {197 await this.sendAction(new actions.SetInstrumentsRecordingState());198 }199 async deliverPayload(params) {200 await this.sendAction(new actions.DeliverPayload(params));201 }202 async terminateApp() {203 /* see the property injection from Detox.js */204 }205 _scheduleSlowInvocationQuery() {206 if (this._slowInvocationTimeout > 0 && !this._isCleaningUp) {207 this._slowInvocationStatusHandle = setTimeout(async () => {208 let status;209 try {210 status = await this.currentStatus();211 log.info({ event: 'APP_STATUS' }, status);212 } catch (_e) {213 log.debug({ event: 'APP_STATUS' }, 'Failed to execute the current status query.');214 this._slowInvocationStatusHandle = null;215 }216 if (status) {217 this._scheduleSlowInvocationQuery();218 }219 }, this._slowInvocationTimeout);220 } else {221 this._slowInvocationStatusHandle = null;222 }223 }224 _unscheduleSlowInvocationQuery() {225 if (this._slowInvocationStatusHandle) {226 clearTimeout(this._slowInvocationStatusHandle);227 this._slowInvocationStatusHandle = null;228 }229 }230 _scheduleAppTermination() {231 this._appTerminationHandle = setTimeout(async () => {232 try {233 await this.terminateApp();234 } catch (e) {235 log.error({ event: 'ERROR' }, DetoxRuntimeError.format(e));236 }237 }, 5000);238 }239 _unscheduleAppTermination() {240 if (this._appTerminationHandle) {241 clearTimeout(this._appTerminationHandle);242 this._appTerminationHandle = null;243 }244 }245 _onAppConnected() {246 if (this._whenAppIsConnected.isPending()) {247 this._whenAppIsConnected.resolve();248 } else {249 this._whenAppIsConnected = Deferred.resolved();250 }251 }252 _onAppReady() {253 this._whenAppIsReady.resolve();254 }255 _onAppUnresponsive({ params }) {256 const message = [257 'Application nonresponsiveness detected!',258 'On Android, this could imply an ANR alert, which evidently causes tests to fail.',259 'Here\'s the native main-thread stacktrace from the device, to help you out (refer to device logs for the complete thread dump):',...
Using AI Code Generation
1var root = require('root');2var config = require('config');3var logger = require('logger').getLogger('test');4var _ = require('underscore');5var app = root.createApp('test', '1.0.0', 'test');6app.on('appConnected', function (app) {7 logger.info('test app connected');8});9app.on('appDisconnected', function (app) {10 logger.info('test app disconnected');11});12app.on('appCrashed', function (app) {13 logger.info('test app crashed');14});15app.on('appRestarted', function (app) {16 logger.info('test app restarted');17});18app.on('appRestartFailed', function (app) {19 logger.info('test app restart failed');20});21app.on('appStarted', function (app) {22 logger.info('test app started');23});24app.on('appStartFailed', function (app) {25 logger.info('test app start failed');26});27app.on('appStopped', function (app) {28 logger.info('test app stopped');29});30app.on('appStopFailed', function (app) {31 logger.info('test app stop failed');32});33app.on('appUpdated', function (app) {34 logger.info('test app updated');35});36app.on('appUpdateFailed', function (app) {37 logger.info('test app update failed');38});39app.on('appRemoved', function (app) {40 logger.info('test app removed');41});42app.on('appRemoveFailed', function (app) {43 logger.info('test app remove failed');44});45app.on('appInstalled', function (app) {46 logger.info('test app installed');47});48app.on('appInstallFailed', function (app) {49 logger.info('test app install failed');50});51app.on('appUninstalled', function (app) {52 logger.info('test app uninstalled');53});54app.on('appUninstallFailed', function (app) {55 logger.info('test app uninstall failed');56});57app.on('appUpgraded', function (app) {58 logger.info('test app upgraded');59});60app.on('appUpgradeFailed', function (app) {61 logger.info('test app upgrade failed');62});63app.on('appDowngraded', function (app) {64 logger.info('test app downgraded');65});66app.on('appDowngrade
Using AI Code Generation
1exports.onAppConnected = function() {2 this._onAppConnected();3 this.addEventListener("appConnected", function() {4 console.log("App Connected");5 });6};7exports.onAppDisconnected = function() {8 this._onAppDisconnected();9 this.addEventListener("appDisconnected", function() {10 console.log("App Disconnected");11 });12};13exports.onAppMessage = function() {14 this._onAppMessage();15 this.addEventListener("appMessage", function() {16 console.log("App Message");17 });18};19exports.onAppMessage = function() {20 this._onAppMessage();21 this.addEventListener("appMessage", function() {22 console.log("App Message");23 });24};25exports.onAppMessage = function() {26 this._onAppMessage();27 this.addEventListener("appMessage", function() {28 console.log("App Message");29 });30};31exports.onAppMessage = function() {32 this._onAppMessage();33 this.addEventListener("appMessage", function() {34 console.log("App Message");35 });36};
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!