@openui5/sap.ui.core 1.117.1 → 1.118.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.
Files changed (831) hide show
  1. package/package.json +1 -1
  2. package/src/jquery.sap.global.js +1 -1
  3. package/src/jquery.sap.properties.js +1 -1
  4. package/src/jquery.sap.resources.js +1 -1
  5. package/src/jquery.sap.script.js +1 -1
  6. package/src/jquery.sap.storage.js +3 -3
  7. package/src/sap/base/Event.js +1 -1
  8. package/src/sap/base/Eventing.js +1 -1
  9. package/src/sap/base/config.js +1 -1
  10. package/src/sap/base/i18n/LanguageTag.js +1 -1
  11. package/src/sap/base/i18n/Localization.js +42 -39
  12. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  13. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  14. package/src/sap/base/util/restricted/_castArray.js +1 -1
  15. package/src/sap/base/util/restricted/_compact.js +1 -1
  16. package/src/sap/base/util/restricted/_curry.js +1 -1
  17. package/src/sap/base/util/restricted/_debounce.js +1 -1
  18. package/src/sap/base/util/restricted/_difference.js +1 -1
  19. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  20. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  21. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  22. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  23. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  24. package/src/sap/base/util/restricted/_flatten.js +1 -1
  25. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  26. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  27. package/src/sap/base/util/restricted/_intersection.js +1 -1
  28. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  29. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  30. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  31. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  32. package/src/sap/base/util/restricted/_isNil.js +1 -1
  33. package/src/sap/base/util/restricted/_max.js +1 -1
  34. package/src/sap/base/util/restricted/_merge.js +1 -1
  35. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  36. package/src/sap/base/util/restricted/_min.js +1 -1
  37. package/src/sap/base/util/restricted/_omit.js +1 -1
  38. package/src/sap/base/util/restricted/_pick.js +1 -1
  39. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  40. package/src/sap/base/util/restricted/_throttle.js +1 -1
  41. package/src/sap/base/util/restricted/_toArray.js +1 -1
  42. package/src/sap/base/util/restricted/_union.js +1 -1
  43. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  44. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  45. package/src/sap/base/util/restricted/_uniq.js +1 -1
  46. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  47. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  48. package/src/sap/base/util/restricted/_without.js +1 -1
  49. package/src/sap/base/util/restricted/_xor.js +1 -1
  50. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  51. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  52. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  53. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  54. package/src/sap/ui/Device.js +3 -3
  55. package/src/sap/ui/Global.js +4 -4
  56. package/src/sap/ui/base/BindingParser.js +2 -1
  57. package/src/sap/ui/base/Event.js +1 -1
  58. package/src/sap/ui/base/EventProvider.js +1 -1
  59. package/src/sap/ui/base/Interface.js +1 -1
  60. package/src/sap/ui/base/ManagedObject.js +7 -3
  61. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  62. package/src/sap/ui/base/Metadata.js +1 -1
  63. package/src/sap/ui/base/Object.js +1 -1
  64. package/src/sap/ui/base/ObjectPool.js +1 -1
  65. package/src/sap/ui/core/.library +9 -1
  66. package/src/sap/ui/core/AnimationMode.js +1 -1
  67. package/src/sap/ui/core/BlockLayerUtils.js +1 -1
  68. package/src/sap/ui/core/BusyIndicator.js +2 -2
  69. package/src/sap/ui/core/Component.js +22 -15
  70. package/src/sap/ui/core/ComponentContainer.js +2 -2
  71. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  72. package/src/sap/ui/core/ComponentSupport.js +1 -1
  73. package/src/sap/ui/core/Configuration.js +1 -13
  74. package/src/sap/ui/core/Control.js +21 -1
  75. package/src/sap/ui/core/Core.js +67 -41
  76. package/src/sap/ui/core/CustomData.js +1 -1
  77. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  78. package/src/sap/ui/core/Element.js +1 -1
  79. package/src/sap/ui/core/ElementMetadata.js +1 -1
  80. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  81. package/src/sap/ui/core/EventBus.js +1 -1
  82. package/src/sap/ui/core/Fragment.js +1 -1
  83. package/src/sap/ui/core/HTML.js +1 -1
  84. package/src/sap/ui/core/History.js +1 -1
  85. package/src/sap/ui/core/Icon.js +2 -2
  86. package/src/sap/ui/core/IndicationColorSupport.js +2 -2
  87. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  88. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  89. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  90. package/src/sap/ui/core/InvisibleText.js +3 -6
  91. package/src/sap/ui/core/Item.js +1 -1
  92. package/src/sap/ui/core/LabelEnablement.js +1 -1
  93. package/src/sap/ui/core/LayoutData.js +1 -1
  94. package/src/sap/ui/core/Lib.js +9 -13
  95. package/src/sap/ui/core/ListItem.js +1 -1
  96. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  97. package/src/sap/ui/core/Locale.js +1 -1
  98. package/src/sap/ui/core/LocaleData.js +2 -2
  99. package/src/sap/ui/core/Manifest.js +1 -1
  100. package/src/sap/ui/core/Message.js +1 -1
  101. package/src/sap/ui/core/Messaging.js +472 -0
  102. package/src/sap/ui/core/RenderManager.js +1 -1
  103. package/src/sap/ui/core/Renderer.js +1 -1
  104. package/src/sap/ui/core/Rendering.js +3 -2
  105. package/src/sap/ui/core/ResizeHandler.js +1 -4
  106. package/src/sap/ui/core/ScrollBar.js +1 -1
  107. package/src/sap/ui/core/SeparatorItem.js +1 -1
  108. package/src/sap/ui/core/ShortcutHint.js +1 -1
  109. package/src/sap/ui/core/Theming.js +28 -31
  110. package/src/sap/ui/core/Title.js +1 -1
  111. package/src/sap/ui/core/TooltipBase.js +1 -1
  112. package/src/sap/ui/core/UIArea.js +85 -17
  113. package/src/sap/ui/core/UIComponent.js +1 -1
  114. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  115. package/src/sap/ui/core/ValueStateSupport.js +2 -2
  116. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  117. package/src/sap/ui/core/XMLComposite.js +1 -1
  118. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  119. package/src/sap/ui/core/_IconRegistry.js +1 -1
  120. package/src/sap/ui/core/boot.js +9 -0
  121. package/src/sap/ui/core/date/UI5Date.js +1 -1
  122. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  123. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  124. package/src/sap/ui/core/dnd/DragAndDrop.js +1 -1
  125. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  126. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  127. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  128. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  129. package/src/sap/ui/core/format/DateFormat.js +4 -0
  130. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  131. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  132. package/src/sap/ui/core/library.js +18 -47
  133. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  134. package/src/sap/ui/core/message/Message.js +1 -1
  135. package/src/sap/ui/core/message/MessageManager.js +37 -459
  136. package/src/sap/ui/core/message/MessageMixin.js +3 -3
  137. package/src/sap/ui/core/message/MessageParser.js +1 -1
  138. package/src/sap/ui/core/message/MessageProcessor.js +9 -9
  139. package/src/sap/ui/core/message/MessageType.js +53 -0
  140. package/src/sap/ui/core/messagebundle.properties +3 -0
  141. package/src/sap/ui/core/messagebundle_ar.properties +1 -1
  142. package/src/sap/ui/core/messagebundle_bg.properties +1 -1
  143. package/src/sap/ui/core/messagebundle_ca.properties +1 -1
  144. package/src/sap/ui/core/messagebundle_cs.properties +1 -1
  145. package/src/sap/ui/core/messagebundle_cy.properties +1 -1
  146. package/src/sap/ui/core/messagebundle_da.properties +1 -1
  147. package/src/sap/ui/core/messagebundle_de.properties +1 -1
  148. package/src/sap/ui/core/messagebundle_el.properties +1 -1
  149. package/src/sap/ui/core/messagebundle_es.properties +1 -1
  150. package/src/sap/ui/core/messagebundle_es_MX.properties +1 -1
  151. package/src/sap/ui/core/messagebundle_et.properties +1 -1
  152. package/src/sap/ui/core/messagebundle_fi.properties +1 -1
  153. package/src/sap/ui/core/messagebundle_fr.properties +1 -1
  154. package/src/sap/ui/core/messagebundle_fr_CA.properties +1 -1
  155. package/src/sap/ui/core/messagebundle_hi.properties +1 -1
  156. package/src/sap/ui/core/messagebundle_hr.properties +1 -1
  157. package/src/sap/ui/core/messagebundle_hu.properties +1 -1
  158. package/src/sap/ui/core/messagebundle_id.properties +1 -1
  159. package/src/sap/ui/core/messagebundle_it.properties +1 -1
  160. package/src/sap/ui/core/messagebundle_iw.properties +1 -1
  161. package/src/sap/ui/core/messagebundle_ja.properties +1 -1
  162. package/src/sap/ui/core/messagebundle_kk.properties +1 -1
  163. package/src/sap/ui/core/messagebundle_ko.properties +1 -1
  164. package/src/sap/ui/core/messagebundle_lt.properties +1 -1
  165. package/src/sap/ui/core/messagebundle_lv.properties +1 -1
  166. package/src/sap/ui/core/messagebundle_ms.properties +1 -1
  167. package/src/sap/ui/core/messagebundle_nl.properties +1 -1
  168. package/src/sap/ui/core/messagebundle_no.properties +1 -1
  169. package/src/sap/ui/core/messagebundle_pl.properties +1 -1
  170. package/src/sap/ui/core/messagebundle_pt.properties +1 -1
  171. package/src/sap/ui/core/messagebundle_pt_PT.properties +1 -1
  172. package/src/sap/ui/core/messagebundle_ro.properties +1 -1
  173. package/src/sap/ui/core/messagebundle_ru.properties +1 -1
  174. package/src/sap/ui/core/messagebundle_sh.properties +1 -1
  175. package/src/sap/ui/core/messagebundle_sk.properties +1 -1
  176. package/src/sap/ui/core/messagebundle_sl.properties +1 -1
  177. package/src/sap/ui/core/messagebundle_sv.properties +9 -9
  178. package/src/sap/ui/core/messagebundle_th.properties +1 -1
  179. package/src/sap/ui/core/messagebundle_tr.properties +1 -1
  180. package/src/sap/ui/core/messagebundle_uk.properties +1 -1
  181. package/src/sap/ui/core/messagebundle_vi.properties +1 -1
  182. package/src/sap/ui/core/messagebundle_zh_CN.properties +1 -1
  183. package/src/sap/ui/core/messagebundle_zh_TW.properties +1 -1
  184. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  185. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  186. package/src/sap/ui/core/mvc/JSView.js +1 -1
  187. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  188. package/src/sap/ui/core/mvc/View.js +1 -1
  189. package/src/sap/ui/core/mvc/XMLView.js +9 -2
  190. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  191. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  192. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  193. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  194. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  195. package/src/sap/ui/core/routing/Router.js +7 -1
  196. package/src/sap/ui/core/routing/async/Route.js +1 -0
  197. package/src/sap/ui/core/routing/sync/Route.js +1 -0
  198. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  199. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  200. package/src/sap/ui/core/service/Service.js +1 -1
  201. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  202. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  203. package/src/sap/ui/core/support/Plugin.js +25 -5
  204. package/src/sap/ui/core/support/Support.js +34 -4
  205. package/src/sap/ui/core/support/ToolsAPI.js +6 -16
  206. package/src/sap/ui/core/support/controls/InteractionTree.js +0 -4
  207. package/src/sap/ui/core/support/plugins/Breakpoint.js +0 -2
  208. package/src/sap/ui/core/support/plugins/ControlTree.js +10 -12
  209. package/src/sap/ui/core/support/plugins/Debugging.js +10 -9
  210. package/src/sap/ui/core/support/plugins/Interaction.js +12 -13
  211. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -3
  212. package/src/sap/ui/core/support/plugins/Performance.js +1 -3
  213. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  214. package/src/sap/ui/core/support/plugins/TechInfo.js +32 -42
  215. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  216. package/src/sap/ui/core/support/plugins/ViewInfo.js +27 -13
  217. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +4 -4
  218. package/src/sap/ui/core/theming/ThemeHelper.js +100 -0
  219. package/src/sap/ui/core/theming/ThemeManager.js +18 -18
  220. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  221. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  222. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  223. package/src/sap/ui/core/tmpl/Template.js +1 -1
  224. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  225. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  226. package/src/sap/ui/core/util/Export.js +1 -1
  227. package/src/sap/ui/core/util/ExportCell.js +1 -1
  228. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  229. package/src/sap/ui/core/util/ExportRow.js +1 -1
  230. package/src/sap/ui/core/util/ExportType.js +1 -1
  231. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  232. package/src/sap/ui/core/util/File.js +1 -1
  233. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  234. package/src/sap/ui/core/util/MockServer.js +1 -1
  235. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  236. package/src/sap/ui/core/util/XMLPreprocessor.js +53 -29
  237. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  238. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  239. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  240. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  241. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  242. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  243. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  244. package/src/sap/ui/core/webc/WebComponent.js +659 -0
  245. package/src/sap/ui/core/webc/WebComponentMetadata.js +253 -0
  246. package/src/sap/ui/core/webc/WebComponentRenderer.js +323 -0
  247. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  248. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  249. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  250. package/src/sap/ui/debug/ControlTree.js +4 -3
  251. package/src/sap/ui/debug/DebugEnv.js +4 -4
  252. package/src/sap/ui/debug/PropertyList.js +1 -1
  253. package/src/sap/ui/model/Binding.js +6 -6
  254. package/src/sap/ui/model/ClientModel.js +1 -1
  255. package/src/sap/ui/model/ClientPropertyBinding.js +3 -3
  256. package/src/sap/ui/model/CompositeDataState.js +1 -1
  257. package/src/sap/ui/model/CompositeType.js +1 -1
  258. package/src/sap/ui/model/Context.js +1 -1
  259. package/src/sap/ui/model/DataState.js +1 -1
  260. package/src/sap/ui/model/ManagedObjectBindingSupport.js +4 -4
  261. package/src/sap/ui/model/MetaModel.js +1 -1
  262. package/src/sap/ui/model/Model.js +4 -4
  263. package/src/sap/ui/model/SelectionModel.js +1 -1
  264. package/src/sap/ui/model/SimpleType.js +1 -1
  265. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  266. package/src/sap/ui/model/Type.js +1 -1
  267. package/src/sap/ui/model/controlhelper/TreeBindingProxy.js +27 -13
  268. package/src/sap/ui/model/json/JSONModel.js +1 -1
  269. package/src/sap/ui/model/message/MessageModel.js +1 -1
  270. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  271. package/src/sap/ui/model/odata/ODataListBinding.js +24 -0
  272. package/src/sap/ui/model/odata/ODataMessageParser.js +4 -4
  273. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  274. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  275. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  276. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +6 -0
  277. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  278. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  279. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  280. package/src/sap/ui/model/odata/type/Date.js +1 -1
  281. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  282. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  283. package/src/sap/ui/model/odata/type/DateTimeOffset.js +7 -2
  284. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  285. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  286. package/src/sap/ui/model/odata/type/Double.js +1 -1
  287. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  288. package/src/sap/ui/model/odata/type/Int.js +1 -1
  289. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  290. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  291. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  292. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  293. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  294. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  295. package/src/sap/ui/model/odata/type/Single.js +1 -1
  296. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  297. package/src/sap/ui/model/odata/type/String.js +1 -1
  298. package/src/sap/ui/model/odata/type/Time.js +1 -1
  299. package/src/sap/ui/model/odata/type/TimeOfDay.js +6 -2
  300. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  301. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  302. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  303. package/src/sap/ui/model/odata/v2/ODataListBinding.js +23 -3
  304. package/src/sap/ui/model/odata/v2/ODataModel.js +6 -6
  305. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +33 -6
  306. package/src/sap/ui/model/odata/v4/Context.js +26 -16
  307. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +6 -2
  308. package/src/sap/ui/model/odata/v4/ODataListBinding.js +62 -29
  309. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +1 -1
  310. package/src/sap/ui/model/odata/v4/ODataModel.js +17 -10
  311. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +5 -1
  312. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +129 -6
  313. package/src/sap/ui/model/odata/v4/lib/_Cache.js +102 -57
  314. package/src/sap/ui/model/odata/v4/lib/_Helper.js +30 -4
  315. package/src/sap/ui/model/odata/v4/lib/_Parser.js +3 -0
  316. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +14 -4
  317. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +28 -35
  318. package/src/sap/ui/model/odata/v4/ts.js +44 -0
  319. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  320. package/src/sap/ui/model/type/Boolean.js +1 -1
  321. package/src/sap/ui/model/type/Currency.js +1 -1
  322. package/src/sap/ui/model/type/Date.js +1 -1
  323. package/src/sap/ui/model/type/DateInterval.js +5 -4
  324. package/src/sap/ui/model/type/DateTime.js +1 -1
  325. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  326. package/src/sap/ui/model/type/FileSize.js +1 -1
  327. package/src/sap/ui/model/type/Float.js +1 -1
  328. package/src/sap/ui/model/type/Integer.js +1 -1
  329. package/src/sap/ui/model/type/String.js +1 -1
  330. package/src/sap/ui/model/type/Time.js +1 -1
  331. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  332. package/src/sap/ui/model/type/Unit.js +1 -1
  333. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  334. package/src/sap/ui/performance/trace/Interaction.js +11 -2
  335. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  336. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +10 -11
  337. package/src/sap/ui/qunit/utils/nextUIUpdate.js +51 -0
  338. package/src/sap/ui/test/ModuleTracking.js +326 -0
  339. package/src/sap/ui/test/TestUtils.js +7 -6
  340. package/src/sap/ui/test/autowaiter/_UIUpdatesWaiter.js +3 -2
  341. package/src/sap/ui/test/generic/TestBase.js +1 -1
  342. package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +2 -0
  343. package/src/sap/ui/test/selectors/_DropdownItem.js +1 -0
  344. package/src/sap/ui/test/selectors/_TableRowItem.js +1 -0
  345. package/src/sap/ui/util/Storage.js +1 -1
  346. package/src/ui5loader-autoconfig.js +14 -10
  347. package/test/sap/ui/core/ComponentCleanup.html +228 -225
  348. package/test/sap/ui/core/ComponentConfig.html +1 -1
  349. package/test/sap/ui/core/ComponentExtensibility_CustomizingDisabled.html +1 -1
  350. package/test/sap/ui/core/ComponentExtensibility_legacyAPIs.html +1 -1
  351. package/test/sap/ui/core/ComponentSimple.html +1 -1
  352. package/test/sap/ui/core/ComponentSimpleModel.html +1 -1
  353. package/test/sap/ui/core/ComponentSupport.html +1 -1
  354. package/test/sap/ui/core/DateFormat.js +3 -3
  355. package/test/sap/ui/core/EventBroadcaster.html +62 -62
  356. package/test/sap/ui/core/Formats.html +4 -2
  357. package/test/sap/ui/core/GenericEventBinding.html +53 -52
  358. package/test/sap/ui/core/ListFormat.js +3 -3
  359. package/test/sap/ui/core/NumberFormat.js +3 -3
  360. package/test/sap/ui/core/ODataAnnotationsPerformance.html +28 -28
  361. package/test/sap/ui/core/ODataV2CanonicalRequests.html +3 -2
  362. package/test/sap/ui/core/ODataV2Messages.html +4 -3
  363. package/test/sap/ui/core/PopupWithUserSelection.html +1 -1
  364. package/test/sap/ui/core/Strings.js +3 -3
  365. package/test/sap/ui/core/ValidateURL.html +143 -143
  366. package/test/sap/ui/core/demokit/sample/Commands/Commands.html +1 -1
  367. package/test/sap/ui/core/demokit/sample/MessageManager/BasicMessages/Controller.controller.js +10 -10
  368. package/test/sap/ui/core/demokit/sample/MessageManager/BasicODataMessages/Controller.controller.js +7 -7
  369. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/Component.js +3 -2
  370. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/controller/Employee.controller.js +3 -2
  371. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/index.html +7 -8
  372. package/test/sap/ui/core/demokit/sample/OpaGetStarted/applicationUnderTest/index.html +9 -6
  373. package/test/sap/ui/core/demokit/sample/OpaWithSupportAssistant/applicationUnderTest/index.html +13 -10
  374. package/test/sap/ui/core/demokit/sample/PatternMatching/Patterns.html +11 -8
  375. package/test/sap/ui/core/demokit/sample/RoutingFullscreen/RoutingFullscreen.html +11 -8
  376. package/test/sap/ui/core/demokit/sample/RoutingMasterDetail/RoutingMasterDetail.html +11 -8
  377. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/RoutingNestedComponent.html +1 -1
  378. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/test/integration/opaTests.qunit.html +1 -1
  379. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/test/integration/opaTests.qunit.js +5 -4
  380. package/test/sap/ui/core/demokit/sample/TargetsStandalone/TargetsStandalone.html +11 -8
  381. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Opa.qunit.js +9 -8
  382. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Opa.qunit.js +12 -11
  383. package/test/sap/ui/core/demokit/sample/common/Controller.js +6 -7
  384. package/test/sap/ui/core/demokit/sample/common/Helper.js +6 -2
  385. package/test/sap/ui/core/demokit/sample/common/init.js +25 -21
  386. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithOPA5/WebsiteCode.js +8 -7
  387. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Opa.qunit.js +9 -8
  388. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ObjectPage.controller.js +3 -2
  389. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.js +12 -10
  390. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/ListReport.controller.js +3 -2
  391. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Opa.qunit.js +10 -9
  392. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Opa.qunit.js +10 -9
  393. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/Component.js +4 -4
  394. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Main.controller.js +3 -3
  395. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Opa.qunit.js +10 -9
  396. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Component.js +19 -0
  397. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +93 -0
  398. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +85 -0
  399. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/SandboxModel.js +10 -0
  400. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/data/all.json +396 -0
  401. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/data/metadata.xml +423 -0
  402. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/manifest.json +70 -0
  403. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.js +11 -10
  404. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.qunit.js +9 -8
  405. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Opa.qunit.js +10 -9
  406. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Opa.qunit.js +8 -7
  407. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +8 -10
  408. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Opa.qunit.js +12 -11
  409. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Main.controller.js +3 -2
  410. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Opa.qunit.js +11 -10
  411. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/MIT.RecursiveHierarchy maintenance.html +408 -0
  412. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/Opa.qunit.js +26 -8
  413. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +54 -14
  414. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +24 -10
  415. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +352 -287
  416. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/pages/Main.js +38 -5
  417. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/tests/createEdit.js +128 -0
  418. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/tests/pageExpandCollapse.js +23 -22
  419. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Opa.qunit.js +10 -9
  420. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Opa.qunit.js +9 -8
  421. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Component.js +3 -2
  422. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Opa.qunit.js +15 -14
  423. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Opa.qunit.js +9 -8
  424. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Opa.qunit.js +9 -8
  425. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Opa.qunit.js +10 -9
  426. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/Opa.qunit.js +10 -9
  427. package/test/sap/ui/core/demokit/tutorial/databinding/01/package.json +2 -5
  428. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +8 -0
  429. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/index.js +7 -3
  430. package/test/sap/ui/core/demokit/tutorial/databinding/02/package.json +2 -5
  431. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +8 -0
  432. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/index.js +4 -3
  433. package/test/sap/ui/core/demokit/tutorial/databinding/03/package.json +2 -5
  434. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +8 -0
  435. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/index.js +4 -3
  436. package/test/sap/ui/core/demokit/tutorial/databinding/04/package.json +2 -5
  437. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +8 -0
  438. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/index.js +4 -3
  439. package/test/sap/ui/core/demokit/tutorial/databinding/05/package.json +2 -5
  440. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +8 -0
  441. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/index.js +4 -3
  442. package/test/sap/ui/core/demokit/tutorial/databinding/06/package.json +2 -5
  443. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +8 -0
  444. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/index.js +4 -3
  445. package/test/sap/ui/core/demokit/tutorial/databinding/07/package.json +2 -5
  446. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +8 -0
  447. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/index.js +4 -3
  448. package/test/sap/ui/core/demokit/tutorial/databinding/08/package.json +2 -5
  449. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +8 -0
  450. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/index.js +4 -3
  451. package/test/sap/ui/core/demokit/tutorial/databinding/09/package.json +2 -5
  452. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +8 -0
  453. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/index.js +4 -3
  454. package/test/sap/ui/core/demokit/tutorial/databinding/10/package.json +2 -5
  455. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +8 -0
  456. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/index.js +4 -3
  457. package/test/sap/ui/core/demokit/tutorial/databinding/11/package.json +2 -5
  458. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +8 -0
  459. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/index.js +6 -4
  460. package/test/sap/ui/core/demokit/tutorial/databinding/12/package.json +2 -5
  461. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +8 -0
  462. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/index.js +6 -4
  463. package/test/sap/ui/core/demokit/tutorial/databinding/13/package.json +2 -5
  464. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +8 -0
  465. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/index.js +6 -4
  466. package/test/sap/ui/core/demokit/tutorial/databinding/14/package.json +2 -5
  467. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +8 -0
  468. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/index.js +6 -4
  469. package/test/sap/ui/core/demokit/tutorial/databinding/15/package.json +2 -5
  470. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +8 -0
  471. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/index.js +6 -4
  472. package/test/sap/ui/core/demokit/tutorial/mockserver/01/package.json +2 -5
  473. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +8 -0
  474. package/test/sap/ui/core/demokit/tutorial/mockserver/02/package.json +2 -5
  475. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +8 -0
  476. package/test/sap/ui/core/demokit/tutorial/mockserver/03/package.json +2 -5
  477. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +8 -0
  478. package/test/sap/ui/core/demokit/tutorial/mockserver/04/package.json +2 -5
  479. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +8 -0
  480. package/test/sap/ui/core/demokit/tutorial/navigation/01/package.json +2 -4
  481. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +7 -0
  482. package/test/sap/ui/core/demokit/tutorial/navigation/01/webapp/index.html +1 -1
  483. package/test/sap/ui/core/demokit/tutorial/navigation/02/package.json +2 -4
  484. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +7 -0
  485. package/test/sap/ui/core/demokit/tutorial/navigation/02/webapp/index.html +1 -1
  486. package/test/sap/ui/core/demokit/tutorial/navigation/03/package.json +2 -4
  487. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +7 -0
  488. package/test/sap/ui/core/demokit/tutorial/navigation/03/webapp/index.html +1 -1
  489. package/test/sap/ui/core/demokit/tutorial/navigation/04/package.json +2 -4
  490. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +7 -0
  491. package/test/sap/ui/core/demokit/tutorial/navigation/04/webapp/index.html +1 -1
  492. package/test/sap/ui/core/demokit/tutorial/navigation/05/package.json +2 -4
  493. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +7 -0
  494. package/test/sap/ui/core/demokit/tutorial/navigation/05/webapp/index.html +1 -1
  495. package/test/sap/ui/core/demokit/tutorial/navigation/06/package.json +2 -4
  496. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +7 -0
  497. package/test/sap/ui/core/demokit/tutorial/navigation/06/webapp/index.html +1 -1
  498. package/test/sap/ui/core/demokit/tutorial/navigation/07/package.json +2 -4
  499. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +7 -0
  500. package/test/sap/ui/core/demokit/tutorial/navigation/07/webapp/index.html +1 -1
  501. package/test/sap/ui/core/demokit/tutorial/navigation/08/package.json +2 -4
  502. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +7 -0
  503. package/test/sap/ui/core/demokit/tutorial/navigation/08/webapp/index.html +1 -1
  504. package/test/sap/ui/core/demokit/tutorial/navigation/09/package.json +2 -4
  505. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +7 -0
  506. package/test/sap/ui/core/demokit/tutorial/navigation/09/webapp/index.html +1 -1
  507. package/test/sap/ui/core/demokit/tutorial/navigation/10/package.json +2 -4
  508. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +7 -0
  509. package/test/sap/ui/core/demokit/tutorial/navigation/10/webapp/index.html +1 -1
  510. package/test/sap/ui/core/demokit/tutorial/navigation/11/package.json +2 -4
  511. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +7 -0
  512. package/test/sap/ui/core/demokit/tutorial/navigation/11/webapp/index.html +1 -1
  513. package/test/sap/ui/core/demokit/tutorial/navigation/12/package.json +2 -4
  514. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +7 -0
  515. package/test/sap/ui/core/demokit/tutorial/navigation/12/webapp/index.html +1 -1
  516. package/test/sap/ui/core/demokit/tutorial/navigation/13/package.json +2 -4
  517. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +7 -0
  518. package/test/sap/ui/core/demokit/tutorial/navigation/13/webapp/index.html +1 -1
  519. package/test/sap/ui/core/demokit/tutorial/navigation/14/package.json +2 -4
  520. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +7 -0
  521. package/test/sap/ui/core/demokit/tutorial/navigation/14/webapp/index.html +1 -1
  522. package/test/sap/ui/core/demokit/tutorial/navigation/15/package.json +2 -4
  523. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +7 -0
  524. package/test/sap/ui/core/demokit/tutorial/navigation/15/webapp/index.html +1 -1
  525. package/test/sap/ui/core/demokit/tutorial/navigation/16/package.json +2 -4
  526. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +7 -0
  527. package/test/sap/ui/core/demokit/tutorial/navigation/16/webapp/index.html +1 -1
  528. package/test/sap/ui/core/demokit/tutorial/navigation/17/package.json +4 -6
  529. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +8 -1
  530. package/test/sap/ui/core/demokit/tutorial/navigation/17/webapp/index.html +1 -1
  531. package/test/sap/ui/core/demokit/tutorial/navigation/index.html +2 -2
  532. package/test/sap/ui/core/demokit/tutorial/odatav4/01/package.json +2 -6
  533. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +9 -0
  534. package/test/sap/ui/core/demokit/tutorial/odatav4/02/package.json +2 -6
  535. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +9 -0
  536. package/test/sap/ui/core/demokit/tutorial/odatav4/03/package.json +2 -6
  537. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +9 -0
  538. package/test/sap/ui/core/demokit/tutorial/odatav4/04/package.json +2 -6
  539. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +9 -0
  540. package/test/sap/ui/core/demokit/tutorial/odatav4/05/package.json +2 -6
  541. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +9 -0
  542. package/test/sap/ui/core/demokit/tutorial/odatav4/06/package.json +2 -6
  543. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +9 -0
  544. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/controller/App.controller.js +5 -5
  545. package/test/sap/ui/core/demokit/tutorial/odatav4/07/package.json +2 -6
  546. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +9 -0
  547. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/controller/App.controller.js +7 -7
  548. package/test/sap/ui/core/demokit/tutorial/odatav4/08/package.json +2 -6
  549. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +9 -0
  550. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/controller/App.controller.js +7 -7
  551. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/test/integration/opaTests.qunit.js +5 -5
  552. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/test/integration/pages/Tutorial.js +1 -1
  553. package/test/sap/ui/core/demokit/tutorial/odatav4/09/package.json +2 -6
  554. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +9 -0
  555. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/controller/App.controller.js +7 -7
  556. package/test/sap/ui/core/demokit/tutorial/odatav4/10/package.json +2 -6
  557. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +9 -0
  558. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/controller/App.controller.js +7 -7
  559. package/test/sap/ui/core/demokit/tutorial/odatav4/11/package.json +2 -6
  560. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +9 -0
  561. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/controller/App.controller.js +7 -7
  562. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/test/integration/opaTests.qunit.js +5 -5
  563. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/test/integration/pages/Tutorial.js +1 -1
  564. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/package.json +2 -5
  565. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +8 -0
  566. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/webapp/test/integration/opaTests.qunit.js +6 -6
  567. package/test/sap/ui/core/frameoptions/createcontent.js +7 -6
  568. package/test/sap/ui/core/internal/samples/client/MusicCollection/index.html +1 -1
  569. package/test/sap/ui/core/internal/samples/composite/xmlcomposite/exStringAndFloat/Test.controller.js +3 -2
  570. package/test/sap/ui/core/internal/samples/odata/twoFields/Opa.qunit.html +1 -1
  571. package/test/sap/ui/core/internal/samples/odata/twoFields/Opa.qunit.js +8 -8
  572. package/test/sap/ui/core/internal/samples/odata/twoFields/index.html +1 -1
  573. package/test/sap/ui/core/internal/samples/odata/v2/Products/Opa.qunit.html +1 -1
  574. package/test/sap/ui/core/internal/samples/odata/v2/Products/Opa.qunit.js +7 -7
  575. package/test/sap/ui/core/internal/samples/odata/v2/Products/index.html +1 -1
  576. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Component.js +3 -2
  577. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/MIT.SalesOrders(V2).ODLB.create.html +2 -0
  578. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.controller.js +3 -3
  579. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Opa.qunit.html +1 -1
  580. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Opa.qunit.js +9 -6
  581. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/SandboxModel.js +3 -0
  582. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/data/ODLB.create/TC3/SalesOrderSet_desc_4-1.json +16 -0
  583. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/index.html +1 -1
  584. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/tests/ODataListBinding.create/TC3_SalesOrders_InlineCreationRow.js +9 -0
  585. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Component.js +3 -2
  586. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.controller.js +3 -3
  587. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/index.html +1 -1
  588. package/test/sap/ui/core/qunit/BlockLayerUtils.qunit.js +9 -7
  589. package/test/sap/ui/core/qunit/CalculatedFields.qunit.js +4 -2
  590. package/test/sap/ui/core/qunit/ContextMenuSupport.qunit.js +3 -2
  591. package/test/sap/ui/core/qunit/ControlDefinition.qunit.js +11 -10
  592. package/test/sap/ui/core/qunit/ControlRenderer.qunit.js +218 -223
  593. package/test/sap/ui/core/qunit/Core.qunit.js +35 -31
  594. package/test/sap/ui/core/qunit/CoreEvents.qunit.js +17 -15
  595. package/test/sap/ui/core/qunit/Core_repeatedExecution.qunit.js +3 -3
  596. package/test/sap/ui/core/qunit/CustomStyleClassSupport.qunit.js +4 -3
  597. package/test/sap/ui/core/qunit/Element_data.qunit.js +5 -5
  598. package/test/sap/ui/core/qunit/Element_destroy.qunit.js +6 -4
  599. package/test/sap/ui/core/qunit/Element_focus.qunit.js +25 -24
  600. package/test/sap/ui/core/qunit/Element_metadata_selector.qunit.js +3 -2
  601. package/test/sap/ui/core/qunit/EnabledPropagator.qunit.js +7 -6
  602. package/test/sap/ui/core/qunit/ExpressionParser.qunit.js +1 -1
  603. package/test/sap/ui/core/qunit/FastNavigationWithWebComponents.qunit.js +5 -5
  604. package/test/sap/ui/core/qunit/FieldGroup.qunit.js +9 -6
  605. package/test/sap/ui/core/qunit/FocusHandler.qunit.js +7 -6
  606. package/test/sap/ui/core/qunit/Fragment.qunit.js +35 -34
  607. package/test/sap/ui/core/qunit/Fragment_legacyAPIs.qunit.js +51 -50
  608. package/test/sap/ui/core/qunit/HTML.qunit.js +32 -32
  609. package/test/sap/ui/core/qunit/Icon.qunit.js +66 -65
  610. package/test/sap/ui/core/qunit/IconPool.qunit.js +2 -1
  611. package/test/sap/ui/core/qunit/InvisibleText.qunit.js +13 -12
  612. package/test/sap/ui/core/qunit/Lib.qunit.js +8 -8
  613. package/test/sap/ui/core/qunit/LocalBusyIndicator.qunit.js +24 -24
  614. package/test/sap/ui/core/qunit/RenderManager.qunit.js +54 -53
  615. package/test/sap/ui/core/qunit/ResizeHandler.qunit.js +8 -9
  616. package/test/sap/ui/core/qunit/ScrollBar.qunit.js +7 -6
  617. package/test/sap/ui/core/qunit/ShortcutHints.qunit.js +13 -11
  618. package/test/sap/ui/core/qunit/StashedControlSupport.qunit.js +6 -5
  619. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +5 -4
  620. package/test/sap/ui/core/qunit/Theming.qunit.js +88 -50
  621. package/test/sap/ui/core/qunit/Theming_default_and_fallback.qunit.js +130 -0
  622. package/test/sap/ui/core/qunit/TooltipBase.qunit.js +4 -3
  623. package/test/sap/ui/core/qunit/UIArea.qunit.js +248 -18
  624. package/test/sap/ui/core/qunit/analytics/testsuite4analytics.qunit.js +9 -8
  625. package/test/sap/ui/core/qunit/app/MessageListBinding.qunit.js +10 -10
  626. package/test/sap/ui/core/qunit/base/Config.qunit.js +12 -2
  627. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +123 -52
  628. package/test/sap/ui/core/qunit/base/Config_meta.qunit.html +2 -0
  629. package/test/sap/ui/core/qunit/base/config/GlobalConfig.js +3 -1
  630. package/test/sap/ui/core/qunit/base/config/GlobalConfigForCascade.js +4 -1
  631. package/test/sap/ui/core/qunit/bootstrap/BootstrapMinimal.qunit.js +3 -3
  632. package/test/sap/ui/core/qunit/bootstrap/BootstrapMinimal_legacyAPIs.qunit.js +13 -11
  633. package/test/sap/ui/core/qunit/bootstrap/BootstrapPreload.qunit.js +1 -1
  634. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithCustomScript_legacyAPIs.qunit.js +13 -11
  635. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithNoJQuery_legacyAPIs.qunit.js +7 -5
  636. package/test/sap/ui/core/qunit/bootstrap/CalendarClassLoadingWithCustomBootTaskAndPreload.qunit.js +12 -14
  637. package/test/sap/ui/core/qunit/bootstrap/CfgDefaults.qunit.js +3 -2
  638. package/test/sap/ui/core/qunit/bootstrap/CfgFromTagAttributes.qunit.js +1 -1
  639. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +12 -6
  640. package/test/sap/ui/core/qunit/component/Component.qunit.js +14 -15
  641. package/test/sap/ui/core/qunit/component/Component_unavoidablySync.qunit.js +4 -3
  642. package/test/sap/ui/core/qunit/component/Customizing.qunit.js +4 -5
  643. package/test/sap/ui/core/qunit/component/Customizing_async.qunit.js +4 -3
  644. package/test/sap/ui/core/qunit/component/Customizing_disabled.qunit.js +4 -6
  645. package/test/sap/ui/core/qunit/component/Customizing_legacyAPIs.qunit.js +3 -5
  646. package/test/sap/ui/core/qunit/component/Customizing_multi.qunit.js +3 -6
  647. package/test/sap/ui/core/qunit/component/Customizing_unavoidablySync.qunit.js +5 -8
  648. package/test/sap/ui/core/qunit/component/ExtensionPoint.qunit.js +4 -5
  649. package/test/sap/ui/core/qunit/component/ExtensionPoint_unavoidablySync.qunit.js +4 -3
  650. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +19 -19
  651. package/test/sap/ui/core/qunit/component/UIComponent_unavoidablySync.qunit.js +19 -19
  652. package/test/sap/ui/core/qunit/composite/XMLComposite.qunit.js +43 -43
  653. package/test/sap/ui/core/qunit/csp/ContentSecurityPolicy.qunit.js +18 -13
  654. package/test/sap/ui/core/qunit/dnd/DragAndDrop.qunit.js +19 -18
  655. package/test/sap/ui/core/qunit/dnd/DragInfo.qunit.js +13 -12
  656. package/test/sap/ui/core/qunit/dnd/DropInfo.qunit.js +5 -4
  657. package/test/sap/ui/core/qunit/generic/ControlMemoryLeaks.qunit.js +7 -6
  658. package/test/sap/ui/core/qunit/generic/DuplicateIdCheck.qunit.js +7 -6
  659. package/test/sap/ui/core/qunit/generic/legacy/ControlIterator.qunit.js +6 -6
  660. package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaks.qunit.js +20 -17
  661. package/test/sap/ui/core/qunit/generic/legacy/DuplicateIdCheck.qunit.js +8 -7
  662. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +1 -2
  663. package/test/sap/ui/core/qunit/internal/1Ring.qunit.html +14 -19
  664. package/test/sap/ui/core/qunit/internal/1Ring.qunit.js +34 -22
  665. package/test/sap/ui/core/qunit/internal/ODataV4.qunit.html +6 -6
  666. package/test/sap/ui/core/qunit/internal/testsuite.feature-odata-v4.qunit.js +4 -0
  667. package/test/sap/ui/core/qunit/isBehindOtherElement.qunit.js +7 -7
  668. package/test/sap/ui/core/qunit/jquery-mobile-custom.qunit.js +3 -3
  669. package/test/sap/ui/core/qunit/jquery.sap.events.qunit.js +3 -2
  670. package/test/sap/ui/core/qunit/jquery.sap.ui.qunit.js +16 -16
  671. package/test/sap/ui/core/qunit/messages/{MessageManager.qunit.js → Messaging.qunit.js} +46 -49
  672. package/test/sap/ui/core/qunit/messages/messagesDataBinding.qunit.js +3 -1
  673. package/test/sap/ui/core/qunit/messages/messagesEnd2End.qunit.js +10 -10
  674. package/test/sap/ui/core/qunit/messages/messagesGeneral.qunit.js +36 -46
  675. package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +25 -36
  676. package/test/sap/ui/core/qunit/messages/testsuite.messaging.base.qunit.js +2 -2
  677. package/test/sap/ui/core/qunit/model/Binding.qunit.js +8 -8
  678. package/test/sap/ui/core/qunit/model/controlhelper/TreeBindingProxy.qunit.js +24 -14
  679. package/test/sap/ui/core/qunit/mvc/AnyView.qunit.js +7 -6
  680. package/test/sap/ui/core/qunit/mvc/AnyViewAsync.qunit.js +3 -2
  681. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorAsync_unavoidablyUsingInlineStyle.qunit.js +5 -4
  682. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +8 -9
  683. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +45 -40
  684. package/test/sap/ui/core/qunit/mvc/testdata/stashed/OP.html +1 -1
  685. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing.qunit.js +15 -20
  686. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing_legacyAPIs.qunit.js +20 -25
  687. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AnyViewAsync_legacyAPIs.qunit.js +10 -11
  688. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AnyView_legacyAPIs.qunit.js +7 -6
  689. package/test/sap/ui/core/qunit/mvc_legacyAPIs/HTMLView_legacyAPIs.qunit.js +8 -7
  690. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLTemplateProcessorRequireXML_legacyAPIs.qunit.js +7 -7
  691. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLView_legacyAPIs.qunit.js +40 -47
  692. package/test/sap/ui/core/qunit/odata/ODataAnnotations.qunit.js +52 -20
  693. package/test/sap/ui/core/qunit/odata/{ODataListBinding.qunit.js → ODataListBinding_legacyAPIs.qunit.js} +27 -0
  694. package/test/sap/ui/core/qunit/odata/ODataMessageParser.qunit.js +44 -48
  695. package/test/sap/ui/core/qunit/odata/ODataMessageParserNoFakeService.qunit.js +8 -8
  696. package/test/sap/ui/core/qunit/odata/ODataMetaModel.qunit.js +66 -29
  697. package/test/sap/ui/core/qunit/odata/ODataMetadata.qunit.js +17 -7
  698. package/test/sap/ui/core/qunit/odata/ODataTreeBindingAdapter.qunit.js +147 -89
  699. package/test/sap/ui/core/qunit/odata/ODataUtils.qunit.js +1 -0
  700. package/test/sap/ui/core/qunit/odata/type/DateTimeBase.qunit.js +33 -12
  701. package/test/sap/ui/core/qunit/odata/type/TimeOfDay.qunit.js +33 -12
  702. package/test/sap/ui/core/qunit/odata/v2/CanonicalRequests.qunit.js +5 -4
  703. package/test/sap/ui/core/qunit/odata/v2/ODataListBindingNoFakeService.qunit.js +63 -13
  704. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +281 -59
  705. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +28 -4
  706. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingFlatNoFakeService.qunit.js +21 -0
  707. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingNoFakeService.qunit.js +1 -2
  708. package/test/sap/ui/core/qunit/odata/v2/ODataV2ListBinding.qunit.js +7 -207
  709. package/test/sap/ui/core/qunit/odata/v2/ODataV2ListBinding_Filter_legacyAPIs.qunit.js +281 -0
  710. package/test/sap/ui/core/qunit/odata/v2/ODataV2Model.qunit.js +9 -8
  711. package/test/sap/ui/core/qunit/odata/v2/ODataV2TreeBinding.qunit.js +1 -0
  712. package/test/sap/ui/core/qunit/odata/v2/V2ODataModel.qunit.js +95 -85
  713. package/test/sap/ui/core/qunit/odata/v2/V2ODataModelB.qunit.js +70 -67
  714. package/test/sap/ui/core/qunit/odata/v2/V2ODataModelDataState.qunit.js +19 -20
  715. package/test/sap/ui/core/qunit/odata/v2/testsuite.odatav2.qunit.js +4 -0
  716. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +50 -27
  717. package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +5 -0
  718. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +4 -3
  719. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +103 -14
  720. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1027 -31
  721. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +18 -17
  722. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +272 -36
  723. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +115 -82
  724. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +10 -0
  725. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +108 -10
  726. package/test/sap/ui/core/qunit/odata/v4/lib/_V2Requestor.qunit.js +1 -1
  727. package/test/sap/ui/core/qunit/opa/Opa5PageObject.qunit.js +5 -6
  728. package/test/sap/ui/core/qunit/opa/OpaPlugin.qunit.js +29 -42
  729. package/test/sap/ui/core/qunit/opa/RecordReplay.qunit.js +13 -14
  730. package/test/sap/ui/core/qunit/opa/_ControlFinder.qunit.js +5 -4
  731. package/test/sap/ui/core/qunit/opa/actions/Action.qunit.js +6 -5
  732. package/test/sap/ui/core/qunit/opa/actions/EnterText.qunit.js +22 -21
  733. package/test/sap/ui/core/qunit/opa/actions/Press.qunit.js +60 -56
  734. package/test/sap/ui/core/qunit/opa/autowaiter/_cssAnimationWaiter.js +5 -7
  735. package/test/sap/ui/core/qunit/opa/autowaiter/_cssTransitionWaiter.js +5 -9
  736. package/test/sap/ui/core/qunit/opa/autowaiter/_jsAnimationWaiter.js +5 -6
  737. package/test/sap/ui/core/qunit/opa/autowaiter/_navigationContainerWaiter.js +5 -4
  738. package/test/sap/ui/core/qunit/opa/autowaiter/_resourceWaiter.js +21 -20
  739. package/test/sap/ui/core/qunit/opa/fixture/bindingPath.js +6 -5
  740. package/test/sap/ui/core/qunit/opa/matchers/Interactable.qunit.js +7 -5
  741. package/test/sap/ui/core/qunit/opa/matchers/LabelFor.qunit.js +4 -3
  742. package/test/sap/ui/core/qunit/opa/matchers/Sibling.qunit.js +4 -3
  743. package/test/sap/ui/core/qunit/opa/matchers/Visible.qunit.js +6 -5
  744. package/test/sap/ui/core/qunit/opa/matchers/_Busy.qunit.js +28 -27
  745. package/test/sap/ui/core/qunit/opa/matchers/_Editable.qunit.js +11 -10
  746. package/test/sap/ui/core/qunit/opa/matchers/_Enabled.qunit.js +11 -10
  747. package/test/sap/ui/core/qunit/opa/matchers/_Visitor.qunit.js +5 -4
  748. package/test/sap/ui/core/qunit/opa/opa5/actions.qunit.js +8 -7
  749. package/test/sap/ui/core/qunit/opa/opa5/basics.qunit.js +12 -17
  750. package/test/sap/ui/core/qunit/opa/opa5/logging.qunit.js +5 -6
  751. package/test/sap/ui/core/qunit/opa/opa5/matchers.qunit.js +6 -5
  752. package/test/sap/ui/core/qunit/opa/selectors/_BindingPath.js +10 -9
  753. package/test/sap/ui/core/qunit/opa/selectors/_ControlSelectorGenerator.js +6 -7
  754. package/test/sap/ui/core/qunit/opa/selectors/_ControlSelectorValidator.js +4 -3
  755. package/test/sap/ui/core/qunit/opa/selectors/_DropdownItem.js +4 -3
  756. package/test/sap/ui/core/qunit/opa/selectors/_GlobalID.js +4 -3
  757. package/test/sap/ui/core/qunit/opa/selectors/_LabelFor.js +4 -3
  758. package/test/sap/ui/core/qunit/opa/selectors/_Properties.js +33 -27
  759. package/test/sap/ui/core/qunit/opa/selectors/_Selector.js +7 -10
  760. package/test/sap/ui/core/qunit/opa/selectors/_TableRowItem.js +5 -7
  761. package/test/sap/ui/core/qunit/opa/selectors/_ViewID.js +5 -7
  762. package/test/sap/ui/core/qunit/performance/trace/Interaction.qunit.js +35 -28
  763. package/test/sap/ui/core/qunit/routing/Placeholder.qunit.js +11 -9
  764. package/test/sap/ui/core/qunit/routing/PlaceholderOptOut.qunit.js +5 -3
  765. package/test/sap/ui/core/qunit/routing/async/Router.qunit.js +57 -0
  766. package/test/sap/ui/core/qunit/routing/fixture/historyIframe/iframe/index.html +1 -1
  767. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Child/Component.js +30 -0
  768. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Child/manifest.json +25 -0
  769. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Parent/Component.js +14 -0
  770. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Parent/manifest.json +51 -0
  771. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Parent/view/NotFound.view.xml +3 -0
  772. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Parent/view/RootView.view.xml +5 -0
  773. package/test/sap/ui/core/qunit/rule/app/syncXHR.qunit.js +24 -17
  774. package/test/sap/ui/core/qunit/rule/app/syncXHRBootstrap.qunit.js +3 -3
  775. package/test/sap/ui/core/qunit/rule/app/syncXHRBootstrapDebug.qunit.js +3 -3
  776. package/test/sap/ui/core/qunit/rule/config/asynchronousXMLViews.qunit.js +9 -18
  777. package/test/sap/ui/core/qunit/support/techinfo/TechnicalInfoTestbench.html +3 -1
  778. package/test/sap/ui/core/qunit/test/starter/find/index.html +1 -1
  779. package/test/sap/ui/core/qunit/test/starter/find/main.js +3 -2
  780. package/test/sap/ui/core/qunit/testsuite.core.framework.qunit.js +0 -6
  781. package/test/sap/ui/core/qunit/testsuites/testsuite.base.configuration.qunit.js +1 -1
  782. package/test/sap/ui/core/qunit/testsuites/testsuite.databinding.qunit.js +10 -6
  783. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +27 -4
  784. package/test/sap/ui/core/qunit/tmpl/Template.qunit.js +36 -35
  785. package/test/sap/ui/core/qunit/types/DateFormat.qunit.js +13 -0
  786. package/test/sap/ui/core/qunit/types/DateInterval.qunit.js +2 -2
  787. package/test/sap/ui/core/qunit/util/BusyIndicatorNoCore.qunit.js +2 -2
  788. package/test/sap/ui/core/qunit/util/InvisibleMessage.qunit.js +4 -4
  789. package/test/sap/ui/core/qunit/util/LabelEnablement.qunit.js +27 -31
  790. package/test/sap/ui/core/qunit/util/Popup.qunit.js +27 -27
  791. package/test/sap/ui/core/qunit/util/ResponsivePaddingsEnablement.qunit.js +13 -9
  792. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +37 -6
  793. package/test/sap/ui/core/qunit/util/jQuery.sap.measure.qunit.js +1 -1
  794. package/test/sap/ui/core/qunit/util/jquery.sap.dom.qunit.js +3 -2
  795. package/test/sap/ui/core/qunit/util/reflection/JsControlTreeModifier.qunit.js +8 -8
  796. package/test/sap/ui/core/qunit/util/reflection/XmlTreeModifier.qunit.js +24 -24
  797. package/test/sap/ui/core/qunit/util/static/TechnicalInfoTestbenchInit.js +8 -2
  798. package/test/sap/ui/core/qunit/webc/WebComponent.qunit.js +188 -0
  799. package/test/sap/ui/core/qunit/webc/testsuite.webc.qunit.html +14 -0
  800. package/test/sap/ui/core/qunit/webc/testsuite.webc.qunit.js +22 -0
  801. package/test/sap/ui/core/relnotes/changes-1.117.json +1 -34
  802. package/test/sap/ui/core/relnotes/changes-1.118.json +143 -0
  803. package/test/sap/ui/core/samples/components/resourcesCSS/index.html +1 -1
  804. package/test/sap/ui/core/samples/databinding/DataBinding.html +3 -1
  805. package/test/sap/ui/core/samples/databinding/DataBindingAsyncType.html +3 -2
  806. package/test/sap/ui/core/samples/databinding/DataBindingCalculatedFields.html +3 -1
  807. package/test/sap/ui/core/samples/databinding/DataBindingList.html +3 -1
  808. package/test/sap/ui/core/samples/databinding/DataBindingListNamedModel.html +3 -1
  809. package/test/sap/ui/core/samples/databinding/DataBindingListXML.html +3 -1
  810. package/test/sap/ui/core/samples/databinding/DataBindingMultiModel.html +3 -1
  811. package/test/sap/ui/core/samples/databinding/DataBindingSortingFiltering.html +3 -1
  812. package/test/sap/ui/core/samples/databinding/DataBindingTreeLarge.html +102 -113
  813. package/test/sap/ui/core/samples/databinding/DataBindingTwoWay.html +3 -1
  814. package/test/sap/ui/core/samples/databinding/DataBindingTwoWayTable.html +90 -89
  815. package/test/sap/ui/core/samples/databinding/DataBindingValidation.html +149 -148
  816. package/test/sap/ui/core/samples/databinding/DataBindingXML.html +3 -2
  817. package/test/sap/ui/core/samples/databinding/DatabindingMessages.html +158 -153
  818. package/test/sap/ui/core/samples/databinding/ODatabindingMessages.html +4 -6
  819. package/test/sap/ui/core/samples/databinding/UnitTableMain.js +3 -4
  820. package/test/sap/ui/core/samples/extensions/index_legacyAPIs.html +15 -13
  821. package/test/sap/ui/core/samples/formatting/controller/ChooseFormatOptions.controller.js +3 -2
  822. package/test/sap/ui/core/samples/mvc/ExtendedXMLViewEventHandlerSyntax.html +5 -3
  823. package/test/sap/ui/core/samples/mvc/XMLViewBindableAggregation.html +1 -1
  824. package/test/testsuite/testframe.html +4 -4
  825. package/src/ui5-boot.js +0 -50
  826. package/test/sap/ui/core/qunit/CoreLock.qunit.js +0 -61
  827. package/test/sap/ui/core/qunit/internal/ODataV4.qunit.js +0 -30
  828. /package/test/sap/ui/core/qunit/{MasterDetail.qunit.js → MasterDetail_legacyAPIs.qunit.js} +0 -0
  829. /package/test/sap/ui/core/qunit/odata/{ODataModel.qunit.js → ODataModel_legacyAPIs.qunit.js} +0 -0
  830. /package/test/sap/ui/core/qunit/odata/{ODataSharedMetadata.qunit.js → ODataSharedMetadata_legacyAPIs.qunit.js} +0 -0
  831. /package/test/sap/ui/core/qunit/odata/{ODataTreeBinding.qunit.js → ODataTreeBinding_legacyAPIs.qunit.js} +0 -0
