@openui5/sap.ui.core 1.99.0 → 1.100.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/THIRDPARTY.txt +2 -2
- package/package.json +1 -1
- package/src/jquery.sap.global.js +6 -3
- package/src/jquery.sap.properties.js +1 -1
- package/src/jquery.sap.resources.js +1 -1
- package/src/jquery.sap.script.js +1 -1
- package/src/jquery.sap.storage.js +3 -3
- package/src/sap/base/Log.js +1 -1
- package/src/sap/base/strings/whitespaceReplacer.js +1 -1
- package/src/sap/base/util/LoaderExtensions.js +1 -10
- package/src/sap/base/util/UriParameters.js +2 -2
- package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
- package/src/sap/base/util/restricted/_castArray.js +1 -1
- package/src/sap/base/util/restricted/_compact.js +1 -1
- package/src/sap/base/util/restricted/_curry.js +1 -1
- package/src/sap/base/util/restricted/_debounce.js +1 -1
- package/src/sap/base/util/restricted/_difference.js +1 -1
- package/src/sap/base/util/restricted/_differenceBy.js +1 -1
- package/src/sap/base/util/restricted/_differenceWith.js +1 -1
- package/src/sap/base/util/restricted/_flatMap.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
- package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
- package/src/sap/base/util/restricted/_flatten.js +1 -1
- package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
- package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
- package/src/sap/base/util/restricted/_intersection.js +1 -1
- package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
- package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
- package/src/sap/base/util/restricted/_isEqual.js +1 -1
- package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
- package/src/sap/base/util/restricted/_isNil.js +1 -1
- package/src/sap/base/util/restricted/_max.js +1 -1
- package/src/sap/base/util/restricted/_merge.js +1 -1
- package/src/sap/base/util/restricted/_mergeWith.js +1 -1
- package/src/sap/base/util/restricted/_min.js +1 -1
- package/src/sap/base/util/restricted/_omit.js +1 -1
- package/src/sap/base/util/restricted/_pick.js +1 -1
- package/src/sap/base/util/restricted/_pickBy.js +1 -1
- package/src/sap/base/util/restricted/_throttle.js +1 -1
- package/src/sap/base/util/restricted/_toArray.js +1 -1
- package/src/sap/base/util/restricted/_union.js +1 -1
- package/src/sap/base/util/restricted/_unionBy.js +1 -1
- package/src/sap/base/util/restricted/_unionWith.js +1 -1
- package/src/sap/base/util/restricted/_uniq.js +1 -1
- package/src/sap/base/util/restricted/_uniqBy.js +1 -1
- package/src/sap/base/util/restricted/_uniqWith.js +1 -1
- package/src/sap/base/util/restricted/_without.js +1 -1
- package/src/sap/base/util/restricted/_xor.js +1 -1
- package/src/sap/base/util/restricted/_xorBy.js +1 -1
- package/src/sap/base/util/restricted/_xorWith.js +1 -1
- package/src/sap/base/util/restricted/_zipObject.js +1 -1
- package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
- package/src/sap/ui/Device.js +3 -3
- package/src/sap/ui/Global.js +4 -4
- package/src/sap/ui/base/Event.js +1 -1
- package/src/sap/ui/base/EventProvider.js +1 -1
- package/src/sap/ui/base/ExpressionParser.js +1 -1
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +1 -1
- package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
- package/src/sap/ui/base/ManagedObjectObserver.js +2 -0
- package/src/sap/ui/base/Metadata.js +1 -1
- package/src/sap/ui/base/Object.js +1 -1
- package/src/sap/ui/base/ObjectPool.js +1 -1
- package/src/sap/ui/core/.library +2 -2
- package/src/sap/ui/core/BusyIndicator.js +1 -1
- package/src/sap/ui/core/Component.js +1 -1
- package/src/sap/ui/core/ComponentContainer.js +1 -1
- package/src/sap/ui/core/ComponentMetadata.js +2 -2
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/Configuration.js +3 -1
- package/src/sap/ui/core/Control.js +1 -1
- package/src/sap/ui/core/Core.js +3 -1
- package/src/sap/ui/core/CustomData.js +1 -1
- package/src/sap/ui/core/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/Element.js +1 -1
- package/src/sap/ui/core/ElementMetadata.js +1 -1
- package/src/sap/ui/core/EnabledPropagator.js +1 -1
- package/src/sap/ui/core/EventBus.js +1 -1
- package/src/sap/ui/core/Fragment.js +1 -1
- package/src/sap/ui/core/HTML.js +1 -1
- package/src/sap/ui/core/History.js +1 -1
- package/src/sap/ui/core/Icon.js +17 -3
- package/src/sap/ui/core/IndicationColorSupport.js +1 -1
- package/src/sap/ui/core/IntervalTrigger.js +1 -1
- package/src/sap/ui/core/InvisibleMessage.js +1 -1
- package/src/sap/ui/core/InvisibleRenderer.js +1 -1
- package/src/sap/ui/core/InvisibleText.js +1 -1
- package/src/sap/ui/core/Item.js +1 -1
- package/src/sap/ui/core/LabelEnablement.js +1 -1
- package/src/sap/ui/core/LayoutData.js +1 -1
- package/src/sap/ui/core/ListItem.js +1 -1
- package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
- package/src/sap/ui/core/Locale.js +1 -1
- package/src/sap/ui/core/LocaleData.js +24 -5
- package/src/sap/ui/core/Manifest.js +1 -1
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/Patcher.js +3 -3
- package/src/sap/ui/core/Popup.js +9 -6
- package/src/sap/ui/core/RenderManager.js +1 -1
- package/src/sap/ui/core/Renderer.js +1 -1
- package/src/sap/ui/core/ResizeHandler.js +1 -1
- package/src/sap/ui/core/ScrollBar.js +1 -1
- package/src/sap/ui/core/SeparatorItem.js +1 -1
- package/src/sap/ui/core/Title.js +1 -1
- package/src/sap/ui/core/TooltipBase.js +1 -1
- package/src/sap/ui/core/UIArea.js +1 -1
- package/src/sap/ui/core/UIComponent.js +1 -1
- package/src/sap/ui/core/UIComponentMetadata.js +1 -1
- package/src/sap/ui/core/ValueStateSupport.js +1 -1
- package/src/sap/ui/core/VariantLayoutData.js +1 -1
- package/src/sap/ui/core/XMLComposite.js +1 -1
- package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
- package/src/sap/ui/core/XMLTemplateProcessor.js +7 -6
- package/src/sap/ui/core/_IconRegistry.js +3 -2
- package/src/sap/ui/core/cache/CacheManager.js +1 -1
- package/src/sap/ui/core/cache/LRUPersistentCache.js +2 -1
- package/src/sap/ui/core/cldr/en_AU.json +1 -1
- package/src/sap/ui/core/date/Buddhist.js +3 -3
- package/src/sap/ui/core/date/Japanese.js +3 -3
- package/src/sap/ui/core/date/UniversalDate.js +10 -0
- package/src/sap/ui/core/date/UniversalDateUtils.js +1 -1
- package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
- package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
- package/src/sap/ui/core/dnd/DragAndDrop.js +19 -16
- package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
- package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
- package/src/sap/ui/core/dnd/DragInfo.js +1 -1
- package/src/sap/ui/core/dnd/DropInfo.js +3 -3
- package/src/sap/ui/core/format/DateFormat.js +125 -61
- package/src/sap/ui/core/format/DateFormatTimezoneDisplay.js +1 -0
- package/src/sap/ui/core/format/NumberFormat.js +331 -179
- package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
- package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
- package/src/sap/ui/core/library.js +85 -49
- package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
- package/src/sap/ui/core/message/Message.js +1 -1
- package/src/sap/ui/core/message/MessageManager.js +1 -1
- package/src/sap/ui/core/message/MessageParser.js +1 -1
- package/src/sap/ui/core/message/MessageProcessor.js +1 -1
- package/src/sap/ui/core/messagebundle.properties +0 -2
- package/src/sap/ui/core/messagebundle_ar.properties +0 -1
- package/src/sap/ui/core/messagebundle_bg.properties +0 -1
- package/src/sap/ui/core/messagebundle_ca.properties +0 -1
- package/src/sap/ui/core/messagebundle_cs.properties +0 -1
- package/src/sap/ui/core/messagebundle_cy.properties +0 -1
- package/src/sap/ui/core/messagebundle_da.properties +0 -1
- package/src/sap/ui/core/messagebundle_de.properties +0 -1
- package/src/sap/ui/core/messagebundle_el.properties +0 -1
- package/src/sap/ui/core/messagebundle_en.properties +0 -1
- package/src/sap/ui/core/messagebundle_en_GB.properties +0 -1
- package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +0 -1
- package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +0 -1
- package/src/sap/ui/core/messagebundle_es.properties +0 -1
- package/src/sap/ui/core/messagebundle_es_MX.properties +0 -1
- package/src/sap/ui/core/messagebundle_et.properties +0 -1
- package/src/sap/ui/core/messagebundle_fi.properties +0 -1
- package/src/sap/ui/core/messagebundle_fr.properties +0 -1
- package/src/sap/ui/core/messagebundle_fr_CA.properties +0 -1
- package/src/sap/ui/core/messagebundle_hi.properties +0 -1
- package/src/sap/ui/core/messagebundle_hr.properties +0 -1
- package/src/sap/ui/core/messagebundle_hu.properties +0 -1
- package/src/sap/ui/core/messagebundle_id.properties +0 -1
- package/src/sap/ui/core/messagebundle_it.properties +0 -1
- package/src/sap/ui/core/messagebundle_iw.properties +0 -1
- package/src/sap/ui/core/messagebundle_ja.properties +0 -1
- package/src/sap/ui/core/messagebundle_kk.properties +0 -1
- package/src/sap/ui/core/messagebundle_ko.properties +1 -2
- package/src/sap/ui/core/messagebundle_lt.properties +0 -1
- package/src/sap/ui/core/messagebundle_lv.properties +0 -1
- package/src/sap/ui/core/messagebundle_ms.properties +0 -1
- package/src/sap/ui/core/messagebundle_nl.properties +0 -1
- package/src/sap/ui/core/messagebundle_no.properties +0 -1
- package/src/sap/ui/core/messagebundle_pl.properties +0 -1
- package/src/sap/ui/core/messagebundle_pt.properties +0 -1
- package/src/sap/ui/core/messagebundle_pt_PT.properties +0 -1
- package/src/sap/ui/core/messagebundle_ro.properties +0 -1
- package/src/sap/ui/core/messagebundle_ru.properties +0 -1
- package/src/sap/ui/core/messagebundle_sh.properties +0 -1
- package/src/sap/ui/core/messagebundle_sk.properties +0 -1
- package/src/sap/ui/core/messagebundle_sl.properties +0 -1
- package/src/sap/ui/core/messagebundle_sv.properties +0 -1
- package/src/sap/ui/core/messagebundle_th.properties +0 -1
- package/src/sap/ui/core/messagebundle_tr.properties +0 -1
- package/src/sap/ui/core/messagebundle_uk.properties +0 -1
- package/src/sap/ui/core/messagebundle_vi.properties +0 -1
- package/src/sap/ui/core/messagebundle_zh_CN.properties +0 -1
- package/src/sap/ui/core/messagebundle_zh_TW.properties +0 -1
- package/src/sap/ui/core/mvc/Controller.js +1 -1
- package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +1 -1
- package/src/sap/ui/core/mvc/HTMLView.js +1 -1
- package/src/sap/ui/core/mvc/JSONView.js +1 -1
- package/src/sap/ui/core/mvc/JSView.js +1 -1
- package/src/sap/ui/core/mvc/TemplateView.js +1 -1
- package/src/sap/ui/core/mvc/View.js +1 -1
- package/src/sap/ui/core/mvc/XMLView.js +9 -1
- package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
- package/src/sap/ui/core/plugin/LessSupport.js +1 -1
- package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
- package/src/sap/ui/core/postmessage/Bus.js +1 -1
- package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
- package/src/sap/ui/core/rules/Misc.support.js +8 -3
- package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
- package/src/sap/ui/core/search/SearchProvider.js +1 -1
- package/src/sap/ui/core/service/Service.js +1 -1
- package/src/sap/ui/core/service/ServiceFactory.js +1 -1
- package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
- package/src/sap/ui/core/support/Plugin.js +1 -1
- package/src/sap/ui/core/support/Support.js +3 -3
- package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
- package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
- package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
- package/src/sap/ui/core/support/plugins/Performance.js +1 -1
- package/src/sap/ui/core/support/plugins/Selector.js +1 -1
- package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
- package/src/sap/ui/core/support/plugins/Trace.js +1 -1
- package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
- package/src/sap/ui/core/themes/base/CommandShortcutHints.less +1 -1
- package/src/sap/ui/core/themes/base/base.less +1108 -35
- package/src/sap/ui/core/themes/base/global.less +158 -4
- package/src/sap/ui/core/themes/sap_hcb/global.less +157 -2
- package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
- package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
- package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
- package/src/sap/ui/core/tmpl/Template.js +1 -1
- package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
- package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
- package/src/sap/ui/core/util/Export.js +1 -1
- package/src/sap/ui/core/util/ExportCell.js +1 -1
- package/src/sap/ui/core/util/ExportColumn.js +1 -1
- package/src/sap/ui/core/util/ExportRow.js +1 -1
- package/src/sap/ui/core/util/ExportType.js +1 -1
- package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
- package/src/sap/ui/core/util/File.js +1 -1
- package/src/sap/ui/core/util/LibraryInfo.js +1 -1
- package/src/sap/ui/core/util/MockServer.js +3 -2
- package/src/sap/ui/core/util/PasteHelper.js +2 -2
- package/src/sap/ui/core/util/XMLPreprocessor.js +1 -0
- package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
- package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
- package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
- package/src/sap/ui/core/ws/ReadyState.js +1 -1
- package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
- package/src/sap/ui/core/ws/WebSocket.js +1 -1
- package/src/sap/ui/debug/ControlTree.js +1 -1
- package/src/sap/ui/debug/DebugEnv.js +1 -1
- package/src/sap/ui/debug/LogViewer.js +2 -2
- package/src/sap/ui/debug/PropertyList.js +1 -1
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/CompositeBinding.js +3 -0
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +13 -1
- package/src/sap/ui/model/DataState.js +1 -1
- package/src/sap/ui/model/MetaModel.js +1 -1
- package/src/sap/ui/model/Model.js +1 -1
- package/src/sap/ui/model/SelectionModel.js +1 -1
- package/src/sap/ui/model/SimpleType.js +1 -1
- package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
- package/src/sap/ui/model/Type.js +1 -1
- package/src/sap/ui/model/_Helper.js +22 -0
- package/src/sap/ui/model/analytics/AnalyticalBinding.js +28 -12
- package/src/sap/ui/model/base/ManagedObjectModel.js +8 -6
- package/src/sap/ui/model/json/JSONModel.js +15 -8
- package/src/sap/ui/model/message/MessageModel.js +1 -1
- package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
- package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
- package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
- package/src/sap/ui/model/odata/ODataModel.js +1 -1
- package/src/sap/ui/model/odata/ODataPropertyBinding.js +3 -1
- package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +1 -1
- package/src/sap/ui/model/odata/type/Boolean.js +1 -1
- package/src/sap/ui/model/odata/type/Byte.js +1 -1
- package/src/sap/ui/model/odata/type/Currency.js +1 -1
- package/src/sap/ui/model/odata/type/Date.js +1 -1
- package/src/sap/ui/model/odata/type/DateTime.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
- package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +54 -46
- package/src/sap/ui/model/odata/type/Decimal.js +1 -1
- package/src/sap/ui/model/odata/type/Double.js +1 -1
- package/src/sap/ui/model/odata/type/Guid.js +1 -1
- package/src/sap/ui/model/odata/type/Int.js +1 -1
- package/src/sap/ui/model/odata/type/Int16.js +1 -1
- package/src/sap/ui/model/odata/type/Int32.js +1 -1
- package/src/sap/ui/model/odata/type/Int64.js +1 -1
- package/src/sap/ui/model/odata/type/ODataType.js +1 -1
- package/src/sap/ui/model/odata/type/Raw.js +1 -1
- package/src/sap/ui/model/odata/type/SByte.js +1 -1
- package/src/sap/ui/model/odata/type/Single.js +1 -1
- package/src/sap/ui/model/odata/type/Stream.js +1 -1
- package/src/sap/ui/model/odata/type/String.js +1 -1
- package/src/sap/ui/model/odata/type/Time.js +1 -1
- package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
- package/src/sap/ui/model/odata/type/Unit.js +1 -1
- package/src/sap/ui/model/odata/v2/Context.js +7 -3
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataListBinding.js +109 -26
- package/src/sap/ui/model/odata/v2/ODataModel.js +236 -45
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
- package/src/sap/ui/model/odata/v4/Context.js +20 -22
- package/src/sap/ui/model/odata/v4/ODataBinding.js +50 -32
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +33 -5
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +183 -46
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +1 -1
- package/src/sap/ui/model/odata/v4/ODataModel.js +185 -24
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +25 -57
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +3 -2
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +146 -31
- package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +4 -0
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +6 -3
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +162 -8
- package/src/sap/ui/model/resource/ResourceModel.js +1 -1
- package/src/sap/ui/model/type/Boolean.js +1 -1
- package/src/sap/ui/model/type/Currency.js +1 -1
- package/src/sap/ui/model/type/Date.js +1 -1
- package/src/sap/ui/model/type/DateInterval.js +1 -1
- package/src/sap/ui/model/type/DateTime.js +1 -1
- package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
- package/src/sap/ui/model/type/FileSize.js +1 -1
- package/src/sap/ui/model/type/Float.js +1 -1
- package/src/sap/ui/model/type/Integer.js +1 -1
- package/src/sap/ui/model/type/String.js +1 -1
- package/src/sap/ui/model/type/Time.js +1 -1
- package/src/sap/ui/model/type/TimeInterval.js +1 -1
- package/src/sap/ui/model/type/Unit.js +1 -1
- package/src/sap/ui/model/xml/XMLModel.js +1 -1
- package/src/sap/ui/performance/trace/FESR.js +1 -1
- package/src/sap/ui/performance/trace/FESRHelper.js +72 -0
- package/src/sap/ui/performance/trace/Interaction.js +6 -2
- package/src/sap/ui/qunit/qunit-2-css.js +4 -4
- package/src/sap/ui/qunit/qunit-css.js +4 -4
- package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
- package/src/sap/ui/test/BranchTracking.js +1 -0
- package/src/sap/ui/test/OpaBuilder.js +7 -7
- package/src/sap/ui/test/TestUtils.js +10 -0
- package/src/sap/ui/test/_UsageReport.js +1 -1
- package/src/sap/ui/test/generic/GenericTestCollection.js +176 -0
- package/src/sap/ui/test/generic/TestBase.js +151 -0
- package/src/sap/ui/test/generic/Utils.js +284 -0
- package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +9 -8
- package/src/sap/ui/test/selectors/_ControlSelectorValidator.js +1 -1
- package/src/sap/ui/test/starter/_setupAndStart.js +4 -0
- package/src/sap/ui/thirdparty/IPv6.js +1 -1
- package/src/sap/ui/thirdparty/SecondLevelDomains.js +1 -1
- package/src/sap/ui/thirdparty/URI.js +7 -3
- package/src/sap/ui/thirdparty/URITemplate.js +1 -1
- package/src/sap/ui/thirdparty/jszip.js +17 -7
- package/src/sap/ui/util/Mobile.js +17 -0
- package/src/sap/ui/util/Storage.js +1 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* OpenUI5
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE or an SAP affiliate company.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* global QUnit */
|
|
8
|
+
sap.ui.define([
|
|
9
|
+
"sap/ui/base/Object",
|
|
10
|
+
"sap/ui/test/generic/Utils",
|
|
11
|
+
"sap/ui/dom/includeStylesheet",
|
|
12
|
+
"sap/ui/core/Element",
|
|
13
|
+
"require"
|
|
14
|
+
], function(BaseObject, Utils, includeStylesheet, Element, require) {
|
|
15
|
+
"use strict";
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Handles test setup and execution.
|
|
19
|
+
* Single controls/elements are to be tested via the specific sub-classes by
|
|
20
|
+
* implementing shouldIgnoreControl() and testControl().
|
|
21
|
+
*
|
|
22
|
+
* @class Base class for generic tests.
|
|
23
|
+
*
|
|
24
|
+
* @extends sap.ui.base.Object
|
|
25
|
+
* @abstract
|
|
26
|
+
* @author SAP SE
|
|
27
|
+
* @version 1.100.0
|
|
28
|
+
* @since 1.100
|
|
29
|
+
*/
|
|
30
|
+
return BaseObject.extend("sap.ui.test.generic.TestBase", {
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Checks whether the control with the given name should for some reason not be tested
|
|
34
|
+
*
|
|
35
|
+
* @private
|
|
36
|
+
* @param {sap.ui.test.generic.ClassInfo} oClassInfo Info object containing the <code>sap.ui.test.generic.ClassInfo</code> object
|
|
37
|
+
* @param {QUnit.assert} assert QUnit Assert class of which instances are passed as the argument to QUnit.test() callbacks
|
|
38
|
+
* @return {boolean} Returns 'true' if control should not be tested
|
|
39
|
+
*
|
|
40
|
+
*/
|
|
41
|
+
shouldIgnoreControl: function(oClassInfo, assert) {
|
|
42
|
+
return false;
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Called for each control/element in a library.
|
|
47
|
+
* Must be implemented by sub-classes.
|
|
48
|
+
*
|
|
49
|
+
* @param {sap.ui.test.generic.ClassInfo} oClassInfo Info object containing the <code>sap.ui.test.generic.ClassInfo</code> object
|
|
50
|
+
* @param {QUnit.assert} assert QUnit Assert class of which instances are passed as the argument to QUnit.test() callbacks
|
|
51
|
+
* @private
|
|
52
|
+
* @abstract
|
|
53
|
+
*/
|
|
54
|
+
testControl: function(oClassInfo, assert) {},
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Getter for the ObjectCapabilities
|
|
58
|
+
*
|
|
59
|
+
* @param {string} sClass Class name to get the ObjectCapabilities for a specific Class
|
|
60
|
+
* @return {sap.ui.test.generic.GenericTestCollection.ObjectCapabilities|Object<string,sap.ui.test.generic.GenericTestCollection.ObjectCapabilities>} Promise resolved after test run is finished
|
|
61
|
+
* @private
|
|
62
|
+
*/
|
|
63
|
+
getObjectCapabilities: function(sClass) {
|
|
64
|
+
if (sClass) {
|
|
65
|
+
return this._mObjectCapabilities[sClass];
|
|
66
|
+
} else {
|
|
67
|
+
return this._mObjectCapabilities;
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Executes the generic tests.
|
|
73
|
+
*
|
|
74
|
+
* @param {sap.ui.test.generic.ClassInfo[]} aClassInfo Array containing all loaded controls/elements which belong to the library
|
|
75
|
+
* @return {Promise} Promise resolved after test run is finished
|
|
76
|
+
* @private
|
|
77
|
+
*/
|
|
78
|
+
run: function(aClassInfo) {
|
|
79
|
+
// Only necessary for test which render controls
|
|
80
|
+
return includeStylesheet({
|
|
81
|
+
url: require.toUrl("test-resources/sap/ui/core/qunit/generic/helper/_cleanupStyles.css")
|
|
82
|
+
}).then(function () {
|
|
83
|
+
return Promise.all(aClassInfo.map(function(oClassInfo) {
|
|
84
|
+
var sClassName = oClassInfo.className;
|
|
85
|
+
var sCaption = sClassName.startsWith(this._sLibName) ? sClassName.slice(this._sLibName.length) : sClassName;
|
|
86
|
+
QUnit.test(sCaption, function (assert) {
|
|
87
|
+
if (!this.shouldIgnoreControl(oClassInfo, assert)) {
|
|
88
|
+
this._iFullyTestedControls++;
|
|
89
|
+
return this.testControl.apply(this, [oClassInfo, assert]);
|
|
90
|
+
} else {
|
|
91
|
+
// nothing to do
|
|
92
|
+
this._iIgnoredOrExcludedControls++;
|
|
93
|
+
return Promise.resolve();
|
|
94
|
+
}
|
|
95
|
+
}.bind(this));
|
|
96
|
+
}.bind(this))).then(function () {
|
|
97
|
+
// display some numbers regarding test execution
|
|
98
|
+
QUnit.test("Statistics", function(assert) {
|
|
99
|
+
assert.ok(true, "Total number of found controls: " + this._iAllControls);
|
|
100
|
+
assert.ok(true, "Total number of ignored or excluded controls: " + this._iIgnoredOrExcludedControls);
|
|
101
|
+
assert.ok(true, "Number of fully tested controls: " + this._iFullyTestedControls);
|
|
102
|
+
}.bind(this));
|
|
103
|
+
|
|
104
|
+
}.bind(this));
|
|
105
|
+
}.bind(this));
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Performs the setup and execution of a generic test.
|
|
110
|
+
* Loads all controls/elements of the configured library and provides a QUnit.module.
|
|
111
|
+
*
|
|
112
|
+
* @param {object} [mParams] Test specific parameters
|
|
113
|
+
* @param {string} [mParams.includeElements] Include elements for test execution
|
|
114
|
+
* @returns {Promise<undefined>} setup promise, delays test start until all controls/elements are loaded
|
|
115
|
+
* @private
|
|
116
|
+
*/
|
|
117
|
+
setupAndStart: function(mParams) {
|
|
118
|
+
// statistics values
|
|
119
|
+
this._iAllControls = 0;
|
|
120
|
+
this._iIgnoredOrExcludedControls = 0;
|
|
121
|
+
this._iFullyTestedControls = 0;
|
|
122
|
+
|
|
123
|
+
// retrieve test config
|
|
124
|
+
this._oTestParameters = window["sap-ui-test-config"];
|
|
125
|
+
this._mObjectCapabilities = this._oTestParameters.objectCapabilities || {};
|
|
126
|
+
this._sLibName = this._oTestParameters.library;
|
|
127
|
+
|
|
128
|
+
return Utils.loadAllControls(this._oTestParameters, {
|
|
129
|
+
includeElements: mParams && mParams.includeElements
|
|
130
|
+
}).then(function(aClassInfo) {
|
|
131
|
+
QUnit.module(this.getMetadata().getName() + " Tests - " + this._sLibName, {
|
|
132
|
+
afterEach: function() {
|
|
133
|
+
Element.registry.forEach(function(oElement, sId) {
|
|
134
|
+
oElement.destroy();
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
if (aClassInfo.length === 0) {
|
|
140
|
+
QUnit.test("No classes to test for library '" + this._sLibName + "'.", function (assert) {
|
|
141
|
+
// We could also skip this test but voter complains in case there is no test execution at all
|
|
142
|
+
assert.ok(true, "Nothing to test.");
|
|
143
|
+
});
|
|
144
|
+
} else {
|
|
145
|
+
this._iAllControls = aClassInfo.length;
|
|
146
|
+
return this.run(aClassInfo);
|
|
147
|
+
}
|
|
148
|
+
}.bind(this));
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
});
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* OpenUI5
|
|
3
|
+
* (c) Copyright 2009-2022 SAP SE or an SAP affiliate company.
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/* globals QUnit */
|
|
8
|
+
sap.ui.define([
|
|
9
|
+
"sap/base/util/ObjectPath",
|
|
10
|
+
"sap/ui/base/DataType",
|
|
11
|
+
"sap/ui/test/generic/GenericTestCollection",
|
|
12
|
+
"require"
|
|
13
|
+
], function(ObjectPath, DataType, GenericTestCollection, require) {
|
|
14
|
+
"use strict";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @typedef {object} sap.ui.test.generic.ClassInfo
|
|
18
|
+
* @property {string} className The class name
|
|
19
|
+
* @property {sap.ui.core.Control|sap.ui.core.Element} [fnClass=undefined] The loaded class
|
|
20
|
+
* @property {Error} [error=undefined] The error that might occur
|
|
21
|
+
*
|
|
22
|
+
* @private
|
|
23
|
+
**/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @namespace sap.ui.test.generic.Utils
|
|
27
|
+
* @private
|
|
28
|
+
* @ui5-restricted Only for DIST layer libraries
|
|
29
|
+
*/
|
|
30
|
+
var Utils = {
|
|
31
|
+
/**
|
|
32
|
+
* @param {string} sClassName The class name which should be loaded
|
|
33
|
+
* @param {string} sContainingModuleName Name of the module that contains the class. If not given, it is assumed that a module with the same name as the class (dots replaced by slashes) exports the class.
|
|
34
|
+
* When given, the module is loaded and the class is retrieved via its global name
|
|
35
|
+
* @return {Promise<sap.ui.test.generic.ClassInfo>} Returns a promise resolving with a <code>sap.ui.test.generic.ClassInfo</code> object.
|
|
36
|
+
*/
|
|
37
|
+
loadClass: function(sClassName, sContainingModuleName) {
|
|
38
|
+
return new Promise(function(resolve) {
|
|
39
|
+
var sModuleName = sContainingModuleName ? sContainingModuleName : sClassName.replace(/\./g, "/");
|
|
40
|
+
require([sModuleName], function(Class) {
|
|
41
|
+
if (sContainingModuleName) {
|
|
42
|
+
Class = ObjectPath.get(sClassName);
|
|
43
|
+
}
|
|
44
|
+
resolve({
|
|
45
|
+
className: sClassName,
|
|
46
|
+
fnClass: Class,
|
|
47
|
+
error: undefined
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
}, function(err) {
|
|
51
|
+
var Class = ObjectPath.get(sClassName);
|
|
52
|
+
resolve({
|
|
53
|
+
className: sClassName,
|
|
54
|
+
fnClass: Class,
|
|
55
|
+
error: err
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Loads all control classes for the given library.
|
|
63
|
+
*
|
|
64
|
+
* @param {object} [mTestParams] Test specific parameters
|
|
65
|
+
* @param {string} [mTestParams.library] The library name
|
|
66
|
+
* @param {sap.ui.test.generic.GenericTestCollection.ObjectCapabilities} [mTestParams.objectCapabilities] The capabilities of the controls
|
|
67
|
+
* @param {object} [mOptions] Object that holds further configs.
|
|
68
|
+
* @param {boolean} [mOptions.includeElements=false] Whether the library's elements should be considered as well.
|
|
69
|
+
* @return {Promise<sap.ui.test.generic.ClassInfo[]>} Returns a promise resolving with an array of <code>sap.ui.test.generic.ClassInfo</code> objects.
|
|
70
|
+
*/
|
|
71
|
+
loadAllControls: function(mTestParams, mOptions) {
|
|
72
|
+
var sLibName = mTestParams.library;
|
|
73
|
+
var mCapabilities = mTestParams.objectCapabilities || {};
|
|
74
|
+
var aLoadedElementsAndControls = [];
|
|
75
|
+
|
|
76
|
+
mOptions = mOptions || {};
|
|
77
|
+
|
|
78
|
+
var aLoadClassPromises = [];
|
|
79
|
+
|
|
80
|
+
var loadControls = function () {
|
|
81
|
+
return sap.ui.getCore().loadLibrary(sLibName, true).then(function (library) {
|
|
82
|
+
var aClasses = library ? library.controls : [];
|
|
83
|
+
|
|
84
|
+
if (mOptions.includeElements) {
|
|
85
|
+
aClasses = aClasses.concat(library.elements);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
aClasses = aClasses.filter(function (sControlName) {
|
|
89
|
+
// Check if there are new controls or elements available in library after the previous loading
|
|
90
|
+
return !aLoadedElementsAndControls.includes(sControlName);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
if (aClasses.length > 0) {
|
|
94
|
+
aClasses.forEach(function(sClass) {
|
|
95
|
+
var sModuleName = mCapabilities[sClass] && mCapabilities[sClass].moduleName;
|
|
96
|
+
|
|
97
|
+
aLoadClassPromises.push(Utils.loadClass(sClass, sModuleName));
|
|
98
|
+
aLoadedElementsAndControls.push(sClass);
|
|
99
|
+
});
|
|
100
|
+
return Promise.all(aLoadClassPromises).then(loadControls);
|
|
101
|
+
}
|
|
102
|
+
return Promise.all(aLoadClassPromises);
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
return loadControls().then(function (aClassInfo) {
|
|
107
|
+
var i;
|
|
108
|
+
var aClassInfoError = aClassInfo.filter(function (oClassInfo) {
|
|
109
|
+
return oClassInfo.error !== undefined;
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
aClassInfo = aClassInfo.filter(function (oClassInfo) {
|
|
113
|
+
return !!oClassInfo.fnClass;
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
if (aClassInfoError.length) {
|
|
117
|
+
QUnit.test("Controls only available in global namespace", function (assert) {
|
|
118
|
+
for (i = 0; i < aClassInfoError.length; i++) {
|
|
119
|
+
assert.ok(false, aClassInfoError[i].className + " seems to be only available using global namespace." +
|
|
120
|
+
" If the class exists, but is not a module of its own, then specify the module that contains the class within the testsuite config.");
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return aClassInfo;
|
|
125
|
+
});
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Create a control or element based on the given object capabilities
|
|
130
|
+
*
|
|
131
|
+
* @param {sap.ui.core.Control|sap.ui.core.Element} Class The control or element class to instantiate
|
|
132
|
+
* @param {sap.ui.test.generic.GenericTestCollection.ObjectCapabilities} oObjectCapabilities The capabilities of the correspodning control
|
|
133
|
+
* @param {map} mSettings Settings which should be used to create the control or element
|
|
134
|
+
* @return {sap.ui.core.Control|sap.ui.core.Element} Instance of the control or element
|
|
135
|
+
*/
|
|
136
|
+
createControlOrElement: function (Class, oObjectCapabilities, mSettings) {
|
|
137
|
+
if (oObjectCapabilities && oObjectCapabilities.create) {
|
|
138
|
+
return oObjectCapabilities.create(Class, mSettings);
|
|
139
|
+
} else {
|
|
140
|
+
return new Class(mSettings);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
},
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Tries to fill all control properties with string values
|
|
147
|
+
*
|
|
148
|
+
* @param {sap.ui.core.Control} oControl The control whose properties get filled
|
|
149
|
+
* @param {sap.ui.test.generic.GenericTestCollection.ObjectCapabilities} oObjectCapabilities The capabilities of the corresponding control
|
|
150
|
+
*/
|
|
151
|
+
fillControlProperties: function(oControl, oObjectCapabilities) {
|
|
152
|
+
var mProperties = oControl.getMetadata().getAllProperties(),
|
|
153
|
+
mPropertyCapabilities = oObjectCapabilities && oObjectCapabilities.properties || {},
|
|
154
|
+
vValueToSet = "test"; // just try a string as default, with some frequently happening exceptions
|
|
155
|
+
|
|
156
|
+
for (var sPropertyName in mProperties) {
|
|
157
|
+
var oProperty = mProperties[sPropertyName],
|
|
158
|
+
sPropertyCapability;
|
|
159
|
+
|
|
160
|
+
// Check if property should be skipped because of known issues or if a specific value should be used for setting the property
|
|
161
|
+
if (mPropertyCapabilities[sPropertyName]) {
|
|
162
|
+
if (GenericTestCollection.ExcludeReason.hasOwnProperty(mPropertyCapabilities[sPropertyName])) {
|
|
163
|
+
sPropertyCapability = mPropertyCapabilities[sPropertyName];
|
|
164
|
+
} else {
|
|
165
|
+
vValueToSet = mPropertyCapabilities[sPropertyName];
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (sPropertyCapability !== GenericTestCollection.ExcludeReason.NotChangeableAfterInit &&
|
|
170
|
+
sPropertyCapability !== GenericTestCollection.ExcludeReason.SetterNeedsSpecificSettings &&
|
|
171
|
+
sPropertyCapability !== GenericTestCollection.ExcludeReason.OnlyChangeableViaBinding) {
|
|
172
|
+
try {
|
|
173
|
+
if (oProperty.type === "boolean") {
|
|
174
|
+
vValueToSet = false;
|
|
175
|
+
} else if (oProperty.type === "int") {
|
|
176
|
+
vValueToSet = 100;
|
|
177
|
+
} else if (oProperty.type.startsWith("sap.")) {
|
|
178
|
+
var oEnum = require(oProperty.type.replace(/\./g, "\/"));
|
|
179
|
+
vValueToSet = oEnum[Object.keys(oEnum)[0]];
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
oControl[oProperty._sMutator](vValueToSet);
|
|
183
|
+
} catch (e) {
|
|
184
|
+
// type check error, ignore
|
|
185
|
+
// QUnit.assert.ok(true, "INFO: Failed to fill property: '" + sPropertyName + "' to control '" + oControl.getMetadata().getName() + "'");
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
try {
|
|
190
|
+
oControl.setTooltip("test"); // seems not to be a property...
|
|
191
|
+
} catch (error) {
|
|
192
|
+
// This case currently only happens in sap.ui.webc libraries
|
|
193
|
+
// They can't handle a string as tooltip properly therefore
|
|
194
|
+
// setting tooltip on these controls fails
|
|
195
|
+
// Adding this try catch here instead of exception in order
|
|
196
|
+
// to avoid an entry for each of the controls in the
|
|
197
|
+
// corresponding config files
|
|
198
|
+
// The libraries where not tested before the introduction
|
|
199
|
+
// of the new generic tests for libraries. Therefore the
|
|
200
|
+
// issue was not 'visible' before
|
|
201
|
+
QUnit.assert.ok(true, "WARNING: setTooltip is not able to handle strings");
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
fillControlAggregations: function(oControl, mObjectCapabilities) {
|
|
206
|
+
var oMetadata = oControl.getMetadata(),
|
|
207
|
+
oObjectCapabilities = mObjectCapabilities[oMetadata.getName()],
|
|
208
|
+
mAggregations = oMetadata.getAggregations();
|
|
209
|
+
return Promise.all(
|
|
210
|
+
Object.values(mAggregations).map(function(oAggregation) {
|
|
211
|
+
var sAggregationType = oAggregation.type;
|
|
212
|
+
|
|
213
|
+
// Specific handling for frequently used abstract and interface classes
|
|
214
|
+
switch (oAggregation.type) {
|
|
215
|
+
case "sap.ui.core.Control":
|
|
216
|
+
// Use sap.m.Text in case aggregation is of type sap.ui.core.Control
|
|
217
|
+
sAggregationType = "sap.m.Text";
|
|
218
|
+
break;
|
|
219
|
+
case "sap.ui.core.Element":
|
|
220
|
+
// Use sap.ui.core.Icon in case aggregation is of type sap.ui.core.Element
|
|
221
|
+
sAggregationType = "sap.ui.core.Icon";
|
|
222
|
+
break;
|
|
223
|
+
case "sap.ui.core.Toolbar":
|
|
224
|
+
// Toolbar is interface - Special treatment because of legacy coding in old
|
|
225
|
+
// DuplicateIdCheck qunit
|
|
226
|
+
sAggregationType = "sap.m.Bar";
|
|
227
|
+
break;
|
|
228
|
+
default:
|
|
229
|
+
sAggregationType = oAggregation.type;
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Check if aggregation should be skipped because of known issues or if a specific control should be used for the aggregation
|
|
234
|
+
if (oObjectCapabilities && oObjectCapabilities.aggregations && oObjectCapabilities.aggregations[oAggregation.name]) {
|
|
235
|
+
if (GenericTestCollection.ExcludeReason.hasOwnProperty(oObjectCapabilities.aggregations[oAggregation.name])) {
|
|
236
|
+
var sAggregationCapability = oObjectCapabilities.aggregations[oAggregation.name];
|
|
237
|
+
|
|
238
|
+
if (sAggregationCapability === GenericTestCollection.ExcludeReason.NotChangeableAfterInit ||
|
|
239
|
+
sAggregationCapability === GenericTestCollection.ExcludeReason.SetterNeedsSpecificSettings) {
|
|
240
|
+
return Promise.resolve(undefined); // Skip this aggregation because it can't be added generically
|
|
241
|
+
}
|
|
242
|
+
} else {
|
|
243
|
+
sAggregationType = oObjectCapabilities.aggregations[oAggregation.name];
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
var sModuleName = mObjectCapabilities[sAggregationType] && mObjectCapabilities[sAggregationType].moduleName ? mObjectCapabilities[sAggregationType].moduleName : undefined;
|
|
247
|
+
|
|
248
|
+
if (DataType.isInterfaceType(sAggregationType)) {
|
|
249
|
+
return Promise.resolve(undefined); // Can't handle interface types generically
|
|
250
|
+
}
|
|
251
|
+
return Utils.loadClass(sAggregationType, sModuleName).then(function(oClassInfo) {
|
|
252
|
+
var oElement;
|
|
253
|
+
|
|
254
|
+
if (!oClassInfo.fnClass) {
|
|
255
|
+
QUnit.assert.ok(false, "No class of type " + sAggregationType + " for aggregation '" + oAggregation.name + "' of " + oControl + " could be loaded. Does this class exist? Is it properly implemented?");
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (oClassInfo.fnClass.getMetadata().isAbstract() ) {
|
|
260
|
+
// we also shouldn't instantiate abstract classes
|
|
261
|
+
return;
|
|
262
|
+
|
|
263
|
+
} else {
|
|
264
|
+
// A specific Control or Element type. Try to add a working instance.
|
|
265
|
+
oElement = new oClassInfo.fnClass();
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// In case we were able to instantiate a suitable Element, add it into the aggregation.
|
|
269
|
+
if (oElement) {
|
|
270
|
+
oControl[oAggregation._sMutator](oElement);
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
return oElement;
|
|
274
|
+
}).catch(function () {
|
|
275
|
+
// error while creating or adding a child element: not a problem, just reducing test coverage a bit
|
|
276
|
+
// QUnit.assert.ok(true, "INFO: Failed to add aggregation '" + oAggregation.name + "' of type '" + oAggregation.type + "' to control '" + oControl.getMetadata().getName() + "'");
|
|
277
|
+
});
|
|
278
|
+
})
|
|
279
|
+
);
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
|
|
283
|
+
return Utils;
|
|
284
|
+
});
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
* @param {boolean} oOptions.shallow whether to do a shallow or deep search of the control tree to find a selector. Default value is false, enabling search through the tree.
|
|
34
34
|
* @param {boolean} oOptions.multiple whether to return non-unique selectors as well. Default value is false, meaning that only unique selectors are returned.
|
|
35
35
|
* @param {boolean} oOptions.includeAll whether to return all selectors, matching a unique control, or just the top one. Default value is false, meaning that at most one selector is returned.
|
|
36
|
-
* @param {object} oOptions.settings preferences for the selector e.g. which is the most
|
|
36
|
+
* @param {object} oOptions.settings preferences for the selector e.g. which is the most preferred strategy
|
|
37
37
|
* @param {boolean} oOptions.settings.preferViewId true if selectors with view ID should have higher priority than selectors with global ID. Default value is false.
|
|
38
38
|
* @returns {Promise<object|Array|Error>} a plain object representation of a control or Error if none can be generated
|
|
39
39
|
* If multiple selectors are requested, an array is returned.
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
});
|
|
62
62
|
};
|
|
63
63
|
|
|
64
|
-
//
|
|
64
|
+
// hierarchical search parameters. modify only when debugging
|
|
65
65
|
var DEFAULT_MAX_DEPTH = 20;
|
|
66
66
|
var DEAULT_MAX_WIDTH = 10;
|
|
67
67
|
|
|
@@ -237,9 +237,10 @@
|
|
|
237
237
|
/**
|
|
238
238
|
* (slow) Use when no selector can be generated for the control by the plain generators.
|
|
239
239
|
* Search down the tree for a descendant with unique selector, then get a selector relative to it:
|
|
240
|
-
* 1. Find a selector that
|
|
240
|
+
* 1. Find a selector that describes the control within the app (doesn't have to be unique).
|
|
241
241
|
* 2. Then, find the closest of its descendants, which has a selector that uniquely describes it within the app.
|
|
242
|
-
* @param {object}
|
|
242
|
+
* @param {object} oOptions options to configure selector generation
|
|
243
|
+
* @param {object} oOptions.oControl the control to use as a starting point for the search
|
|
243
244
|
* @returns {object} a selector
|
|
244
245
|
* @private
|
|
245
246
|
*/
|
|
@@ -261,7 +262,7 @@
|
|
|
261
262
|
/**
|
|
262
263
|
* (slow) Use when no selector can be generated for the control by the plain generators.
|
|
263
264
|
* Search up and down the tree for a control with a unique selector, then get a selector relative to it:
|
|
264
|
-
* 1. Find a selector that
|
|
265
|
+
* 1. Find a selector that describes the control within the app (doesn't have to be unique).
|
|
265
266
|
* 2. Then, find the closest of its siblings, which has a selector that uniquely describes it within the app.
|
|
266
267
|
* a sibling is a control that has the same ancestor
|
|
267
268
|
* This resembles a descendant search, done for every ancestor (up to a certain level)
|
|
@@ -277,7 +278,7 @@
|
|
|
277
278
|
shallow: true,
|
|
278
279
|
multiple: true
|
|
279
280
|
}).then(function (mTargetMultiSelector) {
|
|
280
|
-
// find a selector that
|
|
281
|
+
// find a selector that includes a relative or sibling, that has a unique selector
|
|
281
282
|
return _ControlSelectorGenerator._generateSelectorWithUniqueSibling(oOptions, mTargetMultiSelector);
|
|
282
283
|
});
|
|
283
284
|
};
|
|
@@ -455,7 +456,7 @@
|
|
|
455
456
|
};
|
|
456
457
|
|
|
457
458
|
/**
|
|
458
|
-
*
|
|
459
|
+
* Iterate through all controls a a given level and attempt to generate a unique selector for each one.
|
|
459
460
|
* stop the cycle as soon as one unique selector is found
|
|
460
461
|
* @param {Array} oOptions.siblings the children at a given tree level
|
|
461
462
|
* @param {object} oOptions.options filter options
|
|
@@ -518,7 +519,7 @@
|
|
|
518
519
|
* Filters valid selectors.
|
|
519
520
|
* @param {object} vSelector a control selector or array of selectors
|
|
520
521
|
* @param {object} oOptions.validationRoot the subtree root. If not defined, the selector will be valid for the entire app.
|
|
521
|
-
* @param {boolean} oOptions.multiple whether the selector can match
|
|
522
|
+
* @param {boolean} oOptions.multiple whether the selector can match multiple controls. False by default.
|
|
522
523
|
* @returns {array} an array of valid selectors
|
|
523
524
|
* @private
|
|
524
525
|
*/
|
|
@@ -22,7 +22,7 @@ sap.ui.define([
|
|
|
22
22
|
*/
|
|
23
23
|
var _ControlSelectorValidator = ManagedObject.extend("sap.ui.test.selectors._ControlSelectorValidator", {
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* Construct a validator
|
|
26
26
|
* @param {object} oValidationRoot control which will be used to test the selector
|
|
27
27
|
* The selector should be unique in the control subtree with root oOptions.validationRoot. By default, this subtree is the entire app control tree.
|
|
28
28
|
* @param {boolean} bMultiple whether to validate non-unique selectors as well. Default value is false, meaning that only unique selectors are valid.
|
|
@@ -310,6 +310,10 @@ sap.ui.define([
|
|
|
310
310
|
window["sap-ui-config"].libs = window["sap-ui-config"].libs.join(",");
|
|
311
311
|
}
|
|
312
312
|
|
|
313
|
+
// write test config to window
|
|
314
|
+
// can be read by specific tests, e.g. tests in the generic test collection
|
|
315
|
+
window["sap-ui-test-config"] = oConfig.testConfig || {};
|
|
316
|
+
|
|
313
317
|
if ( oConfig.bootCore ) {
|
|
314
318
|
pTestEnv = pTestEnv.then(function() {
|
|
315
319
|
return new Promise(function(resolve, reject) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* URI.js - Mutating URLs
|
|
3
3
|
*
|
|
4
|
-
* Version: 1.19.
|
|
4
|
+
* Version: 1.19.10
|
|
5
5
|
*
|
|
6
6
|
* Author: Rodney Rehm
|
|
7
7
|
* Web: http://medialize.github.io/URI.js/
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
return /^[0-9]+$/.test(value);
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
-
URI.version = '1.19.
|
|
93
|
+
URI.version = '1.19.10';
|
|
94
94
|
|
|
95
95
|
var p = URI.prototype;
|
|
96
96
|
var hasOwn = Object.prototype.hasOwnProperty;
|
|
@@ -248,6 +248,7 @@
|
|
|
248
248
|
// balanced parens inclusion (), [], {}, <>
|
|
249
249
|
parens: /(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g,
|
|
250
250
|
};
|
|
251
|
+
URI.leading_whitespace_expression = /^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/
|
|
251
252
|
// http://www.iana.org/assignments/uri-schemes.html
|
|
252
253
|
// http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports
|
|
253
254
|
URI.defaultPorts = {
|
|
@@ -503,6 +504,9 @@
|
|
|
503
504
|
preventInvalidHostname: URI.preventInvalidHostname
|
|
504
505
|
};
|
|
505
506
|
}
|
|
507
|
+
|
|
508
|
+
string = string.replace(URI.leading_whitespace_expression, '')
|
|
509
|
+
|
|
506
510
|
// [protocol"://"[username[":"password]"@"]hostname[":"port]"/"?][path]["?"querystring]["#"fragment]
|
|
507
511
|
|
|
508
512
|
// extract fragment
|
|
@@ -522,7 +526,7 @@
|
|
|
522
526
|
}
|
|
523
527
|
|
|
524
528
|
// slashes and backslashes have lost all meaning for the web protocols (https, http, wss, ws)
|
|
525
|
-
string = string.replace(/^(https?|ftp|wss?)
|
|
529
|
+
string = string.replace(/^(https?|ftp|wss?)?:+[/\\]*/i, '$1://');
|
|
526
530
|
|
|
527
531
|
// extract protocol
|
|
528
532
|
if (string.substring(0, 2) === '//') {
|
|
@@ -292,7 +292,13 @@ function JSZip(data, options) {
|
|
|
292
292
|
// "folder/" : {...},
|
|
293
293
|
// "folder/data.txt" : {...}
|
|
294
294
|
// }
|
|
295
|
-
|
|
295
|
+
// ##### BEGIN: MODIFIED BY SAP
|
|
296
|
+
// this.files = {};
|
|
297
|
+
// NOTE: we use a null prototype because we do not
|
|
298
|
+
// want filenames like "toString" coming from a zip file
|
|
299
|
+
// to overwrite methods and attributes in a normal Object.
|
|
300
|
+
this.files = Object.create(null);
|
|
301
|
+
// ##### END: MODIFIED BY SAP
|
|
296
302
|
|
|
297
303
|
// Where we are in the hierarchy
|
|
298
304
|
this.root = "";
|
|
@@ -905,9 +911,11 @@ var out = {
|
|
|
905
911
|
var result = [],
|
|
906
912
|
filename, relativePath, file, fileClone;
|
|
907
913
|
for (filename in this.files) {
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
914
|
+
// ##### BEGIN: MODIFIED BY SAP
|
|
915
|
+
// if (!this.files.hasOwnProperty(filename)) {
|
|
916
|
+
// continue;
|
|
917
|
+
// }
|
|
918
|
+
// ##### END: MODIFIED BY SAP
|
|
911
919
|
file = this.files[filename];
|
|
912
920
|
// return a new object, don't let the user mess with our internal objects :)
|
|
913
921
|
fileClone = new ZipObject(file.name, file._data, extend(file.options));
|
|
@@ -1036,9 +1044,11 @@ var out = {
|
|
|
1036
1044
|
|
|
1037
1045
|
// first, generate all the zip parts.
|
|
1038
1046
|
for (var name in this.files) {
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1047
|
+
// ##### BEGIN: MODIFIED BY SAP
|
|
1048
|
+
// if (!this.files.hasOwnProperty(name)) {
|
|
1049
|
+
// continue;
|
|
1050
|
+
// }
|
|
1051
|
+
// ##### END: MODIFIED BY SAP
|
|
1042
1052
|
var file = this.files[name];
|
|
1043
1053
|
|
|
1044
1054
|
var compressionName = file.options.compression || options.compression.toUpperCase();
|
|
@@ -104,6 +104,23 @@ sap.ui.define(['sap/ui/Device', 'sap/base/Log', "sap/ui/thirdparty/jquery"], fun
|
|
|
104
104
|
var iInnerWidthBefore = Device.resize.width;
|
|
105
105
|
|
|
106
106
|
sMeta = "width=device-width, initial-scale=1.0";
|
|
107
|
+
|
|
108
|
+
// Setting maximum-scale=1.0 and user-scalable=no has effect to the manual zoom (user can pinch zoom the
|
|
109
|
+
// UI) and auto zoom (browser zooms in the UI automatically under some circumtances, for example when an
|
|
110
|
+
// input gets the focus and the font-size of the input is less than 16px on iOS) functionalities on the
|
|
111
|
+
// mobile platform, but there's some difference between the mobile platforms:
|
|
112
|
+
// * iOS: This does not disable manual zoom in Safari and it only disables the auto zoom function. In
|
|
113
|
+
// Chrome browser on iOS, it does disable the manual zoom but since Chrome on iOS isn't in the support
|
|
114
|
+
// matrix, we can ignore this.
|
|
115
|
+
// * other mobile platform: it does disable the manual zoom option but there's no auto zoom function.
|
|
116
|
+
// So we need to remove the maximum-scale=1.0:
|
|
117
|
+
//
|
|
118
|
+
// Therefore we need to add the additional settings (maximum-scale and user-scalable) only for iOS
|
|
119
|
+
// platform
|
|
120
|
+
if (Device.os.ios) {
|
|
121
|
+
sMeta += ", maximum-scale=1.0, user-scalable=no";
|
|
122
|
+
}
|
|
123
|
+
|
|
107
124
|
$head.append(jQuery('<meta name="viewport" content="' + sMeta + '">'));
|
|
108
125
|
|
|
109
126
|
// Update Device API resize info, which is necessary in some scenarios after setting the viewport info
|