@openui5/sap.ui.core 1.116.0 → 1.117.1
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/.eslintrc.json +1 -22
- package/package.json +1 -1
- package/src/jquery.sap.global.js +1 -1
- 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/Event.js +4 -4
- package/src/sap/base/Eventing.js +5 -6
- package/src/sap/base/config/MemoryConfigurationProvider.js +10 -1
- package/src/sap/base/config.js +3 -2
- package/src/sap/base/i18n/Formatting.js +30 -32
- package/src/sap/base/i18n/LanguageTag.js +2 -2
- package/src/sap/base/i18n/Localization.js +19 -20
- package/src/sap/base/i18n/date/CalendarType.js +1 -1
- package/src/sap/base/i18n/date/CalendarWeekNumbering.js +1 -1
- package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
- package/src/sap/base/util/JSTokenizer.js +1 -1
- package/src/sap/base/util/fetch.js +4 -4
- package/src/sap/base/util/mixedFetch.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/base/util/syncFetch.js +2 -2
- package/src/sap/ui/Device.js +3 -3
- package/src/sap/ui/Global.js +4 -4
- package/src/sap/ui/base/Event.js +6 -4
- package/src/sap/ui/base/EventProvider.js +1 -1
- package/src/sap/ui/base/Interface.js +1 -1
- package/src/sap/ui/base/ManagedObject.js +2 -4
- package/src/sap/ui/base/ManagedObjectMetadata.js +4 -6
- 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/AnimationMode.js +1 -1
- 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 +1 -1
- package/src/sap/ui/core/ComponentSupport.js +1 -1
- package/src/sap/ui/core/ConfigTest.js +17 -0
- package/src/sap/ui/core/Configuration.js +2 -14
- package/src/sap/ui/core/Control.js +4 -1
- package/src/sap/ui/core/ControlBehavior.js +2 -2
- 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 +2 -4
- 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 +1 -1
- package/src/sap/ui/core/IconPool.js +1 -2
- 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/Lib.js +17 -16
- 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 +5 -2
- package/src/sap/ui/core/LocaleData.js +12 -4
- package/src/sap/ui/core/Manifest.js +5 -5
- package/src/sap/ui/core/Message.js +1 -1
- package/src/sap/ui/core/Popup.js +37 -50
- package/src/sap/ui/core/RenderManager.js +1 -1
- package/src/sap/ui/core/Renderer.js +1 -1
- package/src/sap/ui/core/Rendering.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/Shortcut.js +11 -9
- package/src/sap/ui/core/StaticArea.js +1 -1
- package/src/sap/ui/core/Theming.js +16 -9
- 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 +27 -5
- package/src/sap/ui/core/_IconRegistry.js +82 -11
- package/src/sap/ui/core/boot/_bootConfig.js +137 -0
- package/src/sap/ui/core/boot/_runBoot.js +16 -0
- package/src/sap/ui/core/boot/initDOM.js +96 -0
- package/src/sap/ui/core/boot/loadCalendar.js +50 -0
- package/src/sap/ui/core/boot/loadManifest.js +55 -0
- package/src/sap/ui/core/boot/loadModules.js +80 -0
- package/src/sap/ui/core/boot/manifest.json +11 -0
- package/src/sap/ui/core/boot/onInit.js +44 -0
- package/src/sap/ui/core/boot.js +107 -0
- package/src/sap/ui/core/date/UI5Date.js +9 -3
- 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/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 +1 -1
- package/src/sap/ui/core/format/DateFormat.js +13 -12
- 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 +32 -6
- 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/MessageMixin.js +6 -5
- 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_ar.properties +57 -55
- package/src/sap/ui/core/messagebundle_bg.properties +57 -55
- package/src/sap/ui/core/messagebundle_ca.properties +30 -28
- package/src/sap/ui/core/messagebundle_cs.properties +43 -41
- package/src/sap/ui/core/messagebundle_cy.properties +58 -56
- package/src/sap/ui/core/messagebundle_da.properties +56 -54
- package/src/sap/ui/core/messagebundle_de.properties +58 -56
- package/src/sap/ui/core/messagebundle_el.properties +47 -45
- package/src/sap/ui/core/messagebundle_en.properties +58 -56
- package/src/sap/ui/core/messagebundle_en_GB.properties +58 -56
- package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +2 -0
- package/src/sap/ui/core/messagebundle_en_US_saprigi.properties +2 -0
- package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +3 -0
- package/src/sap/ui/core/messagebundle_es.properties +47 -45
- package/src/sap/ui/core/messagebundle_es_MX.properties +57 -55
- package/src/sap/ui/core/messagebundle_et.properties +54 -52
- package/src/sap/ui/core/messagebundle_fi.properties +51 -49
- package/src/sap/ui/core/messagebundle_fr.properties +36 -34
- package/src/sap/ui/core/messagebundle_fr_CA.properties +21 -19
- package/src/sap/ui/core/messagebundle_hi.properties +42 -40
- package/src/sap/ui/core/messagebundle_hr.properties +57 -55
- package/src/sap/ui/core/messagebundle_hu.properties +58 -56
- package/src/sap/ui/core/messagebundle_id.properties +58 -56
- package/src/sap/ui/core/messagebundle_it.properties +59 -57
- package/src/sap/ui/core/messagebundle_iw.properties +58 -56
- package/src/sap/ui/core/messagebundle_ja.properties +50 -48
- package/src/sap/ui/core/messagebundle_kk.properties +43 -41
- package/src/sap/ui/core/messagebundle_ko.properties +19 -17
- package/src/sap/ui/core/messagebundle_lt.properties +58 -56
- package/src/sap/ui/core/messagebundle_lv.properties +58 -56
- package/src/sap/ui/core/messagebundle_ms.properties +58 -56
- package/src/sap/ui/core/messagebundle_nl.properties +57 -55
- package/src/sap/ui/core/messagebundle_no.properties +55 -53
- package/src/sap/ui/core/messagebundle_pl.properties +55 -53
- package/src/sap/ui/core/messagebundle_pt.properties +57 -55
- package/src/sap/ui/core/messagebundle_pt_PT.properties +57 -55
- package/src/sap/ui/core/messagebundle_ro.properties +58 -56
- package/src/sap/ui/core/messagebundle_ru.properties +57 -55
- package/src/sap/ui/core/messagebundle_sh.properties +58 -56
- package/src/sap/ui/core/messagebundle_sk.properties +57 -55
- package/src/sap/ui/core/messagebundle_sl.properties +58 -56
- package/src/sap/ui/core/messagebundle_sv.properties +54 -52
- package/src/sap/ui/core/messagebundle_th.properties +17 -15
- package/src/sap/ui/core/messagebundle_tr.properties +58 -56
- package/src/sap/ui/core/messagebundle_uk.properties +58 -56
- package/src/sap/ui/core/messagebundle_vi.properties +58 -56
- package/src/sap/ui/core/messagebundle_zh_CN.properties +58 -56
- package/src/sap/ui/core/messagebundle_zh_TW.properties +58 -56
- 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 +14 -2
- 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 +1 -1
- 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 +7 -4
- 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/Icon.less +2 -2
- package/src/sap/ui/core/theming/Parameters.js +0 -5
- package/src/sap/ui/core/theming/ThemeManager.js +3 -4
- 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 +4 -5
- package/src/sap/ui/core/util/PasteHelper.js +1 -1
- 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/PropertyList.js +1 -1
- package/src/sap/ui/model/ClientModel.js +1 -1
- package/src/sap/ui/model/CompositeDataState.js +1 -1
- package/src/sap/ui/model/CompositeType.js +1 -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/analytics/AnalyticalBinding.js +166 -79
- package/src/sap/ui/model/analytics/AnalyticalVersionInfo.js +4 -3
- package/src/sap/ui/model/analytics/BatchResponseCollector.js +2 -2
- package/src/sap/ui/model/analytics/ODataModelAdapter.js +14 -27
- package/src/sap/ui/model/analytics/odata4analytics.js +6 -12
- package/src/sap/ui/model/base/ManagedObjectModel.js +2 -1
- package/src/sap/ui/model/json/JSONModel.js +6 -1
- 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 +191 -5
- package/src/sap/ui/model/odata/ODataMetadata.js +38 -4
- package/src/sap/ui/model/odata/ODataModel.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 +1 -1
- 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 +1 -1
- package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
- package/src/sap/ui/model/odata/v2/ODataModel.js +2 -2
- package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
- package/src/sap/ui/model/odata/v4/AnnotationHelper.js +4 -4
- package/src/sap/ui/model/odata/v4/Context.js +33 -30
- package/src/sap/ui/model/odata/v4/ODataBinding.js +18 -14
- package/src/sap/ui/model/odata/v4/ODataContextBinding.js +12 -12
- package/src/sap/ui/model/odata/v4/ODataListBinding.js +110 -43
- package/src/sap/ui/model/odata/v4/ODataMetaModel.js +20 -28
- package/src/sap/ui/model/odata/v4/ODataModel.js +40 -31
- package/src/sap/ui/model/odata/v4/ODataParentBinding.js +8 -6
- package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +14 -14
- package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +93 -9
- package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +25 -27
- package/src/sap/ui/model/odata/v4/lib/_Cache.js +58 -195
- package/src/sap/ui/model/odata/v4/lib/_Helper.js +157 -0
- package/src/sap/ui/model/odata/v4/lib/_MetadataRequestor.js +14 -5
- package/src/sap/ui/model/odata/v4/lib/_Requestor.js +27 -15
- 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/qunit/utils/ControlIterator.js +1 -1
- package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
- package/src/sap/ui/test/TestUtils.js +1 -1
- package/src/sap/ui/test/generic/TestBase.js +1 -1
- package/src/sap/ui/test/generic/_EnforceSemanticRendering.js +1 -3
- package/src/sap/ui/test/matchers/_Visitor.js +6 -1
- package/src/sap/ui/test/starter/_setupAndStart.js +2 -5
- package/src/sap/ui/thirdparty/qunit-2.js +9 -3
- package/src/sap/ui/util/Mobile.js +10 -6
- package/src/sap/ui/util/Storage.js +1 -1
- package/src/sap-ui-boot.js +23 -6
- package/src/ui5-boot.js +50 -0
- package/src/ui5loader-autoconfig.js +147 -75
- package/src/ui5loader.js +320 -360
- package/test/sap/ui/core/Device.js +1 -1
- package/test/sap/ui/core/demokit/sample/OpaAction/applicationUnderTest/view/Main.view.xml +1 -0
- package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Template.controller.js +2 -2
- package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/AutoExpand.view.xml +24 -5
- package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Main.view.xml +24 -6
- package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.view.xml +20 -5
- package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.view.xml +4 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/GridTable.view.xml +12 -3
- package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Main.controller.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/Products/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +26 -8
- package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/data/metadata.xml +4 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/pages/Main.js +18 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/Create.js +10 -6
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/manifest.json +18 -0
- package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/pages/Main.js +4 -1
- package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/Opa.qunit.js +2 -1
- package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/controller/App.controller.js +1 -6
- package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/controller/App.controller.js +1 -6
- package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/controller/App.controller.js +1 -6
- package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/controller/App.controller.js +1 -6
- package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/controller/App.controller.js +3 -8
- package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/controller/App.controller.js +3 -8
- package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/localService/mockserver.js +1 -0
- package/test/sap/ui/core/qunit/IconPool.qunit.js +53 -4
- package/test/sap/ui/core/qunit/ManagedObjectModel.qunit.js +43 -5
- package/test/sap/ui/core/qunit/Theming.qunit.js +19 -1
- package/test/sap/ui/core/qunit/analytics/AnalyticalBinding.qunit.js +510 -185
- package/test/sap/ui/core/qunit/analytics/ODataModelAdapter.qunit.js +80 -10
- package/test/sap/ui/core/qunit/analytics/odata4analytics.qunit.js +20 -29
- package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +18 -1
- package/test/sap/ui/core/qunit/base/i18n/Formatting.qunit.js +15 -13
- package/test/sap/ui/core/qunit/base/i18n/Localization.qunit.js +35 -12
- package/test/sap/ui/core/qunit/bootstrap/Configuration.main.qunit.js +11 -0
- package/test/sap/ui/core/qunit/bootstrap/Configuration.qunit.html +4 -3
- package/test/sap/ui/core/qunit/bootstrap/Configuration.qunit.js +71 -35
- package/test/sap/ui/core/qunit/bootstrap/_checkCoreAndLibraryBooted.qunit.js +1 -1
- package/test/sap/ui/core/qunit/component/Models.qunit.js +5 -2
- package/test/sap/ui/core/qunit/generic/EnforceSemanticRendering.qunit.js +2 -2
- package/test/sap/ui/core/qunit/generic/SettersContextReturn.qunit.js +2 -2
- package/test/sap/ui/core/qunit/generic/legacy/SettersContextReturn.qunit.js +2 -2
- package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +48 -13
- package/test/sap/ui/core/qunit/i18n/UI5Date.qunit.js +16 -4
- package/test/sap/ui/core/qunit/i18n/UniversalDate.qunit.js +73 -103
- package/test/sap/ui/core/qunit/i18n/UniversalDateUtils.qunit.js +34 -39
- package/test/sap/ui/core/qunit/internal/BeforePush.ODataV4.js +28 -0
- package/test/sap/ui/core/qunit/internal/BeforePush.html +1 -0
- package/test/sap/ui/core/qunit/internal/BeforePush.js +15 -0
- package/test/sap/ui/core/qunit/internal/performance/ExpressionParser.performance.qunit.js +1 -0
- package/test/sap/ui/core/qunit/loader/asyncMode.qunit.js +2 -2
- package/test/sap/ui/core/qunit/loader/asyncMode_unavoidablySync.qunit.js +1 -1
- package/test/sap/ui/core/qunit/loader/testsuite.loader.qunit.js +0 -3
- package/test/sap/ui/core/qunit/model/FAR_CUSTOMER_LINE_ITEMS.metadata.xml +2 -0
- package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +51 -0
- package/test/sap/ui/core/qunit/mvc/testdata/Async.view.xml +1 -1
- package/test/sap/ui/core/qunit/mvc/testdata/AsyncTypedView.js +5 -1
- package/test/sap/ui/core/qunit/odata/ODataMetadataNoFakeService.qunit.js +68 -4
- package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +232 -37
- package/test/sap/ui/core/qunit/odata/v2/V2ODataModel.qunit.js +1 -1
- package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +10 -5
- package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +33 -1
- package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +5 -3
- package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +186 -65
- package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +17 -66
- package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +528 -60
- package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +48 -8
- package/test/sap/ui/core/qunit/odata/v4/ODataModel.realOData.qunit.js +0 -3
- package/test/sap/ui/core/qunit/odata/v4/data/metadata.json +2 -1
- package/test/sap/ui/core/qunit/odata/v4/data/metadata.xml +4 -0
- package/test/sap/ui/core/qunit/odata/v4/data/metadata_special_cases.xml +2 -0
- package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +148 -1
- package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +24 -11
- package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +196 -404
- package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +201 -2
- package/test/sap/ui/core/qunit/odata/v4/lib/_MetadataRequestor.qunit.js +7 -3
- package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +21 -4
- package/test/sap/ui/core/qunit/opa/matchers/LabelFor.qunit.js +4 -2
- package/test/sap/ui/core/qunit/opa/matchers/_Busy.qunit.js +129 -2
- package/test/sap/ui/core/qunit/opa/matchers/_Editable.qunit.js +5 -1
- package/test/sap/ui/core/qunit/routing/fixture/Async1.view.xml +1 -1
- package/test/sap/ui/core/qunit/testdata/xml-require/helper/Formatter.js +7 -4
- package/test/sap/ui/core/qunit/testdata/xml-require/view/XMLTemplateProcessorAsync_require_in_html.view.xml +36 -0
- package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +2 -2
- package/test/sap/ui/core/qunit/types/DateFormatTimezones.qunit.js +1222 -1201
- package/test/sap/ui/core/qunit/util/Popup.qunit.js +7 -11
- package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +3 -1
- package/test/sap/ui/core/qunit/util/jQuery.sap.Version.qunit.js +3 -0
- package/test/sap/ui/core/qunit/util/reflection/BaseTreeModifier.qunit.js +1 -1
- package/test/sap/ui/core/relnotes/changes-1.116.json +1 -12
- package/test/sap/ui/core/relnotes/changes-1.117.json +127 -0
- package/test/sap/ui/core/visual/images/HyphenationPlayground/windows/1600x1200/chrome/horizon/ltr/cozy/19_thirdParty_language_sl.ref.lnk +1 -1
- package/ui5.yaml +165 -0
- package/src/sap/ui/core/util/MockServerAnnotationsHandler.js +0 -45
- /package/test/sap/ui/core/qunit/bootstrap/{GlobalConfigurationSettings.js → Configuration.beforeBootstrap.qunit.js} +0 -0
|
@@ -98,7 +98,7 @@ sap.ui.define([
|
|
|
98
98
|
* @param {string} sTitle - A test title
|
|
99
99
|
* @param {object} assert - The QUnit assert object
|
|
100
100
|
* @param {sap.m.Table|sap.ui.table.Table} oTable - A table
|
|
101
|
-
* @param {string[]} aExpectedPaths - List of all expected current
|
|
101
|
+
* @param {string[]} aExpectedPaths - List of all expected (normalized) current context paths
|
|
102
102
|
* @param {any[][]} aExpectedContent - "Table" of expected cell contents
|
|
103
103
|
* @param {number} [iExpectedLength=aExpectedPaths.length] - Expected length
|
|
104
104
|
*/
|
|
@@ -110,7 +110,8 @@ sap.ui.define([
|
|
|
110
110
|
assert.strictEqual(oListBinding.isLengthFinal(), true, "length is final");
|
|
111
111
|
assert.strictEqual(oListBinding.getLength(), iExpectedLength || aExpectedPaths.length,
|
|
112
112
|
sTitle);
|
|
113
|
-
assert.deepEqual(oListBinding.getAllCurrentContexts().map(
|
|
113
|
+
assert.deepEqual(oListBinding.getAllCurrentContexts().map(getNormalizedPath),
|
|
114
|
+
aExpectedPaths);
|
|
114
115
|
|
|
115
116
|
aExpectedContent = aExpectedContent.map(function (aTexts) {
|
|
116
117
|
return aTexts.map(function (vText) {
|
|
@@ -5233,7 +5234,9 @@ sap.ui.define([
|
|
|
5233
5234
|
return Promise.all([
|
|
5234
5235
|
Promise.resolve().then(function () {
|
|
5235
5236
|
// code under test
|
|
5236
|
-
oTable.destroy();
|
|
5237
|
+
// Note: oTable.destroy(); not allowed for direct children of XMLView!
|
|
5238
|
+
that.oView.destroy();
|
|
5239
|
+
delete that.oView;
|
|
5237
5240
|
}),
|
|
5238
5241
|
that.waitForChanges(assert)
|
|
5239
5242
|
]);
|
|
@@ -8594,7 +8597,7 @@ sap.ui.define([
|
|
|
8594
8597
|
var oTable = that.oView.byId("table");
|
|
8595
8598
|
|
|
8596
8599
|
that.expectChange("note", ["bar", "foo"])
|
|
8597
|
-
.expectChange("companyName", [
|
|
8600
|
+
.expectChange("companyName", ["", "SAP"])
|
|
8598
8601
|
.expectChange("buyerID", ["24", "23"])
|
|
8599
8602
|
.expectChange("note", ["baz"]);
|
|
8600
8603
|
|
|
@@ -11100,11 +11103,11 @@ sap.ui.define([
|
|
|
11100
11103
|
}]
|
|
11101
11104
|
})
|
|
11102
11105
|
.expectChange("city", ["Walldorf"])
|
|
11103
|
-
.expectChange("longitude", [
|
|
11106
|
+
.expectChange("longitude", ["0.000000000000"]); // default value
|
|
11104
11107
|
|
|
11105
11108
|
return this.createView(assert, sView, oModel).then(function () {
|
|
11106
11109
|
that.expectChange("city", ["", "Walldorf"])
|
|
11107
|
-
.expectChange("longitude", ["0.000000000000"
|
|
11110
|
+
.expectChange("longitude", [, "0.000000000000"]);
|
|
11108
11111
|
|
|
11109
11112
|
oTable = that.oView.byId("table");
|
|
11110
11113
|
oTable.getBinding("items").create();
|
|
@@ -18207,9 +18210,7 @@ sap.ui.define([
|
|
|
18207
18210
|
method : "DELETE",
|
|
18208
18211
|
url : "BusinessPartnerList('0100000000')"
|
|
18209
18212
|
})
|
|
18210
|
-
//
|
|
18211
|
-
// explicit cache value for it, but the type's formatValue converts this to null.
|
|
18212
|
-
.expectChange("companyName", null)
|
|
18213
|
+
.expectChange("companyName", "") // defaulting to null in the cache
|
|
18213
18214
|
.expectChange("phoneNumber", null);
|
|
18214
18215
|
|
|
18215
18216
|
return Promise.all([
|
|
@@ -19236,6 +19237,72 @@ sap.ui.define([
|
|
|
19236
19237
|
});
|
|
19237
19238
|
});
|
|
19238
19239
|
|
|
19240
|
+
//*********************************************************************************************
|
|
19241
|
+
// Scenario: Deferred delete in a nested list w/o cache. Filter in the parent list, so that the
|
|
19242
|
+
// parent entity drops out. Then submit or reset (canceling the delete).
|
|
19243
|
+
// BCP: 2380081607
|
|
19244
|
+
[false, true].forEach(function (bReset) {
|
|
19245
|
+
QUnit.test("ODLB: no cache, deferred delete, parent lost, reset=" + bReset, function (assert) {
|
|
19246
|
+
var oDeletePromise,
|
|
19247
|
+
oModel = this.createTeaBusiModel({autoExpandSelect : true, updateGroupId : "update"}),
|
|
19248
|
+
sView = '\
|
|
19249
|
+
<Table id="teams" items="{/TEAMS}">\
|
|
19250
|
+
<Text id="team" text="{Team_Id}"/>\
|
|
19251
|
+
<Table items="{path : \'TEAM_2_EMPLOYEES\', templateShareable : true}">\
|
|
19252
|
+
<Text id="employee" text="{ID}"/>\
|
|
19253
|
+
</Table>\
|
|
19254
|
+
</Table>',
|
|
19255
|
+
that = this;
|
|
19256
|
+
|
|
19257
|
+
this.expectRequest("TEAMS?$select=Team_Id&$expand=TEAM_2_EMPLOYEES($select=ID)"
|
|
19258
|
+
+ "&$skip=0&$top=100", {
|
|
19259
|
+
value : [{
|
|
19260
|
+
Team_Id : "TEAM_1",
|
|
19261
|
+
TEAM_2_EMPLOYEES : [{ID : "1"}, {ID : "2"}]
|
|
19262
|
+
}]
|
|
19263
|
+
})
|
|
19264
|
+
.expectChange("team", ["TEAM_1"])
|
|
19265
|
+
.expectChange("employee", ["1", "2"]);
|
|
19266
|
+
|
|
19267
|
+
return this.createView(assert, sView, oModel).then(function () {
|
|
19268
|
+
that.expectChange("employee", ["2"]);
|
|
19269
|
+
|
|
19270
|
+
oDeletePromise = that.oView.byId("teams").getItems()[0].getCells()[1]
|
|
19271
|
+
.getBinding("items").getCurrentContexts()[0].delete();
|
|
19272
|
+
|
|
19273
|
+
return that.waitForChanges(assert);
|
|
19274
|
+
}).then(function () {
|
|
19275
|
+
that.expectRequest("TEAMS?$select=Team_Id&$expand=TEAM_2_EMPLOYEES($select=ID)"
|
|
19276
|
+
+ "&$filter=Team_Id ne '1'&$skip=0&$top=100", {value : []});
|
|
19277
|
+
|
|
19278
|
+
that.oView.byId("teams").getBinding("items")
|
|
19279
|
+
.filter(new Filter("Team_Id", FilterOperator.NE, "1"));
|
|
19280
|
+
|
|
19281
|
+
return that.waitForChanges(assert);
|
|
19282
|
+
}).then(function () {
|
|
19283
|
+
if (bReset) {
|
|
19284
|
+
that.expectCanceledError("Failed to delete /TEAMS('TEAM_1')/TEAM_2_EMPLOYEES('1')",
|
|
19285
|
+
"Request canceled: DELETE EMPLOYEES('1'); group: update");
|
|
19286
|
+
|
|
19287
|
+
oModel.resetChanges();
|
|
19288
|
+
} else {
|
|
19289
|
+
that.expectRequest("DELETE EMPLOYEES('1')");
|
|
19290
|
+
}
|
|
19291
|
+
|
|
19292
|
+
return Promise.all([
|
|
19293
|
+
oModel.submitBatch("update"),
|
|
19294
|
+
oDeletePromise.then(function () {
|
|
19295
|
+
assert.notOk(bReset);
|
|
19296
|
+
}, function (oError) {
|
|
19297
|
+
assert.ok(bReset);
|
|
19298
|
+
assert.ok(oError.canceled);
|
|
19299
|
+
}),
|
|
19300
|
+
that.waitForChanges(assert)
|
|
19301
|
+
]);
|
|
19302
|
+
});
|
|
19303
|
+
});
|
|
19304
|
+
});
|
|
19305
|
+
|
|
19239
19306
|
//*********************************************************************************************
|
|
19240
19307
|
// Scenario: Create and persist two contexts using "end of start". Delete one via API group and
|
|
19241
19308
|
// the other one via $auto (to see that we must react on the last deletion). Create a third
|
|
@@ -19376,6 +19443,7 @@ sap.ui.define([
|
|
|
19376
19443
|
}).then(function (aResult) {
|
|
19377
19444
|
oPromise = aResult[0].delete(); // delete the RVC
|
|
19378
19445
|
|
|
19446
|
+
// It's not possible to synchronously reset after delete, so wait a short moment.
|
|
19379
19447
|
return that.waitForChanges(assert, "deferred delete");
|
|
19380
19448
|
}).then(function () {
|
|
19381
19449
|
that.expectCanceledError(
|
|
@@ -24496,8 +24564,8 @@ sap.ui.define([
|
|
|
24496
24564
|
return that.oView.byId("table").getItems()[0].getBindingContext()
|
|
24497
24565
|
.requestSideEffects([{$PropertyPath : "Country"}])
|
|
24498
24566
|
.then(mustFail(assert), function (oError) {
|
|
24499
|
-
assert.strictEqual(oError.message,
|
|
24500
|
-
|
|
24567
|
+
assert.strictEqual(oError.message,
|
|
24568
|
+
"Must not request side effects when using data aggregation");
|
|
24501
24569
|
});
|
|
24502
24570
|
});
|
|
24503
24571
|
});
|
|
@@ -24650,7 +24718,7 @@ sap.ui.define([
|
|
|
24650
24718
|
that.expectChange("count", "1");
|
|
24651
24719
|
|
|
24652
24720
|
// code under test
|
|
24653
|
-
that.oView.byId("count").setBindingContext(
|
|
24721
|
+
that.oView.byId("count").setBindingContext(oHeaderContext);
|
|
24654
24722
|
|
|
24655
24723
|
return that.waitForChanges(assert, "$count");
|
|
24656
24724
|
}).then(function () {
|
|
@@ -24752,11 +24820,6 @@ sap.ui.define([
|
|
|
24752
24820
|
]);
|
|
24753
24821
|
assert.strictEqual(oListBinding.getCount(), 1, "count of nodes"); // code under test
|
|
24754
24822
|
|
|
24755
|
-
assert.throws(function () {
|
|
24756
|
-
// code under test (JIRA: CPOUI5ODATAV4-1851)
|
|
24757
|
-
oListBinding.create();
|
|
24758
|
-
}, new Error("Cannot create in " + oListBinding + " when using data aggregation"));
|
|
24759
|
-
|
|
24760
24823
|
assert.throws(function () {
|
|
24761
24824
|
// code under test (JIRA: CPOUI5ODATAV4-1851)
|
|
24762
24825
|
oRoot.delete();
|
|
@@ -24936,7 +24999,7 @@ sap.ui.define([
|
|
|
24936
24999
|
return Promise.all([
|
|
24937
25000
|
// code under test
|
|
24938
25001
|
// Note: $direct avoids "HTTP request was not processed because $batch failed"
|
|
24939
|
-
|
|
25002
|
+
oHeaderContext.requestSideEffects([""], "$direct")
|
|
24940
25003
|
.then(mustFail(assert), function (oError0) {
|
|
24941
25004
|
assert.strictEqual(oError0, oError);
|
|
24942
25005
|
}),
|
|
@@ -27411,6 +27474,175 @@ sap.ui.define([
|
|
|
27411
27474
|
});
|
|
27412
27475
|
});
|
|
27413
27476
|
|
|
27477
|
+
//*********************************************************************************************
|
|
27478
|
+
// Scenario: Show the single root node of a recursive hierarchy, which happens to be a leaf.
|
|
27479
|
+
// Create two new child nodes underneath.
|
|
27480
|
+
// Note: The "_Friend" navigation property is misused in order to have an artist play the role
|
|
27481
|
+
// of a hierarchy directory. This way, a draft root object is available (as needed by real
|
|
27482
|
+
// services).
|
|
27483
|
+
// JIRA: CPOUI5ODATAV4-1592
|
|
27484
|
+
QUnit.test("Recursive Hierarchy: create new children", function (assert) {
|
|
27485
|
+
var oChild, oListBinding, fnRespond, oRoot, oTable;
|
|
27486
|
+
|
|
27487
|
+
const oModel = this.createSpecialCasesModel({autoExpandSelect : true});
|
|
27488
|
+
const sFriend = "/Artists(ArtistID='99',IsActiveEntity=false)/_Friend";
|
|
27489
|
+
const sView = `
|
|
27490
|
+
<t:Table id="table" rows="{path : '/Artists(ArtistID=\\\'99\\\',IsActiveEntity=false)/_Friend',
|
|
27491
|
+
parameters : {
|
|
27492
|
+
$$aggregation : {
|
|
27493
|
+
hierarchyQualifier : 'OrgChart'
|
|
27494
|
+
}
|
|
27495
|
+
}}" threshold="0" visibleRowCount="3">
|
|
27496
|
+
<Text text="{= %{@$ui5.node.isExpanded} }"/>
|
|
27497
|
+
<Text text="{= %{@$ui5.node.level} }"/>
|
|
27498
|
+
<Text id="name" text="{Name}"/>
|
|
27499
|
+
</t:Table>`;
|
|
27500
|
+
const that = this;
|
|
27501
|
+
|
|
27502
|
+
this.expectRequest({
|
|
27503
|
+
batchNo : 1,
|
|
27504
|
+
url : sFriend.slice(1) + "?$apply=com.sap.vocabularies.Hierarchy.v1.TopLevels("
|
|
27505
|
+
+ "HierarchyNodes=$root" + sFriend
|
|
27506
|
+
+ ",HierarchyQualifier='OrgChart',NodeProperty='_/NodeID',Levels=1)"
|
|
27507
|
+
+ "&$select=ArtistID,IsActiveEntity,Name,_/DrillState,_/NodeID"
|
|
27508
|
+
+ "&$count=true&$skip=0&$top=3"
|
|
27509
|
+
}, {
|
|
27510
|
+
"@odata.count" : "1",
|
|
27511
|
+
value : [{
|
|
27512
|
+
ArtistID : "0",
|
|
27513
|
+
IsActiveEntity : false,
|
|
27514
|
+
Name : "Alpha",
|
|
27515
|
+
_ : {
|
|
27516
|
+
// DescendantCount : "0", // not needed w/o expandTo
|
|
27517
|
+
// DistanceFromRoot : "0", // not needed w/o expandTo
|
|
27518
|
+
DrillState : "leaf",
|
|
27519
|
+
NodeID : "0,false"
|
|
27520
|
+
}
|
|
27521
|
+
}]
|
|
27522
|
+
})
|
|
27523
|
+
.expectChange("name", ["Alpha"]);
|
|
27524
|
+
|
|
27525
|
+
return this.createView(assert, sView, oModel).then(function () {
|
|
27526
|
+
oTable = that.oView.byId("table");
|
|
27527
|
+
oRoot = oTable.getRows()[0].getBindingContext();
|
|
27528
|
+
oListBinding = oRoot.getBinding();
|
|
27529
|
+
|
|
27530
|
+
checkTable("root is leaf", assert, oTable, [
|
|
27531
|
+
sFriend + "(ArtistID='0',IsActiveEntity=false)"
|
|
27532
|
+
], [
|
|
27533
|
+
[undefined, 1, "Alpha"],
|
|
27534
|
+
["", "", ""],
|
|
27535
|
+
["", "", ""]
|
|
27536
|
+
]);
|
|
27537
|
+
assert.strictEqual(oRoot.getIndex(), 0);
|
|
27538
|
+
|
|
27539
|
+
assert.throws(function () {
|
|
27540
|
+
// code under test (missing "@$ui5.node.parent")
|
|
27541
|
+
oListBinding.create({}, /*bSkipRefresh*/true);
|
|
27542
|
+
}); // TypeError: Cannot read properties of undefined (reading 'getCanonicalPath')
|
|
27543
|
+
|
|
27544
|
+
that.expectChange("name", [, "Beta"])
|
|
27545
|
+
.expectRequest({
|
|
27546
|
+
method : "POST",
|
|
27547
|
+
url : sFriend.slice(1),
|
|
27548
|
+
payload : {
|
|
27549
|
+
"BestFriend@odata.bind" : "Artists(ArtistID='0',IsActiveEntity=false)",
|
|
27550
|
+
Name : "Beta"
|
|
27551
|
+
}
|
|
27552
|
+
}, new Promise(function (resolve) {
|
|
27553
|
+
fnRespond = resolve.bind(null, {
|
|
27554
|
+
"@odata.etag" : "etag1.0",
|
|
27555
|
+
ArtistID : "1",
|
|
27556
|
+
IsActiveEntity : false,
|
|
27557
|
+
Name : "Beta: β" // side effect
|
|
27558
|
+
});
|
|
27559
|
+
}));
|
|
27560
|
+
|
|
27561
|
+
// code under test
|
|
27562
|
+
oChild = oListBinding.create({
|
|
27563
|
+
"@$ui5.node.parent" : oRoot,
|
|
27564
|
+
Name : "Beta"
|
|
27565
|
+
}, /*bSkipRefresh*/true);
|
|
27566
|
+
|
|
27567
|
+
return that.waitForChanges(assert, "create 1st child");
|
|
27568
|
+
}).then(function () {
|
|
27569
|
+
checkTable("during creation", assert, oTable, [
|
|
27570
|
+
sFriend + "(ArtistID='0',IsActiveEntity=false)",
|
|
27571
|
+
sFriend + "($uid=...)"
|
|
27572
|
+
], [
|
|
27573
|
+
[true, 1, "Alpha"],
|
|
27574
|
+
[undefined, 2, "Beta"],
|
|
27575
|
+
["", "", ""]
|
|
27576
|
+
]);
|
|
27577
|
+
assert.strictEqual(oChild.getIndex(), 1);
|
|
27578
|
+
|
|
27579
|
+
that.expectChange("name", [, "Beta: β"]);
|
|
27580
|
+
|
|
27581
|
+
fnRespond();
|
|
27582
|
+
|
|
27583
|
+
return Promise.all([
|
|
27584
|
+
oChild.created(),
|
|
27585
|
+
that.waitForChanges(assert, "respond")
|
|
27586
|
+
]);
|
|
27587
|
+
}).then(function () {
|
|
27588
|
+
checkTable("after creation", assert, oTable, [
|
|
27589
|
+
sFriend + "(ArtistID='0',IsActiveEntity=false)",
|
|
27590
|
+
sFriend + "(ArtistID='1',IsActiveEntity=false)"
|
|
27591
|
+
], [
|
|
27592
|
+
[true, 1, "Alpha"],
|
|
27593
|
+
[undefined, 2, "Beta: β"],
|
|
27594
|
+
["", "", ""]
|
|
27595
|
+
]);
|
|
27596
|
+
assert.strictEqual(oChild.getIndex(), 1);
|
|
27597
|
+
assert.deepEqual(oChild.getObject(), {
|
|
27598
|
+
"@$ui5.context.isTransient" : false,
|
|
27599
|
+
"@$ui5.node.level" : 2,
|
|
27600
|
+
"@odata.etag" : "etag1.0",
|
|
27601
|
+
ArtistID : "1",
|
|
27602
|
+
IsActiveEntity : false,
|
|
27603
|
+
Name : "Beta: β"
|
|
27604
|
+
});
|
|
27605
|
+
|
|
27606
|
+
that.expectChange("name", [, "Gamma", "Beta: β"])
|
|
27607
|
+
.expectRequest({
|
|
27608
|
+
method : "POST",
|
|
27609
|
+
url : sFriend.slice(1),
|
|
27610
|
+
payload : {
|
|
27611
|
+
"BestFriend@odata.bind" : "Artists(ArtistID='0',IsActiveEntity=false)",
|
|
27612
|
+
Name : "Gamma"
|
|
27613
|
+
}
|
|
27614
|
+
}, {
|
|
27615
|
+
ArtistID : "2",
|
|
27616
|
+
IsActiveEntity : false,
|
|
27617
|
+
Name : "Gamma: γ" // side effect
|
|
27618
|
+
})
|
|
27619
|
+
.expectChange("name", [, "Gamma: γ"]);
|
|
27620
|
+
|
|
27621
|
+
// code under test
|
|
27622
|
+
oChild = oListBinding.create({
|
|
27623
|
+
"@$ui5.node.parent" : oRoot,
|
|
27624
|
+
Name : "Gamma"
|
|
27625
|
+
}, /*bSkipRefresh*/true);
|
|
27626
|
+
|
|
27627
|
+
assert.strictEqual(oChild.getIndex(), 1);
|
|
27628
|
+
|
|
27629
|
+
return Promise.all([
|
|
27630
|
+
oChild.created(),
|
|
27631
|
+
that.waitForChanges(assert, "create 2nd child")
|
|
27632
|
+
]);
|
|
27633
|
+
}).then(function () {
|
|
27634
|
+
checkTable("after creation", assert, oTable, [
|
|
27635
|
+
sFriend + "(ArtistID='0',IsActiveEntity=false)",
|
|
27636
|
+
sFriend + "(ArtistID='2',IsActiveEntity=false)",
|
|
27637
|
+
sFriend + "(ArtistID='1',IsActiveEntity=false)"
|
|
27638
|
+
], [
|
|
27639
|
+
[true, 1, "Alpha"],
|
|
27640
|
+
[undefined, 2, "Gamma: γ"],
|
|
27641
|
+
[undefined, 2, "Beta: β"]
|
|
27642
|
+
]);
|
|
27643
|
+
});
|
|
27644
|
+
});
|
|
27645
|
+
|
|
27414
27646
|
//*********************************************************************************************
|
|
27415
27647
|
// Scenario: Application tries to overwrite client-side instance annotations.
|
|
27416
27648
|
// JIRA: CPOUI5UISERVICESV3-1220
|
|
@@ -28686,8 +28918,7 @@ sap.ui.define([
|
|
|
28686
28918
|
undefined, undefined, {$$updateGroupId : "doNotSubmit"}).create();
|
|
28687
28919
|
oCreationRowContext.setProperty("Price", "47"); // BCP: 2270087626
|
|
28688
28920
|
|
|
28689
|
-
that.expectChange("price",
|
|
28690
|
-
.expectChange("price", "47")
|
|
28921
|
+
that.expectChange("price", "47")
|
|
28691
28922
|
.expectChange("artistName", "The Beatles (modified)");
|
|
28692
28923
|
|
|
28693
28924
|
oCreationRow.setBindingContext(oCreationRowContext);
|
|
@@ -29375,7 +29606,7 @@ sap.ui.define([
|
|
|
29375
29606
|
.expectChange("id", "42")
|
|
29376
29607
|
.expectChange("isActive", "Yes")
|
|
29377
29608
|
.expectChange("name", "Hour Frustrated")
|
|
29378
|
-
.expectChange("inProcessByUser",
|
|
29609
|
+
.expectChange("inProcessByUser", ""); // initialization due to #setContext
|
|
29379
29610
|
|
|
29380
29611
|
that.oView.setBindingContext(
|
|
29381
29612
|
oModel.bindContext("/Artists(ArtistID='42',IsActiveEntity=true)", null,
|
|
@@ -32291,7 +32522,7 @@ sap.ui.define([
|
|
|
32291
32522
|
SalesOrderID : "1",
|
|
32292
32523
|
SO_2_BP : null
|
|
32293
32524
|
})
|
|
32294
|
-
.expectChange("company",
|
|
32525
|
+
.expectChange("company", "");
|
|
32295
32526
|
|
|
32296
32527
|
return this.createView(assert, sView, oModel).then(function () {
|
|
32297
32528
|
that.expectRequest("SalesOrderList('1')?$select=SO_2_BP"
|
|
@@ -32326,7 +32557,7 @@ sap.ui.define([
|
|
|
32326
32557
|
+ "&$expand=SO_2_BP($select=BusinessPartnerID,CompanyName)", {
|
|
32327
32558
|
SO_2_BP : null
|
|
32328
32559
|
})
|
|
32329
|
-
.expectChange("company",
|
|
32560
|
+
.expectChange("company", "");
|
|
32330
32561
|
|
|
32331
32562
|
return Promise.all([
|
|
32332
32563
|
// code under test
|
|
@@ -32740,7 +32971,8 @@ sap.ui.define([
|
|
|
32740
32971
|
}]
|
|
32741
32972
|
})
|
|
32742
32973
|
.expectChange("price", [,,,,,,, "7.77", "7.88"])
|
|
32743
|
-
.expectChange("currency", [,,,,,,, "EUR", "EUR"])
|
|
32974
|
+
.expectChange("currency", [,,,,,,, "EUR", "EUR"])
|
|
32975
|
+
.expectChange("inProcessByUser", [,,,,,,, "", ""]);
|
|
32744
32976
|
|
|
32745
32977
|
oTable.setFirstVisibleRow(7);
|
|
32746
32978
|
|
|
@@ -36094,7 +36326,7 @@ sap.ui.define([
|
|
|
36094
36326
|
// are formatted differently by sap.ui.model.odata.type.String#formatValue
|
|
36095
36327
|
.expectChange("position", ["", "10"])
|
|
36096
36328
|
.expectChange("quantity", [null, "7.000"])
|
|
36097
|
-
.expectChange("product", [
|
|
36329
|
+
.expectChange("product", ["", "2"])
|
|
36098
36330
|
.expectChange("position", ["20"])
|
|
36099
36331
|
.expectChange("quantity", ["0.000"])
|
|
36100
36332
|
.expectChange("product", ["3"])
|
|
@@ -37945,8 +38177,8 @@ sap.ui.define([
|
|
|
37945
38177
|
BusinessPartnerId : "1",
|
|
37946
38178
|
CompanyName : "SAP"
|
|
37947
38179
|
})
|
|
37948
|
-
.expectChange("city", [
|
|
37949
|
-
.expectChange("type", [
|
|
38180
|
+
.expectChange("city", [""])
|
|
38181
|
+
.expectChange("type", [""])
|
|
37950
38182
|
.expectChange("company", ["SAP"]);
|
|
37951
38183
|
|
|
37952
38184
|
return Promise.all([
|
|
@@ -39597,7 +39829,7 @@ sap.ui.define([
|
|
|
39597
39829
|
})
|
|
39598
39830
|
.expectChange("budget", "1,234")
|
|
39599
39831
|
.expectChange("name", "Team #1")
|
|
39600
|
-
.expectChange("teamId",
|
|
39832
|
+
.expectChange("teamId", "");
|
|
39601
39833
|
|
|
39602
39834
|
return this.createView(assert, sView, oModel).then(function () {
|
|
39603
39835
|
oBinding = that.oView.byId("form").getObjectBinding();
|
|
@@ -39666,7 +39898,7 @@ sap.ui.define([
|
|
|
39666
39898
|
TEAM_2_MANAGER : null
|
|
39667
39899
|
})
|
|
39668
39900
|
.expectChange("budget", "1,234")
|
|
39669
|
-
.expectChange("teamId",
|
|
39901
|
+
.expectChange("teamId", "");
|
|
39670
39902
|
|
|
39671
39903
|
oBinding.refresh();
|
|
39672
39904
|
|
|
@@ -43716,7 +43948,7 @@ sap.ui.define([
|
|
|
43716
43948
|
|
|
43717
43949
|
return this.createView(assert, sView, oModel).then(function () {
|
|
43718
43950
|
that.expectChange("name", ["John Doe"])
|
|
43719
|
-
.expectChange("teamId", [
|
|
43951
|
+
.expectChange("teamId", [""]);
|
|
43720
43952
|
|
|
43721
43953
|
// code under test
|
|
43722
43954
|
oContext = that.oView.byId("employees").getBinding("items")
|
|
@@ -49527,6 +49759,8 @@ sap.ui.define([
|
|
|
49527
49759
|
// The response has fewer nested entities in different order (CPOUI5ODATAV4-2079)
|
|
49528
49760
|
// Nested entities via initial data and via #create (CPOUI5ODATAV4-2036)
|
|
49529
49761
|
// Optimize the refresh after create w/o bSkipRefresh (CPOUI5ODATAV4-2048)
|
|
49762
|
+
// Accept the complete response, not only $select (esp. GrossAmount) (CPOUI5ODATAV4-1977)
|
|
49763
|
+
// Also create the product (nested single below collection) (CPOUI5ODATAV4-1977)
|
|
49530
49764
|
[false, true].forEach(function (bSkipRefresh) {
|
|
49531
49765
|
var sTitle = "CPOUI5ODATAV4-1973: Deep create, nested ODLB w/o cache, bSkipRefresh="
|
|
49532
49766
|
+ bSkipRefresh;
|
|
@@ -49542,26 +49776,33 @@ sap.ui.define([
|
|
|
49542
49776
|
<Text id="order" text="{SalesOrderID}"/>\
|
|
49543
49777
|
<Table items="{path : \'SO_2_SOITEM\', templateShareable : true}">\
|
|
49544
49778
|
<Input id="note" value="{Note}"/>\
|
|
49779
|
+
<Text id="productId" text="{SOITEM_2_PRODUCT/ProductID}"/>\
|
|
49780
|
+
<Input id="productName" value="{SOITEM_2_PRODUCT/Name}"/>\
|
|
49545
49781
|
</Table>\
|
|
49546
49782
|
</Table>',
|
|
49547
49783
|
that = this;
|
|
49548
49784
|
|
|
49549
49785
|
this.expectRequest("SalesOrderList?$select=SalesOrderID"
|
|
49550
|
-
+ "&$expand=SO_2_SOITEM($select=ItemPosition,Note,SalesOrderID
|
|
49786
|
+
+ "&$expand=SO_2_SOITEM($select=ItemPosition,Note,SalesOrderID"
|
|
49787
|
+
+ ";$expand=SOITEM_2_PRODUCT($select=Name,ProductID))&$skip=0&$top=100",
|
|
49551
49788
|
{value : []})
|
|
49552
49789
|
.expectChange("order", [])
|
|
49553
|
-
.expectChange("note", [])
|
|
49790
|
+
.expectChange("note", [])
|
|
49791
|
+
.expectChange("productId", [])
|
|
49792
|
+
.expectChange("productName", []);
|
|
49554
49793
|
|
|
49555
49794
|
return this.createView(assert, sView, oModel).then(function () {
|
|
49556
49795
|
that.expectChange("order", [""])
|
|
49557
|
-
.expectChange("note", ["A", "B"])
|
|
49796
|
+
.expectChange("note", ["A", "B"])
|
|
49797
|
+
.expectChange("productId", ["", ""])
|
|
49798
|
+
.expectChange("productName", ["PA", ""]);
|
|
49558
49799
|
|
|
49559
49800
|
oOrdersBinding = that.oView.byId("orders").getBinding("items");
|
|
49560
49801
|
|
|
49561
49802
|
// code under test
|
|
49562
49803
|
oCreatedOrderContext = oOrdersBinding.create({
|
|
49563
49804
|
SO_2_SOITEM : [
|
|
49564
|
-
{Note : "A"},
|
|
49805
|
+
{Note : "A", SOITEM_2_PRODUCT : {Name : "PA"}},
|
|
49565
49806
|
{Note : "B"}
|
|
49566
49807
|
]
|
|
49567
49808
|
}, bSkipRefresh);
|
|
@@ -49575,7 +49816,10 @@ sap.ui.define([
|
|
|
49575
49816
|
aContexts = oItemsBinding.getCurrentContexts();
|
|
49576
49817
|
assert.deepEqual(aContexts.map(getObject), [{
|
|
49577
49818
|
"@$ui5.context.isTransient" : true,
|
|
49578
|
-
Note : "A"
|
|
49819
|
+
Note : "A",
|
|
49820
|
+
SOITEM_2_PRODUCT : {
|
|
49821
|
+
Name : "PA"
|
|
49822
|
+
}
|
|
49579
49823
|
}, {
|
|
49580
49824
|
"@$ui5.context.isTransient" : true,
|
|
49581
49825
|
Note : "B"
|
|
@@ -49584,19 +49828,28 @@ sap.ui.define([
|
|
|
49584
49828
|
assert.strictEqual(oContext.isTransient(), true);
|
|
49585
49829
|
});
|
|
49586
49830
|
|
|
49587
|
-
that.expectChange("note", [,, "C", "D"])
|
|
49831
|
+
that.expectChange("note", [,, "C", "D"])
|
|
49832
|
+
.expectChange("productId", [,, "", ""])
|
|
49833
|
+
.expectChange("productName", [, "PB", "", ""]);
|
|
49588
49834
|
|
|
49589
49835
|
// code under test
|
|
49836
|
+
aContexts[1].setProperty("SOITEM_2_PRODUCT/Name", "PB");
|
|
49590
49837
|
oItemsBinding.create({Note : "C"}, false, true); // at end
|
|
49591
49838
|
oItemsBinding.create({Note : "D"}, false, true); // at end
|
|
49592
49839
|
|
|
49593
49840
|
aContexts = oItemsBinding.getCurrentContexts();
|
|
49594
49841
|
assert.deepEqual(aContexts.map(getObject), [{
|
|
49595
49842
|
"@$ui5.context.isTransient" : true,
|
|
49596
|
-
Note : "A"
|
|
49843
|
+
Note : "A",
|
|
49844
|
+
SOITEM_2_PRODUCT : {
|
|
49845
|
+
Name : "PA"
|
|
49846
|
+
}
|
|
49597
49847
|
}, {
|
|
49598
49848
|
"@$ui5.context.isTransient" : true,
|
|
49599
|
-
Note : "B"
|
|
49849
|
+
Note : "B",
|
|
49850
|
+
SOITEM_2_PRODUCT : {
|
|
49851
|
+
Name : "PB"
|
|
49852
|
+
}
|
|
49600
49853
|
}, {
|
|
49601
49854
|
"@$ui5.context.isTransient" : true,
|
|
49602
49855
|
Note : "C"
|
|
@@ -49636,38 +49889,52 @@ sap.ui.define([
|
|
|
49636
49889
|
url : "SalesOrderList",
|
|
49637
49890
|
payload : {
|
|
49638
49891
|
SO_2_SOITEM : [
|
|
49639
|
-
{Note : "AA"},
|
|
49640
|
-
{Note : "BB"},
|
|
49892
|
+
{Note : "AA", SOITEM_2_PRODUCT : {Name : "PA"}},
|
|
49893
|
+
{Note : "BB", SOITEM_2_PRODUCT : {Name : "PB"}},
|
|
49641
49894
|
{Note : "CC"},
|
|
49642
49895
|
{Note : "DD"}
|
|
49643
49896
|
]
|
|
49644
49897
|
}
|
|
49645
49898
|
}, {
|
|
49646
49899
|
"@odata.etag" : "etag",
|
|
49900
|
+
GrossAmount : "128.97",
|
|
49647
49901
|
SalesOrderID : "new",
|
|
49648
49902
|
SO_2_SOITEM : [{
|
|
49649
49903
|
"@odata.etag" : "etag10",
|
|
49650
|
-
GrossAmount : "
|
|
49904
|
+
GrossAmount : "41.99",
|
|
49651
49905
|
ItemPosition : "0010",
|
|
49652
49906
|
Note : "AAA",
|
|
49653
|
-
SalesOrderID : "new"
|
|
49907
|
+
SalesOrderID : "new",
|
|
49908
|
+
SOITEM_2_PRODUCT : {
|
|
49909
|
+
"@odata.etag" : "etagP1",
|
|
49910
|
+
Name : "PA",
|
|
49911
|
+
ProductID : "P1"
|
|
49912
|
+
}
|
|
49654
49913
|
}, {
|
|
49655
49914
|
"@odata.etag" : "etag20",
|
|
49656
|
-
GrossAmount : "42.99",
|
|
49915
|
+
GrossAmount : "42.99",
|
|
49657
49916
|
ItemPosition : "0020",
|
|
49658
49917
|
Note : "CCC",
|
|
49659
|
-
SalesOrderID : "new"
|
|
49918
|
+
SalesOrderID : "new",
|
|
49919
|
+
SOITEM_2_PRODUCT : null
|
|
49660
49920
|
}, {
|
|
49661
49921
|
"@odata.etag" : "etag30",
|
|
49662
|
-
GrossAmount : "
|
|
49922
|
+
GrossAmount : "43.99",
|
|
49663
49923
|
ItemPosition : "0030",
|
|
49664
49924
|
Note : "BBB",
|
|
49665
|
-
SalesOrderID : "new"
|
|
49925
|
+
SalesOrderID : "new",
|
|
49926
|
+
SOITEM_2_PRODUCT : {
|
|
49927
|
+
"@odata.etag" : "etagP2",
|
|
49928
|
+
Name : "PB",
|
|
49929
|
+
ProductID : "P2"
|
|
49930
|
+
}
|
|
49666
49931
|
}]
|
|
49667
49932
|
})
|
|
49668
49933
|
// optimized refresh: even w/o bSkipRefresh nothing is requested
|
|
49669
49934
|
.expectChange("order", ["new"])
|
|
49670
|
-
.expectChange("note", ["AAA", "CCC", "BBB"])
|
|
49935
|
+
.expectChange("note", ["AAA", "CCC", "BBB"])
|
|
49936
|
+
.expectChange("productId", ["P1", , "P2"])
|
|
49937
|
+
.expectChange("productName", [, "", "PB"]);
|
|
49671
49938
|
|
|
49672
49939
|
that.expectCanceledError(
|
|
49673
49940
|
"Deep create of SalesOrderList succeeded. Do not use this promise.")
|
|
@@ -49687,8 +49954,8 @@ sap.ui.define([
|
|
|
49687
49954
|
that.waitForChanges(assert, "submit POST")
|
|
49688
49955
|
].flat());
|
|
49689
49956
|
}).then(function () {
|
|
49690
|
-
|
|
49691
|
-
|
|
49957
|
+
assert.strictEqual(oCreatedOrderContext.getProperty("GrossAmount"), "128.97");
|
|
49958
|
+
const aContexts = oItemsBinding.getAllCurrentContexts();
|
|
49692
49959
|
assert.deepEqual(aContexts.map(getPath), [
|
|
49693
49960
|
"/SalesOrderList('new')/SO_2_SOITEM(SalesOrderID='new',ItemPosition='0010')",
|
|
49694
49961
|
"/SalesOrderList('new')/SO_2_SOITEM(SalesOrderID='new',ItemPosition='0020')",
|
|
@@ -49696,19 +49963,33 @@ sap.ui.define([
|
|
|
49696
49963
|
]);
|
|
49697
49964
|
assert.deepEqual(aContexts.map(getObject), [{
|
|
49698
49965
|
"@odata.etag" : "etag10",
|
|
49966
|
+
GrossAmount : "41.99",
|
|
49699
49967
|
ItemPosition : "0010",
|
|
49700
49968
|
Note : "AAA",
|
|
49701
|
-
SalesOrderID : "new"
|
|
49969
|
+
SalesOrderID : "new",
|
|
49970
|
+
SOITEM_2_PRODUCT : {
|
|
49971
|
+
"@odata.etag" : "etagP1",
|
|
49972
|
+
Name : "PA",
|
|
49973
|
+
ProductID : "P1"
|
|
49974
|
+
}
|
|
49702
49975
|
}, {
|
|
49703
49976
|
"@odata.etag" : "etag20",
|
|
49977
|
+
GrossAmount : "42.99",
|
|
49704
49978
|
ItemPosition : "0020",
|
|
49705
49979
|
Note : "CCC",
|
|
49706
|
-
SalesOrderID : "new"
|
|
49980
|
+
SalesOrderID : "new",
|
|
49981
|
+
SOITEM_2_PRODUCT : null
|
|
49707
49982
|
}, {
|
|
49708
49983
|
"@odata.etag" : "etag30",
|
|
49984
|
+
GrossAmount : "43.99",
|
|
49709
49985
|
ItemPosition : "0030",
|
|
49710
49986
|
Note : "BBB",
|
|
49711
|
-
SalesOrderID : "new"
|
|
49987
|
+
SalesOrderID : "new",
|
|
49988
|
+
SOITEM_2_PRODUCT : {
|
|
49989
|
+
"@odata.etag" : "etagP2",
|
|
49990
|
+
Name : "PB",
|
|
49991
|
+
ProductID : "P2"
|
|
49992
|
+
}
|
|
49712
49993
|
}]);
|
|
49713
49994
|
|
|
49714
49995
|
that.expectChange("note", ["AAAA"])
|
|
@@ -49748,6 +50029,8 @@ sap.ui.define([
|
|
|
49748
50029
|
// response, and the item a $expand to the Product. Also check that the
|
|
49749
50030
|
// @$ui5.context.isTransient annotation fires all change events.
|
|
49750
50031
|
// CPOUI5ODATAV4-2048
|
|
50032
|
+
//
|
|
50033
|
+
// Accept the complete response, not only $select (esp. GrossAmount) (CPOUI5ODATAV4-1977)
|
|
49751
50034
|
[false, true].forEach(function (bSkipRefresh) {
|
|
49752
50035
|
var sTitle = "CPOUI5ODATAV4-2033: Deep create, nested ODLB w/ own cache, bSkipRefresh="
|
|
49753
50036
|
+ bSkipRefresh;
|
|
@@ -49795,7 +50078,7 @@ sap.ui.define([
|
|
|
49795
50078
|
return this.createView(assert, sView, oModel).then(function () {
|
|
49796
50079
|
that.expectChange("isTransient", [true, undefined])
|
|
49797
50080
|
.expectChange("order", ["", "1"])
|
|
49798
|
-
.expectChange("bp",
|
|
50081
|
+
.expectChange("bp", "")
|
|
49799
50082
|
.expectChange("currency", "EUR") // default value
|
|
49800
50083
|
.expectChange("orderCount", "2")
|
|
49801
50084
|
.expectChange("itemCount", "0");
|
|
@@ -49813,7 +50096,7 @@ sap.ui.define([
|
|
|
49813
50096
|
return that.waitForChanges(assert, "create order");
|
|
49814
50097
|
}).then(function () {
|
|
49815
50098
|
that.expectChange("note", ["AA", "doNotSubmit", "B"])
|
|
49816
|
-
.expectChange("product", [
|
|
50099
|
+
.expectChange("product", ["", "", ""])
|
|
49817
50100
|
.expectChange("itemCount", "1")
|
|
49818
50101
|
.expectChange("itemCount", "2")
|
|
49819
50102
|
.expectChange("itemCount", "3");
|
|
@@ -49886,22 +50169,23 @@ sap.ui.define([
|
|
|
49886
50169
|
}
|
|
49887
50170
|
}, {
|
|
49888
50171
|
"@odata.etag" : "etag",
|
|
50172
|
+
GrossAmount : "128.97",
|
|
49889
50173
|
SalesOrderID : "new",
|
|
49890
50174
|
SO_2_SOITEM : [{
|
|
49891
50175
|
"@odata.etag" : "etag10",
|
|
49892
|
-
GrossAmount : "
|
|
50176
|
+
GrossAmount : "41.99",
|
|
49893
50177
|
ItemPosition : "0010",
|
|
49894
50178
|
Note : "BBB",
|
|
49895
50179
|
SalesOrderID : "new"
|
|
49896
50180
|
}, {
|
|
49897
50181
|
"@odata.etag" : "etag20",
|
|
49898
|
-
GrossAmount : "42.99",
|
|
50182
|
+
GrossAmount : "42.99",
|
|
49899
50183
|
ItemPosition : "0020",
|
|
49900
50184
|
Note : "additional",
|
|
49901
50185
|
SalesOrderID : "new"
|
|
49902
50186
|
}, {
|
|
49903
50187
|
"@odata.etag" : "etag30",
|
|
49904
|
-
GrossAmount : "
|
|
50188
|
+
GrossAmount : "43.99",
|
|
49905
50189
|
ItemPosition : "0030",
|
|
49906
50190
|
Note : "AAA",
|
|
49907
50191
|
SalesOrderID : "new"
|
|
@@ -50019,8 +50303,8 @@ sap.ui.define([
|
|
|
50019
50303
|
that.waitForChanges(assert, "submit -> success")
|
|
50020
50304
|
]);
|
|
50021
50305
|
}).then(function () {
|
|
50022
|
-
|
|
50023
|
-
|
|
50306
|
+
assert.strictEqual(oCreatedOrderContext.getProperty("GrossAmount"), "128.97");
|
|
50307
|
+
const aContexts = oItemsBinding.getAllCurrentContexts();
|
|
50024
50308
|
assert.strictEqual(oCreatedOrderContext.getValue("@$ui5.context.isTransient"), false);
|
|
50025
50309
|
assert.strictEqual(oCreatedOrderContext.getValue("SO_2_BP/BusinessPartnerID"), "BP");
|
|
50026
50310
|
assert.deepEqual(aContexts.map(getPath), [
|
|
@@ -50031,6 +50315,7 @@ sap.ui.define([
|
|
|
50031
50315
|
assert.deepEqual(aContexts.map(getObject), [{
|
|
50032
50316
|
"@odata.etag" : "etag10",
|
|
50033
50317
|
ItemPosition : "0010",
|
|
50318
|
+
GrossAmount : "41.99",
|
|
50034
50319
|
Note : "BBB",
|
|
50035
50320
|
SalesOrderID : "new",
|
|
50036
50321
|
SOITEM_2_PRODUCT : {
|
|
@@ -50041,6 +50326,7 @@ sap.ui.define([
|
|
|
50041
50326
|
}, {
|
|
50042
50327
|
"@odata.etag" : "etag20",
|
|
50043
50328
|
ItemPosition : "0020",
|
|
50329
|
+
GrossAmount : "42.99",
|
|
50044
50330
|
Note : "additional",
|
|
50045
50331
|
SalesOrderID : "new",
|
|
50046
50332
|
SOITEM_2_PRODUCT : {
|
|
@@ -50051,6 +50337,7 @@ sap.ui.define([
|
|
|
50051
50337
|
}, {
|
|
50052
50338
|
"@odata.etag" : "etag30",
|
|
50053
50339
|
ItemPosition : "0030",
|
|
50340
|
+
GrossAmount : "43.99",
|
|
50054
50341
|
Note : "AAA",
|
|
50055
50342
|
SalesOrderID : "new",
|
|
50056
50343
|
SOITEM_2_PRODUCT : {
|
|
@@ -50239,6 +50526,8 @@ sap.ui.define([
|
|
|
50239
50526
|
// (5) Delete the second employee
|
|
50240
50527
|
// (6) Submit; the number of equipment items changes for each employee
|
|
50241
50528
|
// JIRA: CPOUI5ODATAV4-1976
|
|
50529
|
+
//
|
|
50530
|
+
// Accept the complete response, not only $select (esp. EmployeeId) (CPOUI5ODATAV4-1977)
|
|
50242
50531
|
[false, true].forEach(function (bOwnRequest) {
|
|
50243
50532
|
["Table", "t:Table"].forEach(function (sTable) {
|
|
50244
50533
|
var sTitle = "CPOUI5ODATAV4-1976: Deep create, nested list in nested list, $$ownRequest="
|
|
@@ -50405,11 +50694,13 @@ sap.ui.define([
|
|
|
50405
50694
|
EMPLOYEE_2_EQUIPMENTS : [{
|
|
50406
50695
|
"@odata.etag" : "etag.P1",
|
|
50407
50696
|
Category : "C",
|
|
50697
|
+
EmployeeId : "E1",
|
|
50408
50698
|
ID : 1,
|
|
50409
50699
|
Name : "P1"
|
|
50410
50700
|
}, {
|
|
50411
50701
|
"@odata.etag" : "etag.P2",
|
|
50412
50702
|
Category : "C",
|
|
50703
|
+
EmployeeId : "E1",
|
|
50413
50704
|
ID : 2,
|
|
50414
50705
|
Name : "P2"
|
|
50415
50706
|
}]
|
|
@@ -50420,6 +50711,7 @@ sap.ui.define([
|
|
|
50420
50711
|
EMPLOYEE_2_EQUIPMENTS : [{
|
|
50421
50712
|
"@odata.etag" : "etag.F1",
|
|
50422
50713
|
Category : "C",
|
|
50714
|
+
EmployeeId : "E2",
|
|
50423
50715
|
ID : 3,
|
|
50424
50716
|
Name : "F1"
|
|
50425
50717
|
}]
|
|
@@ -50457,17 +50749,20 @@ sap.ui.define([
|
|
|
50457
50749
|
assert.deepEqual(aEquipmentsBindings[0].getAllCurrentContexts().map(getObject), [{
|
|
50458
50750
|
"@odata.etag" : "etag.P1",
|
|
50459
50751
|
Category : "C",
|
|
50752
|
+
EmployeeId : "E1",
|
|
50460
50753
|
ID : 1,
|
|
50461
50754
|
Name : "P1"
|
|
50462
50755
|
}, {
|
|
50463
50756
|
"@odata.etag" : "etag.P2",
|
|
50464
50757
|
Category : "C",
|
|
50758
|
+
EmployeeId : "E1",
|
|
50465
50759
|
ID : 2,
|
|
50466
50760
|
Name : "P2"
|
|
50467
50761
|
}]);
|
|
50468
50762
|
assert.deepEqual(aEquipmentsBindings[1].getAllCurrentContexts().map(getObject), [{
|
|
50469
50763
|
"@odata.etag" : "etag.F1",
|
|
50470
50764
|
Category : "C",
|
|
50765
|
+
EmployeeId : "E2",
|
|
50471
50766
|
ID : 3,
|
|
50472
50767
|
Name : "F1"
|
|
50473
50768
|
}]);
|
|
@@ -50476,6 +50771,127 @@ sap.ui.define([
|
|
|
50476
50771
|
});
|
|
50477
50772
|
});
|
|
50478
50773
|
|
|
50774
|
+
//*********************************************************************************************
|
|
50775
|
+
// Scenario: Deep create, nested single entity incl. recursion.
|
|
50776
|
+
// Create an employee with a nested team (one property via initial data, another one set
|
|
50777
|
+
// afterward) with a nested manager. See that the complete response is accepted, not only
|
|
50778
|
+
// $select (esp. Name, MEMBER_COUNT)
|
|
50779
|
+
// JIRA: CPOUI5ODATAV4-1977
|
|
50780
|
+
QUnit.test("CPOUI5ODATAV4-1977: Deep create, nested single entity", function (assert) {
|
|
50781
|
+
let oBinding;
|
|
50782
|
+
let oCreatedContext;
|
|
50783
|
+
const oModel = this.createTeaBusiModel({autoExpandSelect : true, updateGroupId : "update"});
|
|
50784
|
+
const sView = `
|
|
50785
|
+
<Table id="employees" items="{/EMPLOYEES}">
|
|
50786
|
+
<Text id="id" text="{ID}"/>
|
|
50787
|
+
<Text id="teamId" text="{EMPLOYEE_2_TEAM/Team_Id}"/>
|
|
50788
|
+
<Input id="teamName" value="{EMPLOYEE_2_TEAM/Name}"/>
|
|
50789
|
+
<Input id="manager" value="{EMPLOYEE_2_TEAM/TEAM_2_MANAGER/ID}"/>
|
|
50790
|
+
<Text id="managerTeamId" text="{EMPLOYEE_2_TEAM/TEAM_2_MANAGER/TEAM_ID}"/>
|
|
50791
|
+
</Table>`;
|
|
50792
|
+
const that = this;
|
|
50793
|
+
|
|
50794
|
+
this.expectRequest("EMPLOYEES?$select=ID&$expand=EMPLOYEE_2_TEAM($select=Name,Team_Id"
|
|
50795
|
+
+ ";$expand=TEAM_2_MANAGER($select=ID,TEAM_ID))&$skip=0&$top=100", {
|
|
50796
|
+
value : [{
|
|
50797
|
+
ID : "E1",
|
|
50798
|
+
EMPLOYEE_2_TEAM : {
|
|
50799
|
+
Name : "Team 1",
|
|
50800
|
+
Team_Id : "T1",
|
|
50801
|
+
TEAM_2_MANAGER : {
|
|
50802
|
+
ID : "M1",
|
|
50803
|
+
TEAM_ID : "T1"
|
|
50804
|
+
}
|
|
50805
|
+
}
|
|
50806
|
+
}]
|
|
50807
|
+
})
|
|
50808
|
+
.expectChange("id", ["E1"])
|
|
50809
|
+
.expectChange("teamId", ["T1"])
|
|
50810
|
+
.expectChange("teamName", ["Team 1"])
|
|
50811
|
+
.expectChange("manager", ["M1"])
|
|
50812
|
+
.expectChange("managerTeamId", ["T1"]);
|
|
50813
|
+
|
|
50814
|
+
return this.createView(assert, sView, oModel).then(function () {
|
|
50815
|
+
that.expectChange("id", ["", "E1"])
|
|
50816
|
+
.expectChange("teamId", ["Tnew", "T1"])
|
|
50817
|
+
.expectChange("teamName", ["", "Team 1"])
|
|
50818
|
+
.expectChange("manager", ["", "M1"])
|
|
50819
|
+
.expectChange("managerTeamId", ["", "T1"]);
|
|
50820
|
+
|
|
50821
|
+
oBinding = that.oView.byId("employees").getBinding("items");
|
|
50822
|
+
// code under test
|
|
50823
|
+
// bSkipRefresh not needed due to deep create
|
|
50824
|
+
oCreatedContext = oBinding.create({EMPLOYEE_2_TEAM : {Team_Id : "Tnew"}});
|
|
50825
|
+
|
|
50826
|
+
return that.waitForChanges(assert, "create employee");
|
|
50827
|
+
}).then(function () {
|
|
50828
|
+
that.expectChange("teamName", ["Team 2"])
|
|
50829
|
+
.expectChange("manager", ["M2"]);
|
|
50830
|
+
|
|
50831
|
+
oCreatedContext.setProperty("EMPLOYEE_2_TEAM/Name", "Team 2");
|
|
50832
|
+
oCreatedContext.setProperty("EMPLOYEE_2_TEAM/TEAM_2_MANAGER/ID", "M2");
|
|
50833
|
+
|
|
50834
|
+
return that.waitForChanges(assert, "patch transient");
|
|
50835
|
+
}).then(function () {
|
|
50836
|
+
that.expectRequest({
|
|
50837
|
+
method : "POST",
|
|
50838
|
+
url : "EMPLOYEES",
|
|
50839
|
+
payload : {
|
|
50840
|
+
EMPLOYEE_2_TEAM : {
|
|
50841
|
+
Name : "Team 2",
|
|
50842
|
+
Team_Id : "Tnew",
|
|
50843
|
+
TEAM_2_MANAGER : {
|
|
50844
|
+
ID : "M2"
|
|
50845
|
+
}
|
|
50846
|
+
}
|
|
50847
|
+
}
|
|
50848
|
+
}, {
|
|
50849
|
+
"@odata.etag" : "etagE2",
|
|
50850
|
+
ID : "E2",
|
|
50851
|
+
Name : "Peter Burke",
|
|
50852
|
+
EMPLOYEE_2_TEAM : {
|
|
50853
|
+
"@odata.etag" : "etagT2",
|
|
50854
|
+
MEMBER_COUNT : 1,
|
|
50855
|
+
Name : "Team 2 (from server)",
|
|
50856
|
+
Team_Id : "T2",
|
|
50857
|
+
TEAM_2_MANAGER : {
|
|
50858
|
+
"@odata.etag" : "etagM2",
|
|
50859
|
+
ID : "M2",
|
|
50860
|
+
TEAM_ID : "T2"
|
|
50861
|
+
}
|
|
50862
|
+
}
|
|
50863
|
+
})
|
|
50864
|
+
.expectChange("id", ["E2"])
|
|
50865
|
+
.expectChange("teamId", ["T2"])
|
|
50866
|
+
.expectChange("teamName", ["Team 2 (from server)"])
|
|
50867
|
+
.expectChange("managerTeamId", ["T2"]);
|
|
50868
|
+
|
|
50869
|
+
return Promise.all([
|
|
50870
|
+
oModel.submitBatch("update"),
|
|
50871
|
+
oCreatedContext.created(),
|
|
50872
|
+
that.waitForChanges(assert, "submit")
|
|
50873
|
+
]);
|
|
50874
|
+
}).then(function () {
|
|
50875
|
+
assert.deepEqual(oCreatedContext.getObject(), {
|
|
50876
|
+
"@$ui5.context.isTransient" : false,
|
|
50877
|
+
"@odata.etag" : "etagE2",
|
|
50878
|
+
ID : "E2",
|
|
50879
|
+
Name : "Peter Burke",
|
|
50880
|
+
EMPLOYEE_2_TEAM : {
|
|
50881
|
+
"@odata.etag" : "etagT2",
|
|
50882
|
+
MEMBER_COUNT : 1,
|
|
50883
|
+
Name : "Team 2 (from server)",
|
|
50884
|
+
Team_Id : "T2",
|
|
50885
|
+
TEAM_2_MANAGER : {
|
|
50886
|
+
"@odata.etag" : "etagM2",
|
|
50887
|
+
ID : "M2",
|
|
50888
|
+
TEAM_ID : "T2"
|
|
50889
|
+
}
|
|
50890
|
+
}
|
|
50891
|
+
});
|
|
50892
|
+
});
|
|
50893
|
+
});
|
|
50894
|
+
|
|
50479
50895
|
//*********************************************************************************************
|
|
50480
50896
|
// Scenario: A deep create of a sales order with items is tried, but there is an ODCB w/o path
|
|
50481
50897
|
// (w/ or w/o own cache) in between. A non-deep create however must work.
|
|
@@ -52643,7 +53059,25 @@ sap.ui.define([
|
|
|
52643
53059
|
headers : {"If-Match" : "ETag"},
|
|
52644
53060
|
method : "DELETE",
|
|
52645
53061
|
url : "Artists(ArtistID='42',IsActiveEntity=false)"
|
|
52646
|
-
}
|
|
53062
|
+
}, undefined, {
|
|
53063
|
+
"sap-messages" : JSON.stringify([{
|
|
53064
|
+
code : "foo-42",
|
|
53065
|
+
message : "What a nice name!",
|
|
53066
|
+
numericSeverity : 2,
|
|
53067
|
+
target : "Name"
|
|
53068
|
+
}])
|
|
53069
|
+
})
|
|
53070
|
+
.expectMessages([{
|
|
53071
|
+
message : sMessage1,
|
|
53072
|
+
target : "/Artists(ArtistID='42',IsActiveEntity=false)/Name",
|
|
53073
|
+
type : "Success"
|
|
53074
|
+
}, {
|
|
53075
|
+
code : "foo-42",
|
|
53076
|
+
message : "What a nice name!",
|
|
53077
|
+
persistent : true,
|
|
53078
|
+
target : "/Artists(ArtistID='42',IsActiveEntity=false)/Name",
|
|
53079
|
+
type : "Information"
|
|
53080
|
+
}]);
|
|
52647
53081
|
|
|
52648
53082
|
return Promise.all([
|
|
52649
53083
|
// code under test
|
|
@@ -52661,6 +53095,40 @@ sap.ui.define([
|
|
|
52661
53095
|
return that.waitForChanges(assert, "show active");
|
|
52662
53096
|
}).then(function () {
|
|
52663
53097
|
return that.checkValueState(assert, that.oView.byId("name"), "None", "");
|
|
53098
|
+
}).then(function () {
|
|
53099
|
+
that.oLogMock.expects("error")
|
|
53100
|
+
.withArgs("Failed to delete /Artists(ArtistID='42',IsActiveEntity=false)");
|
|
53101
|
+
that.expectRequest({
|
|
53102
|
+
headers : {"If-Match" : "ETag"},
|
|
53103
|
+
method : "DELETE",
|
|
53104
|
+
url : "Artists(ArtistID='42',IsActiveEntity=false)"
|
|
53105
|
+
}, createErrorInsideBatch({target : "ArtistID"}))
|
|
53106
|
+
.expectMessages([{
|
|
53107
|
+
message : sMessage1,
|
|
53108
|
+
target : "/Artists(ArtistID='42',IsActiveEntity=false)/Name",
|
|
53109
|
+
type : "Success"
|
|
53110
|
+
}, {
|
|
53111
|
+
code : "foo-42",
|
|
53112
|
+
message : "What a nice name!",
|
|
53113
|
+
persistent : true,
|
|
53114
|
+
target : "/Artists(ArtistID='42',IsActiveEntity=false)/Name",
|
|
53115
|
+
type : "Information"
|
|
53116
|
+
}, {
|
|
53117
|
+
code : "CODE",
|
|
53118
|
+
message : "Request intentionally failed",
|
|
53119
|
+
persistent : true,
|
|
53120
|
+
target : "/Artists(ArtistID='42',IsActiveEntity=false)/ArtistID",
|
|
53121
|
+
technical : true,
|
|
53122
|
+
type : "Error"
|
|
53123
|
+
}]);
|
|
53124
|
+
|
|
53125
|
+
return Promise.all([
|
|
53126
|
+
// code under test
|
|
53127
|
+
oModel.delete(oDraftContext).then(mustFail(assert), function (oError) {
|
|
53128
|
+
assert.strictEqual(oError.message, "Request intentionally failed");
|
|
53129
|
+
}),
|
|
53130
|
+
that.waitForChanges(assert, "delete again")
|
|
53131
|
+
]);
|
|
52664
53132
|
}).then(function () {
|
|
52665
53133
|
that.expectMessages([]);
|
|
52666
53134
|
|