@@ -14,6 +14,8 @@ sap.ui.define([
14
14
  "sap/ui/base/EventProvider",
15
15
  "sap/ui/base/SyncPromise",
16
16
  "sap/ui/core/Configuration",
17
+ "sap/ui/core/Messaging",
18
+ "sap/ui/core/Rendering",
17
19
  "sap/ui/core/mvc/Controller",
18
20
  "sap/ui/core/mvc/View",
19
21
  "sap/ui/model/ChangeReason",
@@ -34,10 +36,10 @@ sap.ui.define([
34
36
  // load Table resources upfront to avoid loading times > 1 second for the first test using Table
35
37
  "sap/ui/table/Table"
36
38
  ], function (Log, uid, UriParameters, ColumnListItem, CustomListItem, FlexBox, _MessageStrip, Text,
37
- Device, EventProvider, SyncPromise, Configuration, Controller, View, ChangeReason, Filter,
38
- FilterOperator, FilterType, Sorter, OperationMode, AnnotationHelper, ODataListBinding,
39
- ODataMetaModel, ODataModel, ODataPropertyBinding, ValueListType, _Helper, TestUtils,
40
- XMLHelper) {
39
+ Device, EventProvider, SyncPromise, Configuration, Messaging, Rendering, Controller, View,
40
+ ChangeReason, Filter, FilterOperator, FilterType, Sorter, OperationMode, AnnotationHelper,
41
+ ODataListBinding, ODataMetaModel, ODataModel, ODataPropertyBinding, ValueListType, _Helper,
42
+ TestUtils, XMLHelper) {
41
43
  /*eslint no-sparse-arrays: 0, "max-len": ["error", {"code": 100,
42
44
  "ignorePattern": "/sap/opu/odata4/|\" :$|\" : \\{$|\\{meta>"}], */
43
45
  "use strict";
@@ -554,7 +556,7 @@ sap.ui.define([
554
556
  if (that.oModel) {
555
557
  that.oModel.destroy();
556
558
  }
557
- sap.ui.getCore().getMessageManager().removeAllMessages();
559
+ Messaging.removeAllMessages();
558
560
  // reset the language
559
561
  Configuration.setLanguage(sDefaultLanguage);
560
562
  }
@@ -665,9 +667,9 @@ sap.ui.define([
665
667
  }
666
668
  delete this.mListChanges[sControlId];
667
669
  }
668
- if (sap.ui.getCore().getUIDirty() || this.oModel && this.oModel.aPrerenderingTasks
669
- || sap.ui.getCore().getMessageManager().getMessageModel().getObject("/").length
670
- < this.aMessages.length) {
670
+
671
+ if (Rendering.isPending() || this.oModel && this.oModel.aPrerenderingTasks
672
+ || Messaging.getMessageModel().getObject("/").length < this.aMessages.length) {
671
673
  setTimeout(this.checkFinish.bind(this, assert), 10);
672
674
  } else if (this.resolve) {
673
675
  this.resolve();
@@ -681,7 +683,7 @@ sap.ui.define([
681
683
  * @param {object} assert The QUnit assert object
682
684
  */
683
685
  checkMessages : function (assert) {
684
- var aCurrentMessages = sap.ui.getCore().getMessageManager().getMessageModel()
686
+ var aCurrentMessages = Messaging.getMessageModel()
685
687
  .getObject("/").map(function (oMessage) {
686
688
  var aTargets = oMessage.getTargets().map(function (sTarget) {
687
689
  return normalizeUID(sTarget);
@@ -1583,7 +1585,7 @@ sap.ui.define([
1583
1585
 
1584
1586
  oView.setModel(that.oModel);
1585
1587
  // enable parse error messages in the message manager
1586
- sap.ui.getCore().getMessageManager().registerObject(oView, true);
1588
+ Messaging.registerObject(oView, true);
1587
1589
  // Place the view in the page so that it is actually rendered. In some situations,
1588
1590
  // esp. for the sap.ui.table.Table this is essential.
1589
1591
  oView.placeAt("qunit-fixture");
@@ -24820,11 +24822,6 @@ sap.ui.define([
24820
24822
  ]);
24821
24823
  assert.strictEqual(oListBinding.getCount(), 1, "count of nodes"); // code under test
24822
24824
 
24823
- assert.throws(function () {
24824
- // code under test (JIRA: CPOUI5ODATAV4-1851)
24825
- oRoot.delete();
24826
- }, new Error("Cannot delete " + oRoot + " when using data aggregation"));
24827
-
24828
24825
  assert.throws(function () {
24829
24826
  // code under test (JIRA: CPOUI5ODATAV4-1851)
24830
24827
  oRoot.requestRefresh();
@@ -24874,7 +24871,7 @@ sap.ui.define([
24874
24871
  assert.strictEqual(oRoot.getProperty("defaultChannel"), "260", "360 has been ignored");
24875
24872
 
24876
24873
  that.expectMessages([]);
24877
- sap.ui.getCore().getMessageManager().removeAllMessages(); // clean up
24874
+ Messaging.removeAllMessages(); // clean up
24878
24875
 
24879
24876
  // Note: why is there no separate GET? because we have already loaded messages above!
24880
24877
  // that.expectRequest("Artists(ArtistID='0',IsActiveEntity=true)?$select=Messages");
@@ -27474,13 +27471,686 @@ sap.ui.define([
27474
27471
  });
27475
27472
  });
27476
27473
 
27474
+ //*********************************************************************************************
27475
+ // Scenario: Deferred delete and reinsert of a top-level node in a recursive hierarchy. Only
27476
+ // one node, so that the parent would have to become a leaf if there were one.
27477
+ // JIRA: CPOUI5ODATAV4-2224
27478
+ QUnit.test("Recursive Hierarchy: delete top-level", async function (assert) {
27479
+ const oModel = this.createTeaBusiModel({autoExpandSelect : true});
27480
+ const sView = `
27481
+ <Table id="table" items="{path : '/EMPLOYEES',
27482
+ parameters : {
27483
+ $$aggregation : {
27484
+ hierarchyQualifier : 'OrgChart'
27485
+ }
27486
+ }}">
27487
+ <Text text="{ID}"/>
27488
+ <Text id="name" text="{Name}"/>
27489
+ </Table>`;
27490
+
27491
+ this.expectRequest("EMPLOYEES?$apply=com.sap.vocabularies.Hierarchy.v1.TopLevels"
27492
+ + "(HierarchyNodes=$root/EMPLOYEES,HierarchyQualifier='OrgChart',NodeProperty='ID'"
27493
+ + ",Levels=1)"
27494
+ + "&$select=DrillState,ID,Name&$count=true&$skip=0&$top=100", {
27495
+ "@odata.count" : "1",
27496
+ value : [{
27497
+ ID : "0",
27498
+ Name : "Alpha"
27499
+ }]
27500
+ })
27501
+ .expectChange("name", ["Alpha"]);
27502
+
27503
+ await this.createView(assert, sView, oModel);
27504
+
27505
+ const oTable = this.oView.byId("table");
27506
+ const oAlpha = oTable.getItems()[0].getBindingContext();
27507
+ // code under test
27508
+ const oDeletePromise = oAlpha.delete("doNotSubmit");
27509
+
27510
+ await resolveLater(); // no observable changes
27511
+
27512
+ checkTable("after delete", assert, oTable, [], [], 0);
27513
+
27514
+ this.expectCanceledError("Failed to delete /EMPLOYEES('0')",
27515
+ "Request canceled: DELETE EMPLOYEES('0'); group: doNotSubmit")
27516
+ .expectChange("name", ["Alpha"]);
27517
+
27518
+ // code under test
27519
+ oAlpha.resetChanges();
27520
+
27521
+ await Promise.all([
27522
+ checkCanceled(assert, oDeletePromise),
27523
+ this.waitForChanges(assert, "cancel delete")
27524
+ ]);
27525
+
27526
+ checkTable("after reinsert", assert, oTable, ["/EMPLOYEES('0')"], [
27527
+ ["0", "Alpha"]
27528
+ ], 1);
27529
+ });
27530
+
27531
+ //*********************************************************************************************
27532
+ // Scenario: Deferred delete of Gamma, a leaf in a recursive hierarchy which is not the only
27533
+ // child of its parent. Before the delete ensure that there are two invisible elements (Delta,
27534
+ // Epsilon). See that Gamma is deleted on the UI immediately. Request side effects so that
27535
+ // Epsilon is removed again. Scroll down to see that Epsilon and Zeta are requested correctly.
27536
+ // Cancel the delete and check that Gamma is restored correcty. Scroll down to the end to see
27537
+ // that Eta and Theta are requested correctly.
27538
+ // ("Pi" is attached to a name when it is read a second time.)
27539
+ // JIRA: CPOUI5ODATAV4-2224
27540
+ QUnit.test("Recursive Hierarchy: delete second leaf", function (assert) {
27541
+ var oDeletePromise, oGamma, oTable;
27542
+
27543
+ const oModel = this.createTeaBusiModel({autoExpandSelect : true});
27544
+ const sView = `
27545
+ <t:Table id="table" rows="{path : '/EMPLOYEES',
27546
+ parameters : {
27547
+ $$aggregation : {
27548
+ hierarchyQualifier : 'OrgChart'
27549
+ }
27550
+ }}" threshold="0" visibleRowCount="3" >
27551
+ <Text text="{= %{@$ui5.node.isExpanded} }"/>
27552
+ <Text text="{= %{@$ui5.node.level} }"/>
27553
+ <Text text="{ID}"/>
27554
+ <Text text="{MANAGER_ID}"/>
27555
+ <Text id="name" text="{Name}"/>
27556
+ </t:Table>`;
27557
+ const that = this;
27558
+
27559
+ // 0 Alpha
27560
+ // 1 Beta
27561
+ // 2 Gamma (deleted)
27562
+ // 3 Delta (read via expand, comes into view due to delete)
27563
+ // 4 Epsilon (exists hidden during delete, then dropped and read again via paging)
27564
+ // 5 Zeta (read via paging after delete)
27565
+ // 6 Eta (read via paging after reset)
27566
+ // 7 Theta
27567
+ this.expectRequest("EMPLOYEES?$apply=com.sap.vocabularies.Hierarchy.v1.TopLevels"
27568
+ + "(HierarchyNodes=$root/EMPLOYEES,HierarchyQualifier='OrgChart',NodeProperty='ID'"
27569
+ + ",Levels=1)"
27570
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$count=true&$skip=0&$top=3", {
27571
+ "@odata.count" : "2",
27572
+ value : [{
27573
+ DrillState : "collapsed",
27574
+ ID : "0",
27575
+ MANAGER_ID : null,
27576
+ Name : "Alpha"
27577
+ }, {
27578
+ DrillState : "collapsed",
27579
+ ID : "7",
27580
+ MANAGER_ID : null,
27581
+ Name : "Theta"
27582
+ }]
27583
+ })
27584
+ .expectChange("name", ["Alpha", "Theta"]);
27585
+
27586
+ return this.createView(assert, sView, oModel).then(function () {
27587
+ oTable = that.oView.byId("table");
27588
+
27589
+ that.expectRequest("EMPLOYEES?"
27590
+ + "$apply=descendants($root/EMPLOYEES,OrgChart,ID,filter(ID eq '0'),1)"
27591
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$count=true&$skip=0&$top=3", {
27592
+ "@odata.count" : "6",
27593
+ value : [{
27594
+ DrillState : "collapsed",
27595
+ ID : "1",
27596
+ MANAGER_ID : "0",
27597
+ Name : "Beta"
27598
+ }, {
27599
+ DrillState : "leaf",
27600
+ ID : "2",
27601
+ MANAGER_ID : "0",
27602
+ Name : "Gamma"
27603
+ }, {
27604
+ DrillState : "leaf",
27605
+ ID : "3",
27606
+ MANAGER_ID : "0",
27607
+ Name : "Delta"
27608
+ }]
27609
+ })
27610
+ .expectChange("name", [, "Beta", "Gamma"]);
27611
+
27612
+ oTable.getRows()[0].getBindingContext().expand();
27613
+
27614
+ return that.waitForChanges(assert, "expand");
27615
+ }).then(function () {
27616
+ that.expectRequest("EMPLOYEES"
27617
+ + "?$apply=descendants($root/EMPLOYEES,OrgChart,ID,filter(ID eq '0'),1)"
27618
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$skip=3&$top=1", {
27619
+ value : [{
27620
+ DrillState : "leaf",
27621
+ ID : "4",
27622
+ MANAGER_ID : "0",
27623
+ Name : "Epsilon"
27624
+ }]
27625
+ })
27626
+ .expectChange("name", [,, "Gamma", "Delta", "Epsilon"]);
27627
+
27628
+ // code under test
27629
+ oTable.setFirstVisibleRow(2);
27630
+
27631
+ return that.waitForChanges(assert, "scroll down");
27632
+ }).then(function () {
27633
+ that.expectChange("name", ["Alpha", "Beta", "Gamma"]);
27634
+
27635
+ // code under test
27636
+ oTable.setFirstVisibleRow(0);
27637
+
27638
+ return that.waitForChanges(assert, "scroll up");
27639
+ }).then(function () {
27640
+ checkTable("before delete", assert, oTable, [
27641
+ "/EMPLOYEES('0')",
27642
+ "/EMPLOYEES('1')",
27643
+ "/EMPLOYEES('2')",
27644
+ "/EMPLOYEES('3')",
27645
+ "/EMPLOYEES('4')",
27646
+ "/EMPLOYEES('7')"
27647
+ ], [
27648
+ [true, 1, "0", "", "Alpha"],
27649
+ [false, 2, "1", "0", "Beta"],
27650
+ [undefined, 2, "2", "0", "Gamma"]
27651
+ ], 8);
27652
+
27653
+ that.expectChange("name", [,, "Delta"]);
27654
+
27655
+ oGamma = oTable.getRows()[2].getBindingContext();
27656
+ // code under test
27657
+ oDeletePromise = oGamma.delete("doNotSubmit");
27658
+
27659
+ return that.waitForChanges(assert, "delete");
27660
+ }).then(function () {
27661
+ checkTable("after delete", assert, oTable, [
27662
+ "/EMPLOYEES('0')",
27663
+ "/EMPLOYEES('1')",
27664
+ "/EMPLOYEES('3')",
27665
+ "/EMPLOYEES('4')",
27666
+ "/EMPLOYEES('7')"
27667
+ ], [
27668
+ [true, 1, "0", "", "Alpha"],
27669
+ [false, 2, "1", "0", "Beta"],
27670
+ [undefined, 2, "3", "0", "Delta"]
27671
+ ], 7);
27672
+
27673
+ that.expectRequest("EMPLOYEES?$select=ID,Name"
27674
+ + "&$filter=ID eq '0' or ID eq '1' or ID eq '3'&$top=3", {
27675
+ value : [{
27676
+ ID : "0",
27677
+ Name : "Alpha Pi"
27678
+ }, {
27679
+ ID : "1",
27680
+ Name : "Beta Pi"
27681
+ }, {
27682
+ ID : "3",
27683
+ Name : "Delta Pi"
27684
+ }]
27685
+ })
27686
+ .expectChange("name", ["Alpha Pi", "Beta Pi", "Delta Pi"]);
27687
+
27688
+ return Promise.all([
27689
+ // code under test
27690
+ oGamma.getBinding().getHeaderContext().requestSideEffects(["Name"]),
27691
+ that.waitForChanges(assert, "side effects")
27692
+ ]);
27693
+ }).then(function () {
27694
+ that.expectRequest("EMPLOYEES"
27695
+ + "?$apply=descendants($root/EMPLOYEES,OrgChart,ID,filter(ID eq '0'),1)"
27696
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$filter=not (ID eq '2')"
27697
+ + "&$skip=2&$top=2", {
27698
+ "@odata.count" : "5",
27699
+ value : [{
27700
+ DrillState : "leaf",
27701
+ ID : "4",
27702
+ MANAGER_ID : "0",
27703
+ Name : "Epsilon Pi"
27704
+ }, {
27705
+ DrillState : "collapsed",
27706
+ ID : "5",
27707
+ MANAGER_ID : "0",
27708
+ Name : "Zeta"
27709
+ }]
27710
+ })
27711
+ .expectChange("name", [,, "Delta Pi", "Epsilon Pi", "Zeta"]);
27712
+
27713
+ // code under test
27714
+ oTable.setFirstVisibleRow(2);
27715
+
27716
+ return that.waitForChanges(assert, "scroll while deleted");
27717
+ }).then(function () {
27718
+ checkTable("after scroll while deleted", assert, oTable, [
27719
+ "/EMPLOYEES('0')",
27720
+ "/EMPLOYEES('1')",
27721
+ "/EMPLOYEES('3')",
27722
+ "/EMPLOYEES('4')",
27723
+ "/EMPLOYEES('5')"
27724
+ ], [
27725
+ [undefined, 2, "3", "0", "Delta Pi"],
27726
+ [undefined, 2, "4", "0", "Epsilon Pi"],
27727
+ [false, 2, "5", "0", "Zeta"]
27728
+ ], 7);
27729
+
27730
+ that.expectCanceledError("Failed to delete /EMPLOYEES('2')",
27731
+ "Request canceled: DELETE EMPLOYEES('2'); group: doNotSubmit")
27732
+ .expectChange("name", [,, "Gamma", "Delta Pi", "Epsilon Pi", "Zeta"]);
27733
+
27734
+ // code under test
27735
+ oGamma.resetChanges();
27736
+
27737
+ return checkCanceled(assert, oDeletePromise);
27738
+ }).then(function () {
27739
+ checkTable("after reset", assert, oTable, [
27740
+ "/EMPLOYEES('0')",
27741
+ "/EMPLOYEES('1')",
27742
+ "/EMPLOYEES('2')",
27743
+ "/EMPLOYEES('3')",
27744
+ "/EMPLOYEES('4')",
27745
+ "/EMPLOYEES('5')"
27746
+ ], [
27747
+ [undefined, 2, "2", "0", "Gamma"],
27748
+ [undefined, 2, "3", "0", "Delta Pi"],
27749
+ [undefined, 2, "4", "0", "Epsilon Pi"]
27750
+ ], 8);
27751
+
27752
+ that.expectRequest("EMPLOYEES"
27753
+ + "?$apply=descendants($root/EMPLOYEES,OrgChart,ID,filter(ID eq '0'),1)"
27754
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$skip=5&$top=1", {
27755
+ value : [{
27756
+ DrillState : "collapsed",
27757
+ ID : "6",
27758
+ MANAGER_ID : "0",
27759
+ Name : "Eta"
27760
+ }]
27761
+ })
27762
+ .expectRequest("EMPLOYEES?$apply=com.sap.vocabularies.Hierarchy.v1.TopLevels"
27763
+ + "(HierarchyNodes=$root/EMPLOYEES,HierarchyQualifier='OrgChart'"
27764
+ + ",NodeProperty='ID',Levels=1)"
27765
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$skip=1&$top=1", {
27766
+ value : [{
27767
+ DrillState : "collapsed",
27768
+ ID : "7",
27769
+ MANAGER_ID : null,
27770
+ Name : "Theta Pi"
27771
+ }]
27772
+ })
27773
+ .expectChange("name", [,,,,,, "Eta", "Theta Pi"]);
27774
+
27775
+ // code under test
27776
+ oTable.setFirstVisibleRow(5);
27777
+
27778
+ return that.waitForChanges(assert, "scroll to bottom");
27779
+ }).then(function () {
27780
+ checkTable("after scroll to bottom", assert, oTable, [
27781
+ "/EMPLOYEES('0')",
27782
+ "/EMPLOYEES('1')",
27783
+ "/EMPLOYEES('2')",
27784
+ "/EMPLOYEES('3')",
27785
+ "/EMPLOYEES('4')",
27786
+ "/EMPLOYEES('5')",
27787
+ "/EMPLOYEES('6')",
27788
+ "/EMPLOYEES('7')"
27789
+ ], [
27790
+ [false, 2, "5", "0", "Zeta"],
27791
+ [false, 2, "6", "0", "Eta"],
27792
+ [false, 1, "7", "", "Theta Pi"]
27793
+ ], 8);
27794
+ });
27795
+ });
27796
+
27797
+ //*********************************************************************************************
27798
+ // Scenario: Deferred delete of a non-leaf node with loaded children in a recursive hierarchy
27799
+ // which is the only child of its parent. Two variants: delete while collapsed and while
27800
+ // expanded.
27801
+ // * Expand Alpha and Beta.
27802
+ // * Collapse Beta (in variant 1).
27803
+ // * Delete Beta in an API group. See that Alpha becomes a leaf.
27804
+ // * Cancel the delete.
27805
+ // * Expand Beta without a further request (in variant 1).
27806
+ // * See that Alpha is expanded, and that Gamma is shown again.
27807
+ // JIRA: CPOUI5ODATAV4-2224
27808
+ [false, true].forEach(function (bExpanded) {
27809
+ const sState = bExpanded ? "expanded" : "collapsed";
27810
+ QUnit.test(`Recursive Hierarchy: delete single ${sState} child`, async function (assert) {
27811
+ const oModel = this.createTeaBusiModel({autoExpandSelect : true});
27812
+ const sView = `
27813
+ <Table id="table" items="{path : '/EMPLOYEES',
27814
+ parameters : {
27815
+ $$aggregation : {
27816
+ hierarchyQualifier : 'OrgChart'
27817
+ }
27818
+ }}">
27819
+ <Text id="expanded" text="{= %{@$ui5.node.isExpanded} }"/>
27820
+ <Text text="{= %{@$ui5.node.level} }"/>
27821
+ <Text text="{ID}"/>
27822
+ <Text text="{MANAGER_ID}"/>
27823
+ <Text id="name" text="{Name}"/>
27824
+ </Table>`;
27825
+
27826
+ // 0 Alpha
27827
+ // 1 Beta (deleted while Gamma is loaded)
27828
+ // 2 Gamma (must not get lost)
27829
+ // 3 Delta (only helps with the eventing)
27830
+ this.expectRequest("EMPLOYEES?$apply=com.sap.vocabularies.Hierarchy.v1.TopLevels"
27831
+ + "(HierarchyNodes=$root/EMPLOYEES,HierarchyQualifier='OrgChart',NodeProperty='ID'"
27832
+ + ",Levels=1)"
27833
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$count=true&$skip=0&$top=100", {
27834
+ "@odata.count" : "2",
27835
+ value : [{
27836
+ DrillState : "collapsed",
27837
+ ID : "0",
27838
+ MANAGER_ID : null,
27839
+ Name : "Alpha"
27840
+ }, {
27841
+ DrillState : "collapsed",
27842
+ ID : "3",
27843
+ MANAGER_ID : null,
27844
+ Name : "Delta"
27845
+ }]
27846
+ })
27847
+ .expectChange("expanded", [false, false])
27848
+ .expectChange("name", ["Alpha", "Delta"]);
27849
+
27850
+ await this.createView(assert, sView, oModel);
27851
+
27852
+ this.expectRequest("EMPLOYEES"
27853
+ + "?$apply=descendants($root/EMPLOYEES,OrgChart,ID,filter(ID eq '0'),1)"
27854
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$count=true&$skip=0&$top=100", {
27855
+ "@odata.count" : "1",
27856
+ value : [{
27857
+ DrillState : "collapsed",
27858
+ ID : "1",
27859
+ MANAGER_ID : "0",
27860
+ Name : "Beta"
27861
+ }]
27862
+ })
27863
+ .expectChange("expanded", [true,, false])
27864
+ .expectChange("name", [, "Beta", "Delta"]);
27865
+
27866
+ const oTable = this.oView.byId("table");
27867
+ oTable.getItems()[0].getBindingContext().expand();
27868
+
27869
+ await this.waitForChanges(assert, "expand Alpha");
27870
+
27871
+ this.expectRequest("EMPLOYEES"
27872
+ + "?$apply=descendants($root/EMPLOYEES,OrgChart,ID,filter(ID eq '1'),1)"
27873
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$count=true&$skip=0&$top=100", {
27874
+ "@odata.count" : "1",
27875
+ value : [{
27876
+ DrillState : "collapsed",
27877
+ ID : "2",
27878
+ MANAGER_ID : "1",
27879
+ Name : "Gamma"
27880
+ }]
27881
+ })
27882
+ .expectChange("expanded", [, true,, false])
27883
+ .expectChange("name", [,, "Gamma", "Delta"]);
27884
+
27885
+ const oBeta = oTable.getItems()[1].getBindingContext();
27886
+ oBeta.expand();
27887
+
27888
+ await this.waitForChanges(assert, "expand Beta");
27889
+
27890
+ checkTable("after expand", assert, oTable, [
27891
+ "/EMPLOYEES('0')",
27892
+ "/EMPLOYEES('1')",
27893
+ "/EMPLOYEES('2')",
27894
+ "/EMPLOYEES('3')"
27895
+ ], [
27896
+ [true, 1, "0", "", "Alpha"],
27897
+ [true, 2, "1", "0", "Beta"],
27898
+ [false, 3, "2", "1", "Gamma"],
27899
+ [false, 1, "3", "", "Delta"]
27900
+ ], 4);
27901
+
27902
+ if (bExpanded) {
27903
+ this.expectChange("expanded", [, false]); // Beta is collapsed before being deleted
27904
+ } else {
27905
+ this.expectChange("expanded", [, false])
27906
+ .expectChange("name", [,, "Delta"]);
27907
+
27908
+ oBeta.collapse();
27909
+
27910
+ await this.waitForChanges(assert, "collapse Beta");
27911
+
27912
+ checkTable("after collapse", assert, oTable, [
27913
+ "/EMPLOYEES('0')",
27914
+ "/EMPLOYEES('1')",
27915
+ "/EMPLOYEES('3')"
27916
+ ], [
27917
+ [true, 1, "0", "", "Alpha"],
27918
+ [false, 2, "1", "0", "Beta"],
27919
+ [false, 1, "3", "", "Delta"]
27920
+ ], 3);
27921
+ }
27922
+
27923
+ this.expectChange("expanded", [undefined]) // Alpha is now a leaf
27924
+ .expectChange("name", [, "Delta"]);
27925
+
27926
+ // code under test
27927
+ const oDeletePromise = oBeta.delete("doNotSubmit");
27928
+
27929
+ await this.waitForChanges(assert, "delete Beta");
27930
+
27931
+ checkTable("after delete", assert, oTable, [
27932
+ "/EMPLOYEES('0')",
27933
+ "/EMPLOYEES('3')"
27934
+ ], [
27935
+ [undefined, 1, "0", "", "Alpha"], // now a leaf
27936
+ [false, 1, "3", "", "Delta"]
27937
+ ], 2);
27938
+
27939
+ this.expectCanceledError("Failed to delete /EMPLOYEES('1')",
27940
+ "Request canceled: DELETE EMPLOYEES('1'); group: doNotSubmit");
27941
+ if (bExpanded) {
27942
+ // Alpha is expanded again, Beta is expanded after being restored
27943
+ this.expectChange("expanded", [true, true, false, false])
27944
+ .expectChange("name", [, "Beta", "Gamma", "Delta"]);
27945
+ } else {
27946
+ this.expectChange("expanded", [true,, false]) // Alpha is expanded again
27947
+ .expectChange("name", [, "Beta", "Delta"]);
27948
+ }
27949
+
27950
+ // code under test
27951
+ oBeta.resetChanges();
27952
+
27953
+ await Promise.all([
27954
+ checkCanceled(assert, oDeletePromise),
27955
+ this.waitForChanges(assert, "cancel")
27956
+ ]);
27957
+
27958
+ if (!bExpanded) {
27959
+ checkTable("after reset", assert, oTable, [
27960
+ "/EMPLOYEES('0')",
27961
+ "/EMPLOYEES('1')",
27962
+ "/EMPLOYEES('3')"
27963
+ ], [
27964
+ [true, 1, "0", "", "Alpha"], // expanded again
27965
+ [false, 2, "1", "0", "Beta"],
27966
+ [false, 1, "3", "", "Delta"]
27967
+ ], 3);
27968
+
27969
+ this.expectChange("expanded", [, true, , false])
27970
+ .expectChange("name", [, , "Gamma", "Delta"]);
27971
+
27972
+ // code under test
27973
+ oBeta.expand();
27974
+
27975
+ await this.waitForChanges(assert, "expand again");
27976
+ }
27977
+
27978
+ checkTable("finally", assert, oTable, [
27979
+ "/EMPLOYEES('0')",
27980
+ "/EMPLOYEES('1')",
27981
+ "/EMPLOYEES('2')",
27982
+ "/EMPLOYEES('3')"
27983
+ ], [
27984
+ [true, 1, "0", "", "Alpha"],
27985
+ [true, 2, "1", "0", "Beta"],
27986
+ [false, 3, "2", "1", "Gamma"],
27987
+ [false, 1, "3", "", "Delta"]
27988
+ ], 4);
27989
+ });
27990
+ });
27991
+
27992
+ //*********************************************************************************************
27993
+ // Scenario: Deferred delete in a recursive hierarchy. Before reinserting the node, delete two
27994
+ // other nodes, so that both the parent's position and the deleted node's position within the
27995
+ // level cache change.
27996
+ // * Expand Beta
27997
+ // * Deferred delete Delta
27998
+ // * Delete Gamma (Beta becomes leaf) and Alpha
27999
+ // * Reinsert Delta (Beta becomes expanded again)
28000
+ // JIRA: CPOUI5ODATAV4-2224
28001
+ QUnit.test("Recursive Hierarchy: delete and change reinsertion index", async function (assert) {
28002
+ const oModel = this.createTeaBusiModel({autoExpandSelect : true});
28003
+ const sView = `
28004
+ <Table id="table" items="{path : '/EMPLOYEES',
28005
+ parameters : {
28006
+ $$aggregation : {
28007
+ hierarchyQualifier : 'OrgChart'
28008
+ }
28009
+ }}">
28010
+ <Text id="expanded" text="{= %{@$ui5.node.isExpanded} }"/>
28011
+ <Text text="{= %{@$ui5.node.level} }"/>
28012
+ <Text text="{ID}"/>
28013
+ <Text text="{MANAGER_ID}"/>
28014
+ <Text id="name" text="{Name}"/>
28015
+ </Table>`;
28016
+
28017
+ // 0 Alpha (delete to change Beta's index)
28018
+ // 1 Beta
28019
+ // 2 Gamma (delete to change Delta's index in the level cache and make Beta a leaf)
28020
+ // 3 Delta (deferred delete and reinsert)
28021
+ // 4 Epsilon
28022
+ this.expectRequest("EMPLOYEES?$apply=com.sap.vocabularies.Hierarchy.v1.TopLevels"
28023
+ + "(HierarchyNodes=$root/EMPLOYEES,HierarchyQualifier='OrgChart',NodeProperty='ID'"
28024
+ + ",Levels=1)"
28025
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$count=true&$skip=0&$top=100", {
28026
+ "@odata.count" : "3",
28027
+ value : [{
28028
+ DrillState : "collapsed",
28029
+ ID : "0",
28030
+ MANAGER_ID : null,
28031
+ Name : "Alpha"
28032
+ }, {
28033
+ DrillState : "collapsed",
28034
+ ID : "1",
28035
+ MANAGER_ID : null,
28036
+ Name : "Beta"
28037
+ }, {
28038
+ DrillState : "collapsed",
28039
+ ID : "4",
28040
+ MANAGER_ID : null,
28041
+ Name : "Epsilon"
28042
+ }]
28043
+ })
28044
+ .expectChange("expanded", [false, false, false])
28045
+ .expectChange("name", ["Alpha", "Beta", "Epsilon"]);
28046
+
28047
+ await this.createView(assert, sView, oModel);
28048
+
28049
+ this.expectRequest("EMPLOYEES"
28050
+ + "?$apply=descendants($root/EMPLOYEES,OrgChart,ID,filter(ID eq '1'),1)"
28051
+ + "&$select=DrillState,ID,MANAGER_ID,Name&$count=true&$skip=0&$top=100", {
28052
+ "@odata.count" : "2",
28053
+ value : [{
28054
+ DrillState : "collapsed",
28055
+ ID : "2",
28056
+ MANAGER_ID : "1",
28057
+ Name : "Gamma"
28058
+ }, {
28059
+ DrillState : "leaf",
28060
+ ID : "3",
28061
+ MANAGER_ID : "1",
28062
+ Name : "Delta"
28063
+ }]
28064
+ })
28065
+ .expectChange("expanded", [, true,, undefined, false])
28066
+ .expectChange("name", [,, "Gamma", "Delta", "Epsilon"]);
28067
+
28068
+ const oTable = this.oView.byId("table");
28069
+ oTable.getItems()[1].getBindingContext().expand();
28070
+
28071
+ await this.waitForChanges(assert, "expand Beta");
28072
+
28073
+ checkTable("before delete", assert, oTable, [
28074
+ "/EMPLOYEES('0')",
28075
+ "/EMPLOYEES('1')",
28076
+ "/EMPLOYEES('2')",
28077
+ "/EMPLOYEES('3')",
28078
+ "/EMPLOYEES('4')"
28079
+ ], [
28080
+ [false, 1, "0", "", "Alpha"],
28081
+ [true, 1, "1", "", "Beta"],
28082
+ [false, 2, "2", "1", "Gamma"],
28083
+ [undefined, 2, "3", "1", "Delta"],
28084
+ [false, 1, "4", "", "Epsilon"]
28085
+ ], 5);
28086
+
28087
+ this.expectChange("expanded", [,,, false])
28088
+ .expectChange("name", [,,, "Epsilon"]);
28089
+
28090
+ // code under test
28091
+ const oDelta = oTable.getItems()[3].getBindingContext();
28092
+ const oDeleteDeltaPromise = oDelta.delete("doNotSubmit");
28093
+
28094
+ await this.waitForChanges(assert, "delete Delta");
28095
+
28096
+ this.expectChange("expanded", [undefined, false])
28097
+ .expectChange("name", ["Beta", "Epsilon"])
28098
+ .expectRequest("DELETE EMPLOYEES('2')")
28099
+ .expectRequest("DELETE EMPLOYEES('0')");
28100
+
28101
+ // code under test
28102
+ const oDeleteGammaPromise = oTable.getItems()[2].getBindingContext().delete();
28103
+ const oDeleteAlphaPromise = oTable.getItems()[0].getBindingContext().delete();
28104
+
28105
+ await Promise.all([
28106
+ oDeleteGammaPromise,
28107
+ oDeleteAlphaPromise,
28108
+ this.waitForChanges(assert, "delete Gamma and Alpha")
28109
+ ]);
28110
+
28111
+ checkTable("after delete", assert, oTable, [
28112
+ "/EMPLOYEES('1')",
28113
+ "/EMPLOYEES('4')"
28114
+ ], [
28115
+ [undefined, 1, "1", "", "Beta"],
28116
+ [false, 1, "4", "", "Epsilon"]
28117
+ ], 2);
28118
+
28119
+ this.expectCanceledError("Failed to delete /EMPLOYEES('3')",
28120
+ "Request canceled: DELETE EMPLOYEES('3'); group: doNotSubmit")
28121
+ .expectChange("expanded", [true, undefined, false])
28122
+ .expectChange("name", [, "Delta", "Epsilon"]);
28123
+
28124
+ // code under test
28125
+ oDelta.resetChanges();
28126
+
28127
+ await Promise.all([
28128
+ checkCanceled(assert, oDeleteDeltaPromise),
28129
+ this.waitForChanges(assert, "reinsert delta")
28130
+ ]);
28131
+
28132
+ checkTable("after reinsert", assert, oTable, [
28133
+ "/EMPLOYEES('1')",
28134
+ "/EMPLOYEES('3')",
28135
+ "/EMPLOYEES('4')"
28136
+ ], [
28137
+ [true, 1, "1", "", "Beta"],
28138
+ [undefined, 2, "3", "1", "Delta"],
28139
+ [false, 1, "4", "", "Epsilon"]
28140
+ ], 3);
28141
+ });
28142
+
27477
28143
  //*********************************************************************************************
27478
28144
  // Scenario: Show the single root node of a recursive hierarchy, which happens to be a leaf.
27479
28145
  // Create two new child nodes underneath.
27480
28146
  // Note: The "_Friend" navigation property is misused in order to have an artist play the role
27481
28147
  // of a hierarchy directory. This way, a draft root object is available (as needed by real
27482
28148
  // services).
27483
- // JIRA: CPOUI5ODATAV4-1592
28149
+ // JIRA: CPOUI5ODATAV4-2225
28150
+ //
28151
+ // Create new child and cancel immediately (JIRA: CPOUI5ODATAV4-2272)
28152
+ // @odata.bind in POST relative to resource path (BCP: 2380119648)
28153
+ // Delete the second child again. (JIRA: CPOUI5ODATAV4-2224)
27484
28154
  QUnit.test("Recursive Hierarchy: create new children", function (assert) {
27485
28155
  var oChild, oListBinding, fnRespond, oRoot, oTable;
27486
28156
 
@@ -27541,12 +28211,19 @@ sap.ui.define([
27541
28211
  oListBinding.create({}, /*bSkipRefresh*/true);
27542
28212
  }); // TypeError: Cannot read properties of undefined (reading 'getCanonicalPath')
27543
28213
 
28214
+ // code under test (JIRA: CPOUI5ODATAV4-2272)
28215
+ const oLostChild = oListBinding.create({
28216
+ "@$ui5.node.parent" : oRoot,
28217
+ Name : "n/a"
28218
+ }, /*bSkipRefresh*/true);
28219
+ oModel.resetChanges();
28220
+
27544
28221
  that.expectChange("name", [, "Beta"])
27545
28222
  .expectRequest({
27546
28223
  method : "POST",
27547
28224
  url : sFriend.slice(1),
27548
28225
  payload : {
27549
- "BestFriend@odata.bind" : "Artists(ArtistID='0',IsActiveEntity=false)",
28226
+ "BestFriend@odata.bind" : "../Artists(ArtistID='0',IsActiveEntity=false)",
27550
28227
  Name : "Beta"
27551
28228
  }
27552
28229
  }, new Promise(function (resolve) {
@@ -27564,7 +28241,10 @@ sap.ui.define([
27564
28241
  Name : "Beta"
27565
28242
  }, /*bSkipRefresh*/true);
27566
28243
 
27567
- return that.waitForChanges(assert, "create 1st child");
28244
+ return Promise.all([
28245
+ checkCanceled(assert, oLostChild.created()),
28246
+ that.waitForChanges(assert, "create 1st child")
28247
+ ]);
27568
28248
  }).then(function () {
27569
28249
  checkTable("during creation", assert, oTable, [
27570
28250
  sFriend + "(ArtistID='0',IsActiveEntity=false)",
@@ -27603,15 +28283,23 @@ sap.ui.define([
27603
28283
  Name : "Beta: β"
27604
28284
  });
27605
28285
 
28286
+ // code under test (JIRA: CPOUI5ODATAV4-2272)
28287
+ const oLostChild = oListBinding.create({
28288
+ "@$ui5.node.parent" : oRoot,
28289
+ Name : "n/a"
28290
+ }, /*bSkipRefresh*/true);
28291
+ oModel.resetChanges();
28292
+
27606
28293
  that.expectChange("name", [, "Gamma", "Beta: β"])
27607
28294
  .expectRequest({
27608
28295
  method : "POST",
27609
28296
  url : sFriend.slice(1),
27610
28297
  payload : {
27611
- "BestFriend@odata.bind" : "Artists(ArtistID='0',IsActiveEntity=false)",
28298
+ "BestFriend@odata.bind" : "../Artists(ArtistID='0',IsActiveEntity=false)",
27612
28299
  Name : "Gamma"
27613
28300
  }
27614
28301
  }, {
28302
+ "@odata.etag" : "etag2.0",
27615
28303
  ArtistID : "2",
27616
28304
  IsActiveEntity : false,
27617
28305
  Name : "Gamma: γ" // side effect
@@ -27627,6 +28315,7 @@ sap.ui.define([
27627
28315
  assert.strictEqual(oChild.getIndex(), 1);
27628
28316
 
27629
28317
  return Promise.all([
28318
+ checkCanceled(assert, oLostChild.created()),
27630
28319
  oChild.created(),
27631
28320
  that.waitForChanges(assert, "create 2nd child")
27632
28321
  ]);
@@ -27640,9 +28329,301 @@ sap.ui.define([
27640
28329
  [undefined, 2, "Gamma: γ"],
27641
28330
  [undefined, 2, "Beta: β"]
27642
28331
  ]);
28332
+
28333
+ that.expectChange("name", [, "Beta: β"])
28334
+ .expectRequest({
28335
+ method : "DELETE",
28336
+ headers : {
28337
+ "If-Match" : "etag2.0"
28338
+ },
28339
+ url : "Artists(ArtistID='2',IsActiveEntity=false)"
28340
+ });
28341
+
28342
+ return Promise.all([
28343
+ // code under test
28344
+ oChild.delete(),
28345
+ that.waitForChanges(assert, "delete 2nd child")
28346
+ ]);
28347
+ }).then(function () {
28348
+ checkTable("after deletion", assert, oTable, [
28349
+ sFriend + "(ArtistID='0',IsActiveEntity=false)",
28350
+ sFriend + "(ArtistID='1',IsActiveEntity=false)"
28351
+ ], [
28352
+ [true, 1, "Alpha"],
28353
+ [undefined, 2, "Beta: β"],
28354
+ ["", "", ""]
28355
+ ]);
27643
28356
  });
27644
28357
  });
27645
28358
 
28359
+ //*********************************************************************************************
28360
+ // Scenario: Show the single root node of a recursive hierarchy and expand it. Not all children
28361
+ // are loaded, but some placeholders remain. Create two new child nodes underneath the root.
28362
+ // Scroll down to load the other children.
28363
+ // JIRA: CPOUI5ODATAV4-2260
28364
+ //
28365
+ // Create new child and cancel immediately (JIRA: CPOUI5ODATAV4-2272)
28366
+ // Also delete instead of cancelling (JIRA: CPOUI5ODATAV4-2274)
28367
+ [false, true].forEach(function (bDelete) {
28368
+ const sTitle = `Recursive Hierarchy: create new children & placeholders, delete=${bDelete}`;
28369
+
28370
+ QUnit.test(sTitle, function (assert) {
28371
+ var oListBinding, oRoot, oTable;
28372
+
28373
+ const oModel = this.createSpecialCasesModel({autoExpandSelect : true});
28374
+ const sView = `
28375
+ <t:Table id="table" rows="{path : '/Artists',
28376
+ parameters : {
28377
+ $$aggregation : {
28378
+ hierarchyQualifier : 'OrgChart'
28379
+ }
28380
+ }}" threshold="0" visibleRowCount="3">
28381
+ <Text text="{= %{@$ui5.node.isExpanded} }"/>
28382
+ <Text text="{= %{@$ui5.node.level} }"/>
28383
+ <Text id="id" text="{ArtistID}"/>\
28384
+ <Text id="name" text="{Name}"/>
28385
+ </t:Table>`;
28386
+ const that = this;
28387
+
28388
+ this.expectRequest({
28389
+ batchNo : 1,
28390
+ url : "Artists?$apply=com.sap.vocabularies.Hierarchy.v1.TopLevels("
28391
+ + "HierarchyNodes=$root/Artists,HierarchyQualifier='OrgChart'"
28392
+ + ",NodeProperty='_/NodeID',Levels=1)"
28393
+ + "&$select=ArtistID,IsActiveEntity,Name,_/DrillState,_/NodeID"
28394
+ + "&$count=true&$skip=0&$top=3"
28395
+ }, {
28396
+ "@odata.count" : "1",
28397
+ value : [{
28398
+ ArtistID : "0",
28399
+ IsActiveEntity : false,
28400
+ Name : "Alpha",
28401
+ _ : {
28402
+ // DescendantCount : "0", // not needed w/o expandTo
28403
+ // DistanceFromRoot : "0", // not needed w/o expandTo
28404
+ DrillState : "collapsed",
28405
+ NodeID : "0,false"
28406
+ }
28407
+ }]
28408
+ })
28409
+ .expectChange("id", ["0"])
28410
+ .expectChange("name", ["Alpha"]);
28411
+
28412
+ return this.createView(assert, sView, oModel).then(function () {
28413
+ oTable = that.oView.byId("table");
28414
+ oRoot = oTable.getRows()[0].getBindingContext();
28415
+ oListBinding = oRoot.getBinding();
28416
+
28417
+ checkTable("root is leaf", assert, oTable, [
28418
+ "/Artists(ArtistID='0',IsActiveEntity=false)"
28419
+ ], [
28420
+ [false, 1, "0", "Alpha"],
28421
+ ["", "", "", ""],
28422
+ ["", "", "", ""]
28423
+ ]);
28424
+
28425
+ that.expectRequest("Artists?$apply=descendants($root/Artists,OrgChart,_/NodeID"
28426
+ + ",filter(ArtistID eq '0' and IsActiveEntity eq false),1)"
28427
+ + "&$select=ArtistID,IsActiveEntity,Name,_/DrillState,_/NodeID"
28428
+ + "&$count=true&$skip=0&$top=3", {
28429
+ "@odata.count" : "5",
28430
+ value : [{
28431
+ ArtistID : "1",
28432
+ IsActiveEntity : false,
28433
+ Name : "Beta",
28434
+ _ : {
28435
+ DrillState : "leaf",
28436
+ NodeID : "1,false"
28437
+ }
28438
+ }, {
28439
+ ArtistID : "2",
28440
+ IsActiveEntity : false,
28441
+ Name : "Gamma",
28442
+ _ : {
28443
+ DrillState : "leaf",
28444
+ NodeID : "2,false"
28445
+ }
28446
+ }, {
28447
+ ArtistID : "3",
28448
+ IsActiveEntity : false,
28449
+ Name : "Delta",
28450
+ _ : {
28451
+ DrillState : "leaf",
28452
+ NodeID : "3,false"
28453
+ }
28454
+ }]
28455
+ })
28456
+ .expectChange("id", [, "1", "2"])
28457
+ .expectChange("name", [, "Beta", "Gamma"]);
28458
+
28459
+ // code under test
28460
+ oRoot.expand();
28461
+
28462
+ return that.waitForChanges(assert, "expand");
28463
+ }).then(function () {
28464
+ checkTable("after expand", assert, oTable, [
28465
+ "/Artists(ArtistID='0',IsActiveEntity=false)",
28466
+ "/Artists(ArtistID='1',IsActiveEntity=false)",
28467
+ "/Artists(ArtistID='2',IsActiveEntity=false)",
28468
+ "/Artists(ArtistID='3',IsActiveEntity=false)"
28469
+ ], [
28470
+ [true, 1, "0", "Alpha"],
28471
+ [undefined, 2, "1", "Beta"],
28472
+ [undefined, 2, "2", "Gamma"]
28473
+ ], 6);
28474
+
28475
+ // code under test (JIRA: CPOUI5ODATAV4-2272, JIRA: CPOUI5ODATAV4-2274)
28476
+ const oLostChild = oListBinding.create({
28477
+ "@$ui5.node.parent" : oRoot,
28478
+ Name : "n/a"
28479
+ }, /*bSkipRefresh*/true);
28480
+ if (bDelete) {
28481
+ oLostChild.delete();
28482
+ } else {
28483
+ oModel.resetChanges();
28484
+ }
28485
+
28486
+ that.expectChange("id", [, "", "1"])
28487
+ .expectChange("name", [, "1st new child", "Beta"])
28488
+ .expectRequest({
28489
+ method : "POST",
28490
+ url : "Artists",
28491
+ payload : {
28492
+ "BestFriend@odata.bind" : "Artists(ArtistID='0',IsActiveEntity=false)",
28493
+ Name : "1st new child"
28494
+ }
28495
+ }, {
28496
+ ArtistID : "11",
28497
+ IsActiveEntity : false,
28498
+ Name : "First new child" // side effect
28499
+ })
28500
+ .expectChange("id", [, "11"])
28501
+ .expectChange("name", [, "First new child"]);
28502
+
28503
+ // code under test
28504
+ const oChild = oListBinding.create({
28505
+ "@$ui5.node.parent" : oRoot,
28506
+ Name : "1st new child"
28507
+ }, /*bSkipRefresh*/true);
28508
+
28509
+ return Promise.all([
28510
+ checkCanceled(assert, oLostChild.created()),
28511
+ oChild.created(),
28512
+ that.waitForChanges(assert, "create 1st child")
28513
+ ]);
28514
+ }).then(function () {
28515
+ that.expectChange("id", [, "", "11"])
28516
+ .expectChange("name", [, "2nd new child", "First new child"])
28517
+ .expectRequest({
28518
+ method : "POST",
28519
+ url : "Artists",
28520
+ payload : {
28521
+ "BestFriend@odata.bind" : "Artists(ArtistID='0',IsActiveEntity=false)",
28522
+ Name : "2nd new child"
28523
+ }
28524
+ }, {
28525
+ ArtistID : "12",
28526
+ IsActiveEntity : false,
28527
+ Name : "Second new child" // side effect
28528
+ })
28529
+ .expectChange("id", [, "12"])
28530
+ .expectChange("name", [, "Second new child"]);
28531
+
28532
+ // code under test
28533
+ const oChild = oListBinding.create({
28534
+ "@$ui5.node.parent" : oRoot,
28535
+ Name : "2nd new child"
28536
+ }, /*bSkipRefresh*/true);
28537
+
28538
+ return Promise.all([
28539
+ oChild.created(),
28540
+ that.waitForChanges(assert, "create 2nd child")
28541
+ ]);
28542
+ }).then(function () {
28543
+ checkTable("after creation", assert, oTable, [
28544
+ "/Artists(ArtistID='0',IsActiveEntity=false)",
28545
+ "/Artists(ArtistID='12',IsActiveEntity=false)",
28546
+ "/Artists(ArtistID='11',IsActiveEntity=false)",
28547
+ "/Artists(ArtistID='1',IsActiveEntity=false)",
28548
+ "/Artists(ArtistID='2',IsActiveEntity=false)",
28549
+ "/Artists(ArtistID='3',IsActiveEntity=false)"
28550
+ ], [
28551
+ [true, 1, "0", "Alpha"],
28552
+ [undefined, 2, "12", "Second new child"],
28553
+ [undefined, 2, "11", "First new child"]
28554
+ ], 8);
28555
+
28556
+ that.expectChange("id", [,,, "1", "2", "3"])
28557
+ .expectChange("name", [,,, "Beta", "Gamma", "Delta"]);
28558
+
28559
+ // code under test
28560
+ oTable.setFirstVisibleRow(3);
28561
+
28562
+ return that.waitForChanges(assert, "scroll down");
28563
+ }).then(function () {
28564
+ checkTable("after scroll down", assert, oTable, [
28565
+ "/Artists(ArtistID='0',IsActiveEntity=false)",
28566
+ "/Artists(ArtistID='12',IsActiveEntity=false)",
28567
+ "/Artists(ArtistID='11',IsActiveEntity=false)",
28568
+ "/Artists(ArtistID='1',IsActiveEntity=false)",
28569
+ "/Artists(ArtistID='2',IsActiveEntity=false)",
28570
+ "/Artists(ArtistID='3',IsActiveEntity=false)"
28571
+ ], [
28572
+ [undefined, 2, "1", "Beta"],
28573
+ [undefined, 2, "2", "Gamma"],
28574
+ [undefined, 2, "3", "Delta"]
28575
+ ], 8);
28576
+
28577
+ that.expectRequest("Artists?$apply=descendants($root/Artists,OrgChart,_/NodeID"
28578
+ + ",filter(ArtistID eq '0' and IsActiveEntity eq false),1)"
28579
+ + "&$select=ArtistID,IsActiveEntity,Name,_/DrillState,_/NodeID"
28580
+ + "&$filter=not (ArtistID eq '11' and IsActiveEntity eq false"
28581
+ + " or ArtistID eq '12' and IsActiveEntity eq false)"
28582
+ + "&$skip=3&$top=2", {
28583
+ value : [{
28584
+ ArtistID : "4",
28585
+ IsActiveEntity : false,
28586
+ Name : "Epsilon",
28587
+ _ : {
28588
+ DrillState : "leaf",
28589
+ NodeID : "4,false"
28590
+ }
28591
+ }, {
28592
+ ArtistID : "5",
28593
+ IsActiveEntity : false,
28594
+ Name : "Zeta",
28595
+ _ : {
28596
+ DrillState : "leaf",
28597
+ NodeID : "5,false"
28598
+ }
28599
+ }]
28600
+ })
28601
+ .expectChange("id", [,,,,, "3", "4", "5"])
28602
+ .expectChange("name", [,,,,, "Delta", "Epsilon", "Zeta"]);
28603
+
28604
+ // code under test
28605
+ oTable.setFirstVisibleRow(5);
28606
+
28607
+ return that.waitForChanges(assert, "scroll to bottom");
28608
+ }).then(function () {
28609
+ checkTable("after scroll to bottom", assert, oTable, [
28610
+ "/Artists(ArtistID='0',IsActiveEntity=false)",
28611
+ "/Artists(ArtistID='12',IsActiveEntity=false)",
28612
+ "/Artists(ArtistID='11',IsActiveEntity=false)",
28613
+ "/Artists(ArtistID='1',IsActiveEntity=false)",
28614
+ "/Artists(ArtistID='2',IsActiveEntity=false)",
28615
+ "/Artists(ArtistID='3',IsActiveEntity=false)",
28616
+ "/Artists(ArtistID='4',IsActiveEntity=false)",
28617
+ "/Artists(ArtistID='5',IsActiveEntity=false)"
28618
+ ], [
28619
+ [undefined, 2, "3", "Delta"],
28620
+ [undefined, 2, "4", "Epsilon"],
28621
+ [undefined, 2, "5", "Zeta"]
28622
+ ]);
28623
+ });
28624
+ });
28625
+ });
28626
+
27646
28627
  //*********************************************************************************************
27647
28628
  // Scenario: Application tries to overwrite client-side instance annotations.
27648
28629
  // JIRA: CPOUI5UISERVICESV3-1220
@@ -28895,8 +29876,6 @@ sap.ui.define([
28895
29876
 
28896
29877
  return that.waitForChanges(assert);
28897
29878
  }).then(function () {
28898
- var oMessageManager = sap.ui.getCore().getMessageManager();
28899
-
28900
29879
  // 4c. Patching a property via the wrong context must not succeed
28901
29880
  // We're not interested in the exact errors, only in some failure
28902
29881
  that.oLogMock.expects("error").twice();
@@ -28905,8 +29884,8 @@ sap.ui.define([
28905
29884
  .setProperty("BestFriend/Name", "n/a")
28906
29885
  .then(mustFail(assert), function () {
28907
29886
  // expect one message and remove it again
28908
- assert.strictEqual(oMessageManager.getMessageModel().getObject("/").length, 1);
28909
- oMessageManager.removeAllMessages();
29887
+ assert.strictEqual(Messaging.getMessageModel().getObject("/").length, 1);
29888
+ Messaging.removeAllMessages();
28910
29889
 
28911
29890
  assert.strictEqual(oReturnValueContext.getProperty("BestFriend/Name"),
28912
29891
  "Sgt. Pepper (modified)");
@@ -32161,7 +33140,7 @@ sap.ui.define([
32161
33140
  ]);
32162
33141
  }).then(function () {
32163
33142
  // remove persistent, technical messages from above
32164
- sap.ui.getCore().getMessageManager().removeAllMessages();
33143
+ Messaging.removeAllMessages();
32165
33144
 
32166
33145
  that.expectMessages([]);
32167
33146
 
@@ -34942,7 +35921,7 @@ sap.ui.define([
34942
35921
  type : "Error"
34943
35922
  }]);
34944
35923
 
34945
- sap.ui.getCore().getMessageManager().removeAllMessages();
35924
+ Messaging.removeAllMessages();
34946
35925
 
34947
35926
  return Promise.all([
34948
35927
  // code under test
@@ -34975,7 +35954,7 @@ sap.ui.define([
34975
35954
  type : "Warning"
34976
35955
  }]);
34977
35956
 
34978
- sap.ui.getCore().getMessageManager().removeAllMessages();
35957
+ Messaging.removeAllMessages();
34979
35958
 
34980
35959
  // code under test
34981
35960
  oTable.getItems("items")[0].getCells()[1].getBinding("value")
@@ -38355,7 +39334,7 @@ sap.ui.define([
38355
39334
  assert.equal(oTableBinding.getLength(), 3);
38356
39335
 
38357
39336
  // remove persistent, technical messages from above
38358
- sap.ui.getCore().getMessageManager().removeAllMessages();
39337
+ Messaging.removeAllMessages();
38359
39338
  that.expectMessages([]);
38360
39339
 
38361
39340
  oCausingError = oFixture.expectations.call(that);
@@ -38459,7 +39438,7 @@ sap.ui.define([
38459
39438
  var oError = createErrorInsideBatch();
38460
39439
 
38461
39440
  // remove persistent, technical messages from above
38462
- sap.ui.getCore().getMessageManager().removeAllMessages();
39441
+ Messaging.removeAllMessages();
38463
39442
 
38464
39443
  that.oLogMock.expects("error")
38465
39444
  .withExactArgs("POST on 'SalesOrderList' failed; will be repeated automatically",
@@ -41497,7 +42476,7 @@ sap.ui.define([
41497
42476
  type : "Success"
41498
42477
  }]);
41499
42478
 
41500
- sap.ui.getCore().getMessageManager().removeAllMessages();
42479
+ Messaging.removeAllMessages();
41501
42480
  oInput.getBinding("value").setValue("F3");
41502
42481
 
41503
42482
  return Promise.all([
@@ -47365,6 +48344,14 @@ sap.ui.define([
47365
48344
  assert.strictEqual(oBinding.hasPendingChanges(true), false);
47366
48345
  oBinding.filter(new Filter("MANAGER_ID", FilterOperator.NE, 666));
47367
48346
 
48347
+ // code under test BCP: 2380097809
48348
+ const aContexts = oBinding.getAllCurrentContexts();
48349
+
48350
+ assert.strictEqual(aContexts.length, 3);
48351
+ assert.strictEqual(aContexts[0], oContextC);
48352
+ assert.strictEqual(aContexts[1], oContextB);
48353
+ assert.strictEqual(aContexts[2], oContextA);
48354
+
47368
48355
  return that.waitForChanges(assert, "filter");
47369
48356
  }).then(function () {
47370
48357
  that.expectRequest("TEAMS?$count=true&$select=Name,Team_Id&$orderby=Team_Id desc"
@@ -49382,9 +50369,16 @@ sap.ui.define([
49382
50369
  oBinding = that.oView.byId("table").getBinding("items");
49383
50370
 
49384
50371
  oBinding.attachCreateActivate(function (oEvent) {
49385
- if (!oEvent.getParameter("context").getProperty("Team_Id")) {
50372
+ const oContext = oEvent.getParameter("context");
50373
+ assert.ok(oContext.isInactive());
50374
+ assert.strictEqual(
50375
+ oContext.isInactive(),
50376
+ oContext.getProperty("@$ui5.context.isInactive"));
50377
+ if (!oContext.getProperty("Team_Id")) {
49386
50378
  // code under test
49387
50379
  oEvent.preventDefault();
50380
+ } else {
50381
+ oContext.setProperty("BudgetCurrency", "EUR");
49388
50382
  }
49389
50383
  });
49390
50384
 
@@ -49432,6 +50426,7 @@ sap.ui.define([
49432
50426
  method : "POST",
49433
50427
  url : "TEAMS",
49434
50428
  payload : {
50429
+ BudgetCurrency : "EUR",
49435
50430
  Name : "Team #1 edited",
49436
50431
  Team_Id : "TEAM_01"
49437
50432
  }
@@ -49484,6 +50479,7 @@ sap.ui.define([
49484
50479
  method : "POST",
49485
50480
  url : "TEAMS",
49486
50481
  payload : {
50482
+ BudgetCurrency : "EUR",
49487
50483
  Name : "Team #2 inactive",
49488
50484
  Team_Id : "TEAM_02"
49489
50485
  }