UNPKG

@openui5/sap.ui.core

Version:

OpenUI5 Core Library sap.ui.core

120 lines (113 loc) 3.47 kB
/*! * OpenUI5 * (c) Copyright 2009-2021 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ sap.ui.define([ "sap/ui/thirdparty/jquery", "sap/ui/base/Object", "sap/ui/test/_OpaLogger", "sap/ui/test/autowaiter/_XHRWaiter", "sap/ui/test/autowaiter/_timeoutWaiter", "sap/ui/test/autowaiter/_promiseWaiter", "sap/ui/test/autowaiter/_navigationContainerWaiter", "sap/ui/test/autowaiter/_UIUpdatesWaiter", "sap/ui/test/autowaiter/_moduleWaiter", "sap/ui/test/autowaiter/_resourceWaiter" ], function( jQueryDOM, UI5Object, _OpaLogger, _XHRWaiter, _timeoutWaiter, _promiseWaiter, _navigationContainerWaiter, _UIUpdatesWaiter, _moduleWaiter, _resourceWaiter ) { "use strict"; var aWaiters = []; var oLogger = _OpaLogger.getLogger("sap.ui.test.autowaiter._autoWaiter"); var AutoWaiter = UI5Object.extend("sap.ui.test.autowaiter._autoWaiter", { registerWaiter: function (sName, vWaiter) { return new Promise(function (fnResolve, fnReject) { if (typeof vWaiter === "string") { sap.ui.require([vWaiter], this._addWaiter(sName, fnResolve, fnReject), function (error) { fnReject("Failed to load waiter " + sName + ": " + error); }); } else if (typeof vWaiter === "object") { this._addWaiter(sName, fnResolve, fnReject)(vWaiter); } }.bind(this)); }, hasToWait: function () { var result = false; // execute wait helpers in sequence and stop on the first that returns true // eg: there's no use to call _timeoutWaiter if _UIUpdatesWaiter is true aWaiters.forEach(function (mWaiter) { if (!result && mWaiter.waiter.isEnabled() && mWaiter.waiter.hasPending()) { result = true; } }); if (!result) { oLogger.timestamp("opa.autoWaiter.syncPoint"); oLogger.debug("AutoWaiter syncpoint"); } return result; }, extendConfig: function (oConfig) { if (!jQueryDOM.isEmptyObject(oConfig)) { aWaiters.forEach(function (mWaiter) { if (mWaiter.waiter.extendConfig) { mWaiter.waiter.extendConfig(oConfig[mWaiter.name]); } }); } }, getWaiters: function () { return aWaiters.slice(); }, _addWaiter: function (sName, fnSuccess, fnError) { fnSuccess = fnSuccess || function () {}; fnError = fnError || function () {}; return function (oWaiter) { if (typeof oWaiter.hasPending !== "function") { fnError("Waiter " + sName + " should have a hasPending method"); } else if (typeof oWaiter.isEnabled !== "function") { fnError("Waiter " + sName + " should have an isEnabled method"); } else { var bExists; aWaiters.forEach(function (mWaiter) { if (mWaiter.name === sName) { oLogger.debug("Waiter with name " + sName + " will be overridden!"); bExists = true; mWaiter.waiter = oWaiter; } }); if (!bExists) { aWaiters.push({ name: sName, waiter: oWaiter }); } fnSuccess(oWaiter); } }; } }); var oAutoWaiter = new AutoWaiter(); var mDefaultWaiters = { xhrWaiter: _XHRWaiter, timeoutWaiter: _timeoutWaiter, promiseWaiter: _promiseWaiter, navigationWaiter: _navigationContainerWaiter, uiUpdatesWaiter: _UIUpdatesWaiter, moduleWaiter: _moduleWaiter, resourceWaiter: _resourceWaiter }; Object.keys(mDefaultWaiters).forEach(function (sWaiter) { return oAutoWaiter._addWaiter(sWaiter)(mDefaultWaiters[sWaiter]); }); return oAutoWaiter; }, true);