@openui5/sap.ui.core 1.117.1 → 1.119.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 (1096) hide show
  1. package/.eslintrc.json +9 -0
  2. package/THIRDPARTY.txt +2 -2
  3. package/package.json +1 -1
  4. package/src/jquery.sap.global.js +1 -1
  5. package/src/jquery.sap.properties.js +1 -1
  6. package/src/jquery.sap.resources.js +1 -1
  7. package/src/jquery.sap.script.js +1 -1
  8. package/src/jquery.sap.storage.js +3 -3
  9. package/src/sap/base/Event.js +1 -1
  10. package/src/sap/base/Eventing.js +1 -1
  11. package/src/sap/base/config.js +1 -1
  12. package/src/sap/base/i18n/LanguageTag.js +1 -1
  13. package/src/sap/base/i18n/Localization.js +58 -40
  14. package/src/sap/base/i18n/ResourceBundle.js +5 -0
  15. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  16. package/src/sap/base/util/UriParameters.js +26 -19
  17. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  18. package/src/sap/base/util/restricted/_castArray.js +1 -1
  19. package/src/sap/base/util/restricted/_compact.js +1 -1
  20. package/src/sap/base/util/restricted/_curry.js +1 -1
  21. package/src/sap/base/util/restricted/_debounce.js +1 -1
  22. package/src/sap/base/util/restricted/_difference.js +1 -1
  23. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  24. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  25. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  27. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  28. package/src/sap/base/util/restricted/_flatten.js +1 -1
  29. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  30. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  31. package/src/sap/base/util/restricted/_intersection.js +1 -1
  32. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  33. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  34. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  35. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  36. package/src/sap/base/util/restricted/_isNil.js +1 -1
  37. package/src/sap/base/util/restricted/_max.js +1 -1
  38. package/src/sap/base/util/restricted/_merge.js +1 -1
  39. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  40. package/src/sap/base/util/restricted/_min.js +1 -1
  41. package/src/sap/base/util/restricted/_omit.js +1 -1
  42. package/src/sap/base/util/restricted/_pick.js +1 -1
  43. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  44. package/src/sap/base/util/restricted/_throttle.js +1 -1
  45. package/src/sap/base/util/restricted/_toArray.js +1 -1
  46. package/src/sap/base/util/restricted/_union.js +1 -1
  47. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  48. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  49. package/src/sap/base/util/restricted/_uniq.js +1 -1
  50. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  51. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  52. package/src/sap/base/util/restricted/_without.js +1 -1
  53. package/src/sap/base/util/restricted/_xor.js +1 -1
  54. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  55. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  56. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  57. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  58. package/src/sap/ui/Device.js +3 -3
  59. package/src/sap/ui/Global.js +4 -4
  60. package/src/sap/ui/base/BindingInfo.js +25 -3
  61. package/src/sap/ui/base/BindingParser.js +2 -1
  62. package/src/sap/ui/base/Event.js +1 -1
  63. package/src/sap/ui/base/EventProvider.js +1 -1
  64. package/src/sap/ui/base/Interface.js +1 -1
  65. package/src/sap/ui/base/ManagedObject.js +8 -4
  66. package/src/sap/ui/base/ManagedObjectMetadata.js +4 -3
  67. package/src/sap/ui/base/Metadata.js +3 -3
  68. package/src/sap/ui/base/Object.js +1 -1
  69. package/src/sap/ui/base/ObjectPool.js +1 -1
  70. package/src/sap/ui/core/.library +9 -1
  71. package/src/sap/ui/core/AccessKeysEnablement.js +2 -2
  72. package/src/sap/ui/core/AnimationMode.js +1 -1
  73. package/src/sap/ui/core/BlockLayerUtils.js +1 -1
  74. package/src/sap/ui/core/BusyIndicator.js +2 -2
  75. package/src/sap/ui/core/Component.js +85 -61
  76. package/src/sap/ui/core/ComponentContainer.js +2 -2
  77. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  78. package/src/sap/ui/core/ComponentSupport.js +1 -1
  79. package/src/sap/ui/core/Configuration.js +15 -179
  80. package/src/sap/ui/core/Control.js +22 -2
  81. package/src/sap/ui/core/Core.js +223 -128
  82. package/src/sap/ui/core/CustomData.js +1 -1
  83. package/src/sap/ui/core/CustomStyleClassSupport.js +3 -3
  84. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  85. package/src/sap/ui/core/Element.js +40 -4
  86. package/src/sap/ui/core/ElementMetadata.js +1 -1
  87. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  88. package/src/sap/ui/core/EventBus.js +19 -2
  89. package/src/sap/ui/core/FocusHandler.js +3 -24
  90. package/src/sap/ui/core/Fragment.js +2 -2
  91. package/src/sap/ui/core/HTML.js +1 -1
  92. package/src/sap/ui/core/History.js +1 -1
  93. package/src/sap/ui/core/Icon.js +2 -2
  94. package/src/sap/ui/core/IndicationColorSupport.js +2 -2
  95. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  96. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  97. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  98. package/src/sap/ui/core/InvisibleText.js +4 -7
  99. package/src/sap/ui/core/Item.js +1 -1
  100. package/src/sap/ui/core/LabelEnablement.js +11 -4
  101. package/src/sap/ui/core/LayoutData.js +1 -1
  102. package/src/sap/ui/core/Lib.js +51 -55
  103. package/src/sap/ui/core/ListItem.js +1 -1
  104. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  105. package/src/sap/ui/core/Locale.js +1 -1
  106. package/src/sap/ui/core/LocaleData.js +2 -2
  107. package/src/sap/ui/core/Manifest.js +1 -1
  108. package/src/sap/ui/core/Message.js +4 -4
  109. package/src/sap/ui/core/Messaging.js +471 -0
  110. package/src/sap/ui/core/Popup.js +3 -3
  111. package/src/sap/ui/core/RenderManager.js +15 -10
  112. package/src/sap/ui/core/Renderer.js +1 -1
  113. package/src/sap/ui/core/Rendering.js +4 -2
  114. package/src/sap/ui/core/ResizeHandler.js +15 -23
  115. package/src/sap/ui/core/ScrollBar.js +1 -1
  116. package/src/sap/ui/core/SeparatorItem.js +1 -1
  117. package/src/sap/ui/core/ShortcutHint.js +1 -1
  118. package/src/sap/ui/core/ShortcutHintsMixin.js +5 -5
  119. package/src/sap/ui/core/StashedControlSupport.js +4 -4
  120. package/src/sap/ui/core/StaticArea.js +66 -74
  121. package/src/sap/ui/core/Theming.js +99 -39
  122. package/src/sap/ui/core/Title.js +1 -1
  123. package/src/sap/ui/core/TooltipBase.js +1 -1
  124. package/src/sap/ui/core/UIArea.js +93 -24
  125. package/src/sap/ui/core/UIComponent.js +2 -2
  126. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  127. package/src/sap/ui/core/ValueStateSupport.js +2 -2
  128. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  129. package/src/sap/ui/core/XMLComposite.js +4 -2
  130. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  131. package/src/sap/ui/core/_IconRegistry.js +3 -1
  132. package/src/sap/ui/core/boot.js +9 -0
  133. package/src/sap/ui/core/cache/CacheManager.js +22 -16
  134. package/src/sap/ui/core/cache/LRUPersistentCache.js +13 -7
  135. package/src/sap/ui/core/date/UI5Date.js +1 -1
  136. package/src/sap/ui/core/delegate/ItemNavigation.js +3 -3
  137. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  138. package/src/sap/ui/core/dnd/DragAndDrop.js +1 -1
  139. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  140. package/src/sap/ui/core/dnd/DragDropInfo.js +6 -6
  141. package/src/sap/ui/core/dnd/DragInfo.js +4 -4
  142. package/src/sap/ui/core/dnd/DropInfo.js +6 -6
  143. package/src/sap/ui/core/format/DateFormat.js +4 -0
  144. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  145. package/src/sap/ui/core/getCompatibilityVersion.js +64 -0
  146. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  147. package/src/sap/ui/core/library.js +26 -50
  148. package/src/sap/ui/core/message/ControlMessageProcessor.js +4 -4
  149. package/src/sap/ui/core/message/Message.js +14 -13
  150. package/src/sap/ui/core/message/MessageManager.js +36 -459
  151. package/src/sap/ui/core/message/MessageMixin.js +5 -5
  152. package/src/sap/ui/core/message/MessageParser.js +1 -1
  153. package/src/sap/ui/core/message/MessageProcessor.js +9 -9
  154. package/src/sap/ui/core/message/MessageType.js +53 -0
  155. package/src/sap/ui/core/messagebundle.properties +3 -0
  156. package/src/sap/ui/core/messagebundle_ar.properties +3 -3
  157. package/src/sap/ui/core/messagebundle_bg.properties +4 -4
  158. package/src/sap/ui/core/messagebundle_ca.properties +2 -2
  159. package/src/sap/ui/core/messagebundle_cs.properties +5 -5
  160. package/src/sap/ui/core/messagebundle_cy.properties +2 -2
  161. package/src/sap/ui/core/messagebundle_da.properties +4 -4
  162. package/src/sap/ui/core/messagebundle_de.properties +3 -3
  163. package/src/sap/ui/core/messagebundle_el.properties +11 -11
  164. package/src/sap/ui/core/messagebundle_en.properties +4 -4
  165. package/src/sap/ui/core/messagebundle_es.properties +18 -18
  166. package/src/sap/ui/core/messagebundle_es_MX.properties +1 -1
  167. package/src/sap/ui/core/messagebundle_et.properties +1 -1
  168. package/src/sap/ui/core/messagebundle_fi.properties +2 -2
  169. package/src/sap/ui/core/messagebundle_fr.properties +22 -22
  170. package/src/sap/ui/core/messagebundle_fr_CA.properties +1 -1
  171. package/src/sap/ui/core/messagebundle_hi.properties +3 -3
  172. package/src/sap/ui/core/messagebundle_hr.properties +7 -7
  173. package/src/sap/ui/core/messagebundle_hu.properties +11 -11
  174. package/src/sap/ui/core/messagebundle_id.properties +6 -6
  175. package/src/sap/ui/core/messagebundle_it.properties +58 -58
  176. package/src/sap/ui/core/messagebundle_iw.properties +6 -6
  177. package/src/sap/ui/core/messagebundle_ja.properties +1 -1
  178. package/src/sap/ui/core/messagebundle_kk.properties +2 -2
  179. package/src/sap/ui/core/messagebundle_ko.properties +7 -7
  180. package/src/sap/ui/core/messagebundle_lt.properties +1 -1
  181. package/src/sap/ui/core/messagebundle_lv.properties +6 -6
  182. package/src/sap/ui/core/messagebundle_ms.properties +6 -6
  183. package/src/sap/ui/core/messagebundle_nl.properties +13 -13
  184. package/src/sap/ui/core/messagebundle_no.properties +9 -9
  185. package/src/sap/ui/core/messagebundle_pl.properties +3 -3
  186. package/src/sap/ui/core/messagebundle_pt.properties +9 -9
  187. package/src/sap/ui/core/messagebundle_pt_PT.properties +1 -1
  188. package/src/sap/ui/core/messagebundle_ro.properties +3 -3
  189. package/src/sap/ui/core/messagebundle_ru.properties +8 -8
  190. package/src/sap/ui/core/messagebundle_sh.properties +1 -1
  191. package/src/sap/ui/core/messagebundle_sk.properties +3 -3
  192. package/src/sap/ui/core/messagebundle_sl.properties +10 -10
  193. package/src/sap/ui/core/messagebundle_sv.properties +1 -1
  194. package/src/sap/ui/core/messagebundle_th.properties +19 -19
  195. package/src/sap/ui/core/messagebundle_tr.properties +6 -6
  196. package/src/sap/ui/core/messagebundle_uk.properties +9 -9
  197. package/src/sap/ui/core/messagebundle_vi.properties +2 -2
  198. package/src/sap/ui/core/messagebundle_zh_CN.properties +3 -3
  199. package/src/sap/ui/core/messagebundle_zh_TW.properties +25 -25
  200. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  201. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  202. package/src/sap/ui/core/mvc/JSView.js +1 -1
  203. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  204. package/src/sap/ui/core/mvc/View.js +3 -3
  205. package/src/sap/ui/core/mvc/XMLView.js +9 -2
  206. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  207. package/src/sap/ui/core/plugin/LessSupport.js +3 -3
  208. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  209. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  210. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  211. package/src/sap/ui/core/routing/Router.js +7 -1
  212. package/src/sap/ui/core/routing/async/Route.js +1 -0
  213. package/src/sap/ui/core/routing/async/Target.js +5 -4
  214. package/src/sap/ui/core/routing/sync/Route.js +1 -0
  215. package/src/sap/ui/core/routing/sync/Target.js +3 -3
  216. package/src/sap/ui/core/rules/App.support.js +30 -1
  217. package/src/sap/ui/core/rules/Config.support.js +4 -0
  218. package/src/sap/ui/core/rules/CoreHelper.support.js +3 -3
  219. package/src/sap/ui/core/rules/Theming.support.js +4 -0
  220. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  221. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  222. package/src/sap/ui/core/service/Service.js +1 -1
  223. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  224. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  225. package/src/sap/ui/core/support/Plugin.js +25 -5
  226. package/src/sap/ui/core/support/Support.js +38 -6
  227. package/src/sap/ui/core/support/ToolsAPI.js +14 -20
  228. package/src/sap/ui/core/support/controls/InteractionTree.js +0 -4
  229. package/src/sap/ui/core/support/plugins/Breakpoint.js +4 -6
  230. package/src/sap/ui/core/support/plugins/ControlTree.js +40 -24
  231. package/src/sap/ui/core/support/plugins/Debugging.js +10 -9
  232. package/src/sap/ui/core/support/plugins/Interaction.js +12 -13
  233. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -3
  234. package/src/sap/ui/core/support/plugins/Performance.js +1 -3
  235. package/src/sap/ui/core/support/plugins/Selector.js +2 -2
  236. package/src/sap/ui/core/support/plugins/TechInfo.js +32 -42
  237. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  238. package/src/sap/ui/core/support/plugins/ViewInfo.js +32 -16
  239. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +8 -6
  240. package/src/sap/ui/core/support/usage/EventBroadcaster.js +1 -1
  241. package/src/sap/ui/core/themes/base/base.less +275 -269
  242. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  243. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  244. package/src/sap/ui/core/themes/base/global.less +8 -8
  245. package/src/sap/ui/core/theming/Parameters.js +4 -5
  246. package/src/sap/ui/core/theming/ThemeHelper.js +100 -1
  247. package/src/sap/ui/core/theming/ThemeManager.js +32 -31
  248. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  249. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  250. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  251. package/src/sap/ui/core/tmpl/Template.js +1 -1
  252. package/src/sap/ui/core/tmpl/TemplateControl.js +4 -2
  253. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  254. package/src/sap/ui/core/util/Export.js +1 -1
  255. package/src/sap/ui/core/util/ExportCell.js +1 -1
  256. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  257. package/src/sap/ui/core/util/ExportRow.js +1 -1
  258. package/src/sap/ui/core/util/ExportType.js +1 -1
  259. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  260. package/src/sap/ui/core/util/File.js +1 -1
  261. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  262. package/src/sap/ui/core/util/MockServer.js +1 -1
  263. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  264. package/src/sap/ui/core/util/XMLPreprocessor.js +53 -29
  265. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +27 -4
  266. package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +55 -30
  267. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +54 -48
  268. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +2 -2
  269. package/src/sap/ui/core/util/serializer/Serializer.js +3 -3
  270. package/src/sap/ui/core/util/serializer/ViewSerializer.js +27 -10
  271. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +2 -2
  272. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  273. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  274. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  275. package/src/sap/ui/core/webc/WebComponent.js +659 -0
  276. package/src/sap/ui/core/webc/WebComponentMetadata.js +253 -0
  277. package/src/sap/ui/core/webc/WebComponentRenderer.js +323 -0
  278. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  279. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  280. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  281. package/src/sap/ui/debug/ControlTree.js +8 -7
  282. package/src/sap/ui/debug/DebugEnv.js +18 -9
  283. package/src/sap/ui/debug/PropertyList.js +3 -3
  284. package/src/sap/ui/dom/jquery/control.js +3 -4
  285. package/src/sap/ui/events/F6Navigation.js +2 -1
  286. package/src/sap/ui/model/Binding.js +6 -6
  287. package/src/sap/ui/model/ClientModel.js +33 -1
  288. package/src/sap/ui/model/ClientPropertyBinding.js +20 -4
  289. package/src/sap/ui/model/CompositeDataState.js +1 -1
  290. package/src/sap/ui/model/CompositeType.js +1 -1
  291. package/src/sap/ui/model/Context.js +1 -1
  292. package/src/sap/ui/model/DataState.js +1 -1
  293. package/src/sap/ui/model/Filter.js +1 -1
  294. package/src/sap/ui/model/ManagedObjectBindingSupport.js +4 -4
  295. package/src/sap/ui/model/MetaModel.js +1 -1
  296. package/src/sap/ui/model/Model.js +4 -4
  297. package/src/sap/ui/model/SelectionModel.js +1 -1
  298. package/src/sap/ui/model/SimpleType.js +1 -1
  299. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  300. package/src/sap/ui/model/Type.js +1 -1
  301. package/src/sap/ui/model/controlhelper/TreeBindingProxy.js +27 -13
  302. package/src/sap/ui/model/json/JSONModel.js +2 -3
  303. package/src/sap/ui/model/message/MessageModel.js +3 -7
  304. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  305. package/src/sap/ui/model/odata/ODataListBinding.js +24 -0
  306. package/src/sap/ui/model/odata/ODataMessageParser.js +4 -4
  307. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  308. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  309. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  310. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +6 -0
  311. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  312. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  313. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  314. package/src/sap/ui/model/odata/type/Date.js +1 -1
  315. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  316. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  317. package/src/sap/ui/model/odata/type/DateTimeOffset.js +7 -2
  318. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -2
  319. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  320. package/src/sap/ui/model/odata/type/Double.js +1 -1
  321. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  322. package/src/sap/ui/model/odata/type/Int.js +1 -1
  323. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  324. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  325. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  326. package/src/sap/ui/model/odata/type/ODataType.js +2 -3
  327. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  328. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  329. package/src/sap/ui/model/odata/type/Single.js +1 -1
  330. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  331. package/src/sap/ui/model/odata/type/String.js +1 -1
  332. package/src/sap/ui/model/odata/type/Time.js +1 -1
  333. package/src/sap/ui/model/odata/type/TimeOfDay.js +6 -2
  334. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  335. package/src/sap/ui/model/odata/v2/Context.js +13 -5
  336. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  337. package/src/sap/ui/model/odata/v2/ODataListBinding.js +108 -59
  338. package/src/sap/ui/model/odata/v2/ODataModel.js +25 -20
  339. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +33 -6
  340. package/src/sap/ui/model/odata/v4/Context.js +83 -23
  341. package/src/sap/ui/model/odata/v4/ODataBinding.js +13 -4
  342. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +162 -33
  343. package/src/sap/ui/model/odata/v4/ODataListBinding.js +151 -48
  344. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +1 -1
  345. package/src/sap/ui/model/odata/v4/ODataModel.js +21 -14
  346. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +4 -2
  347. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +12 -11
  348. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +234 -31
  349. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +3 -5
  350. package/src/sap/ui/model/odata/v4/lib/_Cache.js +180 -76
  351. package/src/sap/ui/model/odata/v4/lib/_Helper.js +36 -24
  352. package/src/sap/ui/model/odata/v4/lib/_Parser.js +3 -0
  353. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +17 -7
  354. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +1 -1
  355. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +28 -35
  356. package/src/sap/ui/model/odata/v4/ts.js +44 -0
  357. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  358. package/src/sap/ui/model/type/Boolean.js +1 -1
  359. package/src/sap/ui/model/type/Currency.js +1 -1
  360. package/src/sap/ui/model/type/Date.js +1 -2
  361. package/src/sap/ui/model/type/DateInterval.js +5 -5
  362. package/src/sap/ui/model/type/DateTime.js +1 -1
  363. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  364. package/src/sap/ui/model/type/FileSize.js +1 -1
  365. package/src/sap/ui/model/type/Float.js +1 -1
  366. package/src/sap/ui/model/type/Integer.js +1 -1
  367. package/src/sap/ui/model/type/String.js +1 -1
  368. package/src/sap/ui/model/type/Time.js +1 -1
  369. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  370. package/src/sap/ui/model/type/Unit.js +1 -1
  371. package/src/sap/ui/model/xml/XMLModel.js +2 -2
  372. package/src/sap/ui/model/xml/XMLPropertyBinding.js +4 -2
  373. package/src/sap/ui/performance/BeaconRequest.js +8 -10
  374. package/src/sap/ui/performance/trace/Interaction.js +11 -2
  375. package/src/sap/ui/qunit/qunit-coverage-istanbul.js +60 -6
  376. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  377. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +10 -11
  378. package/src/sap/ui/qunit/utils/nextUIUpdate.js +51 -0
  379. package/src/sap/ui/qunit/utils/waitForThemeApplied.js +16 -14
  380. package/src/sap/ui/test/BlanketReporterUI.view.xml +5 -2
  381. package/src/sap/ui/test/ModuleTracking.js +326 -0
  382. package/src/sap/ui/test/OpaPlugin.js +3 -3
  383. package/src/sap/ui/test/TestUtils.js +8 -7
  384. package/src/sap/ui/test/autowaiter/_UIUpdatesWaiter.js +3 -2
  385. package/src/sap/ui/test/generic/TestBase.js +1 -1
  386. package/src/sap/ui/test/matchers/Descendant.js +1 -1
  387. package/src/sap/ui/test/matchers/Sibling.js +1 -1
  388. package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +2 -0
  389. package/src/sap/ui/test/selectors/_DropdownItem.js +1 -0
  390. package/src/sap/ui/test/selectors/_LabelFor.js +3 -2
  391. package/src/sap/ui/test/selectors/_TableRowItem.js +1 -0
  392. package/src/sap/ui/test/starter/_setupAndStart.js +35 -11
  393. package/src/sap/ui/util/Storage.js +1 -1
  394. package/src/ui5loader-autoconfig.js +14 -10
  395. package/test/sap/ui/core/ComponentCleanup.html +228 -225
  396. package/test/sap/ui/core/ComponentConfig.html +1 -1
  397. package/test/sap/ui/core/ComponentExtensibility_CustomizingDisabled.html +1 -1
  398. package/test/sap/ui/core/ComponentExtensibility_legacyAPIs.html +1 -1
  399. package/test/sap/ui/core/ComponentSimple.html +1 -1
  400. package/test/sap/ui/core/ComponentSimpleModel.html +1 -1
  401. package/test/sap/ui/core/ComponentSupport.html +1 -1
  402. package/test/sap/ui/core/DateFormat.js +3 -3
  403. package/test/sap/ui/core/EventBroadcaster.html +62 -62
  404. package/test/sap/ui/core/Formats.html +4 -2
  405. package/test/sap/ui/core/GenericEventBinding.html +53 -52
  406. package/test/sap/ui/core/HTMLControl.html +94 -93
  407. package/test/sap/ui/core/HyphenationPlayground.html +10 -9
  408. package/test/sap/ui/core/ListFormat.js +3 -3
  409. package/test/sap/ui/core/NumberFormat.js +3 -3
  410. package/test/sap/ui/core/ODataAnnotationsPerformance.html +28 -28
  411. package/test/sap/ui/core/ODataV2CanonicalRequests.html +3 -2
  412. package/test/sap/ui/core/ODataV2Messages.html +4 -3
  413. package/test/sap/ui/core/PopupWithUserSelection.html +1 -1
  414. package/test/sap/ui/core/Strings.js +3 -3
  415. package/test/sap/ui/core/Strings.view.xml +5 -1
  416. package/test/sap/ui/core/ThemeParameters.html +31 -30
  417. package/test/sap/ui/core/ValidateURL.html +143 -143
  418. package/test/sap/ui/core/demokit/sample/BusyIndicator/manifest.json +2 -1
  419. package/test/sap/ui/core/demokit/sample/Commands/Commands.html +1 -1
  420. package/test/sap/ui/core/demokit/sample/Commands/manifest.json +2 -2
  421. package/test/sap/ui/core/demokit/sample/ControlBusyIndicator/manifest.json +2 -1
  422. package/test/sap/ui/core/demokit/sample/ControllerExtension/manifest.json +1 -0
  423. package/test/sap/ui/core/demokit/sample/FieldGroup/manifest.json +1 -0
  424. package/test/sap/ui/core/demokit/sample/Html/manifest.json +1 -0
  425. package/test/sap/ui/core/demokit/sample/Html/preserveDOM/manifest.json +1 -0
  426. package/test/sap/ui/core/demokit/sample/Html/static/manifest.json +1 -0
  427. package/test/sap/ui/core/demokit/sample/HyphenationAPI/C.controller.js +3 -3
  428. package/test/sap/ui/core/demokit/sample/Icon/manifest.json +2 -1
  429. package/test/sap/ui/core/demokit/sample/InvisibleMessage/InvisibleMessage.controller.js +4 -4
  430. package/test/sap/ui/core/demokit/sample/InvisibleMessage/manifest.json +2 -1
  431. package/test/sap/ui/core/demokit/sample/InvisibleText/manifest.json +2 -1
  432. package/test/sap/ui/core/demokit/sample/MessageManager/BasicMessages/Controller.controller.js +10 -10
  433. package/test/sap/ui/core/demokit/sample/MessageManager/BasicODataMessages/Controller.controller.js +7 -7
  434. package/test/sap/ui/core/demokit/sample/MessageManager/BasicODataMessages/manifest.json +1 -0
  435. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/Component.js +3 -2
  436. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/controller/Employee.controller.js +3 -2
  437. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/index.html +7 -8
  438. package/test/sap/ui/core/demokit/sample/OpaAction/manifest.json +1 -0
  439. package/test/sap/ui/core/demokit/sample/OpaAutoWaitParams/OpaAutoWaitParams.js +1 -1
  440. package/test/sap/ui/core/demokit/sample/OpaAutoWaitParams/applicationUnderTest/manifest.json +2 -2
  441. package/test/sap/ui/core/demokit/sample/OpaAutoWaitParams/manifest.json +2 -1
  442. package/test/sap/ui/core/demokit/sample/OpaBusyIndicator/applicationUnderTest/manifest.json +2 -2
  443. package/test/sap/ui/core/demokit/sample/OpaBusyIndicator/manifest.json +2 -1
  444. package/test/sap/ui/core/demokit/sample/OpaById/applicationUnderTest/manifest.json +2 -2
  445. package/test/sap/ui/core/demokit/sample/OpaById/manifest.json +2 -1
  446. package/test/sap/ui/core/demokit/sample/OpaDynamicWait/applicationUnderTest/manifest.json +2 -2
  447. package/test/sap/ui/core/demokit/sample/OpaDynamicWait/manifest.json +2 -1
  448. package/test/sap/ui/core/demokit/sample/OpaGetStarted/applicationUnderTest/index.html +9 -6
  449. package/test/sap/ui/core/demokit/sample/OpaGetStarted/manifest.json +2 -1
  450. package/test/sap/ui/core/demokit/sample/OpaMatchers/applicationUnderTest/manifest.json +2 -2
  451. package/test/sap/ui/core/demokit/sample/OpaMatchers/manifest.json +2 -1
  452. package/test/sap/ui/core/demokit/sample/OpaPageObject/applicationUnderTest/manifest.json +2 -2
  453. package/test/sap/ui/core/demokit/sample/OpaPageObject/manifest.json +2 -1
  454. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/applicationUnderTest/manifest.json +2 -2
  455. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/manifest.json +2 -1
  456. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyUIComponent/applicationUnderTest/manifest.json +2 -2
  457. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyUIComponent/manifest.json +2 -1
  458. package/test/sap/ui/core/demokit/sample/OpaStaticAreaControls/applicationUnderTest/manifest.json +2 -2
  459. package/test/sap/ui/core/demokit/sample/OpaStaticAreaControls/manifest.json +2 -1
  460. package/test/sap/ui/core/demokit/sample/OpaTestLibrary/applicationUnderTest/manifest.json +2 -2
  461. package/test/sap/ui/core/demokit/sample/OpaTestLibrary/manifest.json +2 -1
  462. package/test/sap/ui/core/demokit/sample/OpaURLParameters/iStartMyAppInAFrameWithURLParameters/applicationUnderTest/manifest.json +2 -2
  463. package/test/sap/ui/core/demokit/sample/OpaURLParameters/iStartMyAppInAFrameWithURLParameters/manifest.json +2 -1
  464. package/test/sap/ui/core/demokit/sample/OpaURLParameters/iStartMyUIComponentWithURLParameters/applicationUnderTest/manifest.json +2 -2
  465. package/test/sap/ui/core/demokit/sample/OpaURLParameters/iStartMyUIComponentWithURLParameters/manifest.json +2 -1
  466. package/test/sap/ui/core/demokit/sample/OpaWithSupportAssistant/applicationUnderTest/index.html +13 -10
  467. package/test/sap/ui/core/demokit/sample/OpaWithSupportAssistant/manifest.json +2 -1
  468. package/test/sap/ui/core/demokit/sample/PatternMatching/Patterns.html +11 -8
  469. package/test/sap/ui/core/demokit/sample/PatternMatching/manifest.json +2 -1
  470. package/test/sap/ui/core/demokit/sample/PatternMatching/patternApp/manifest.json +2 -2
  471. package/test/sap/ui/core/demokit/sample/RoutingFullscreen/RoutingFullscreen.html +11 -8
  472. package/test/sap/ui/core/demokit/sample/RoutingFullscreen/manifest.json +2 -1
  473. package/test/sap/ui/core/demokit/sample/RoutingMasterDetail/RoutingMasterDetail.html +11 -8
  474. package/test/sap/ui/core/demokit/sample/RoutingMasterDetail/manifest.json +2 -1
  475. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/RoutingNestedComponent.html +1 -1
  476. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/manifest.json +2 -2
  477. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/reuse/categories/manifest.json +2 -1
  478. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/reuse/products/manifest.json +2 -1
  479. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/reuse/suppliers/manifest.json +2 -1
  480. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/test/integration/opaTests.qunit.html +1 -1
  481. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/test/integration/opaTests.qunit.js +5 -4
  482. package/test/sap/ui/core/demokit/sample/TargetsStandalone/TargetsStandalone.html +11 -8
  483. package/test/sap/ui/core/demokit/sample/TargetsStandalone/manifest.json +2 -1
  484. package/test/sap/ui/core/demokit/sample/ThemeCustomClasses/ThemeCustomClasses.controller.js +3 -3
  485. package/test/sap/ui/core/demokit/sample/ThemeCustomClasses/manifest.json +1 -0
  486. package/test/sap/ui/core/demokit/sample/TypeCurrency/manifest.json +1 -0
  487. package/test/sap/ui/core/demokit/sample/TypeDateAsDate/manifest.json +1 -0
  488. package/test/sap/ui/core/demokit/sample/TypeDateAsString/manifest.json +1 -0
  489. package/test/sap/ui/core/demokit/sample/TypeDateTime/manifest.json +1 -0
  490. package/test/sap/ui/core/demokit/sample/TypeFileSize/manifest.json +1 -0
  491. package/test/sap/ui/core/demokit/sample/TypeFloat/manifest.json +1 -0
  492. package/test/sap/ui/core/demokit/sample/TypeInteger/manifest.json +1 -0
  493. package/test/sap/ui/core/demokit/sample/TypeTimeAsTime/manifest.json +1 -0
  494. package/test/sap/ui/core/demokit/sample/View/async/manifest.json +2 -1
  495. package/test/sap/ui/core/demokit/sample/View/preprocessor/manifest.json +2 -1
  496. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Opa.qunit.js +9 -8
  497. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/manifest.json +2 -1
  498. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Opa.qunit.js +12 -11
  499. package/test/sap/ui/core/demokit/sample/XMLComposite/02/manifest.json +1 -0
  500. package/test/sap/ui/core/demokit/sample/common/Controller.js +8 -8
  501. package/test/sap/ui/core/demokit/sample/common/Helper.js +19 -2
  502. package/test/sap/ui/core/demokit/sample/common/init.js +25 -21
  503. package/test/sap/ui/core/demokit/sample/common/pages/Any.js +3 -0
  504. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithOPA5/WebsiteCode.js +8 -7
  505. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithPageObjects/applicationUnderTest/manifest.json +1 -0
  506. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithPageObjects/manifest.json +2 -1
  507. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/manifest.json +2 -1
  508. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/webapp/manifest.json +2 -2
  509. package/test/sap/ui/core/demokit/sample/matcher/Descendant/manifest.json +2 -1
  510. package/test/sap/ui/core/demokit/sample/matcher/Descendant/webapp/manifest.json +2 -2
  511. package/test/sap/ui/core/demokit/sample/matcher/I18NText/manifest.json +2 -1
  512. package/test/sap/ui/core/demokit/sample/matcher/I18NText/webapp/manifest.json +2 -2
  513. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/manifest.json +2 -1
  514. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/webapp/manifest.json +2 -2
  515. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTimeOffset/manifest.json +1 -0
  516. package/test/sap/ui/core/demokit/sample/odata/types/v4/Date/manifest.json +1 -0
  517. package/test/sap/ui/core/demokit/sample/odata/types/v4/TimeOfDay/manifest.json +1 -0
  518. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/AutoExpand.view.xml +6 -2
  519. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Main.view.xml +7 -3
  520. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.controller.js +2 -2
  521. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.view.xml +7 -4
  522. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Opa.qunit.js +9 -8
  523. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/tests/expandPageCollapse.js +1 -1
  524. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/tests/filter.js +1 -1
  525. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/ObjectPage.controller.js +3 -2
  526. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.js +13 -11
  527. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/ListReport.controller.js +3 -2
  528. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Opa.qunit.js +13 -14
  529. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Opa.qunit.js +14 -11
  530. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/Component.js +4 -4
  531. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.controller.js +6 -4
  532. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.view.xml +6 -2
  533. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Main.controller.js +3 -3
  534. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Opa.qunit.js +19 -25
  535. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/GridTable.view.xml +6 -2
  536. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Component.js +19 -0
  537. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +93 -0
  538. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +89 -0
  539. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/SandboxModel.js +10 -0
  540. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/data/all.json +396 -0
  541. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/data/metadata.xml +423 -0
  542. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/manifest.json +70 -0
  543. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.js +11 -10
  544. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.qunit.js +10 -9
  545. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Opa.qunit.js +11 -10
  546. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Opa.qunit.js +8 -7
  547. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +8 -10
  548. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.view.xml +5 -2
  549. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Opa.qunit.js +16 -13
  550. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Main.controller.js +3 -2
  551. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Opa.qunit.js +12 -11
  552. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/MIT.RecursiveHierarchy maintenance.html +408 -0
  553. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/Opa.qunit.js +26 -8
  554. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +78 -13
  555. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +48 -9
  556. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +379 -287
  557. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/pages/Main.js +38 -5
  558. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/tests/createEdit.js +128 -0
  559. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/tests/pageExpandCollapse.js +24 -23
  560. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Opa.qunit.js +11 -10
  561. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Opa.qunit.js +10 -9
  562. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Component.js +3 -2
  563. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Opa.qunit.js +15 -14
  564. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/pages/Main.js +9 -8
  565. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/ChangeContext.js +1 -1
  566. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/Create.js +1 -1
  567. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/CreateMultiple.js +1 -1
  568. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/CreateRelative.js +1 -1
  569. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/MessageHandling.js +1 -1
  570. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/TypeDeterminationAndDelete.js +8 -9
  571. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/WriteNonDeferredGroup.js +1 -1
  572. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/additionalTargets.js +1 -1
  573. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Opa.qunit.js +9 -8
  574. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/tests/AdaptSalesOrdersTable.js +1 -1
  575. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Opa.qunit.js +10 -9
  576. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Main.view.xml +5 -2
  577. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Opa.qunit.js +10 -9
  578. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/pages/Main.js +4 -2
  579. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/Opa.qunit.js +11 -10
  580. package/test/sap/ui/core/demokit/tutorial/databinding/01/package.json +2 -5
  581. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +8 -0
  582. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/index.js +7 -3
  583. package/test/sap/ui/core/demokit/tutorial/databinding/02/package.json +2 -5
  584. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +8 -0
  585. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/index.js +4 -3
  586. package/test/sap/ui/core/demokit/tutorial/databinding/03/package.json +2 -5
  587. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +8 -0
  588. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/index.js +4 -3
  589. package/test/sap/ui/core/demokit/tutorial/databinding/04/package.json +2 -5
  590. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +8 -0
  591. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/index.js +4 -3
  592. package/test/sap/ui/core/demokit/tutorial/databinding/05/package.json +2 -5
  593. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +8 -0
  594. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/index.js +4 -3
  595. package/test/sap/ui/core/demokit/tutorial/databinding/06/package.json +2 -5
  596. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +8 -0
  597. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/index.js +4 -3
  598. package/test/sap/ui/core/demokit/tutorial/databinding/07/package.json +2 -5
  599. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +8 -0
  600. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/index.js +4 -3
  601. package/test/sap/ui/core/demokit/tutorial/databinding/08/package.json +2 -5
  602. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +8 -0
  603. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/index.js +4 -3
  604. package/test/sap/ui/core/demokit/tutorial/databinding/09/package.json +2 -5
  605. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +8 -0
  606. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/index.js +4 -3
  607. package/test/sap/ui/core/demokit/tutorial/databinding/10/package.json +2 -5
  608. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +8 -0
  609. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/index.js +4 -3
  610. package/test/sap/ui/core/demokit/tutorial/databinding/11/package.json +2 -5
  611. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +8 -0
  612. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/index.js +6 -4
  613. package/test/sap/ui/core/demokit/tutorial/databinding/12/package.json +2 -5
  614. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +8 -0
  615. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/index.js +6 -4
  616. package/test/sap/ui/core/demokit/tutorial/databinding/13/package.json +2 -5
  617. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +8 -0
  618. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/index.js +6 -4
  619. package/test/sap/ui/core/demokit/tutorial/databinding/14/package.json +2 -5
  620. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +8 -0
  621. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/index.js +6 -4
  622. package/test/sap/ui/core/demokit/tutorial/databinding/15/package.json +2 -5
  623. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +8 -0
  624. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/index.js +6 -4
  625. package/test/sap/ui/core/demokit/tutorial/mockserver/01/package.json +2 -5
  626. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +8 -0
  627. package/test/sap/ui/core/demokit/tutorial/mockserver/01/webapp/manifest.json +1 -1
  628. package/test/sap/ui/core/demokit/tutorial/mockserver/02/package.json +2 -5
  629. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +8 -0
  630. package/test/sap/ui/core/demokit/tutorial/mockserver/02/webapp/manifest.json +1 -1
  631. package/test/sap/ui/core/demokit/tutorial/mockserver/03/package.json +2 -5
  632. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +8 -0
  633. package/test/sap/ui/core/demokit/tutorial/mockserver/03/webapp/manifest.json +1 -1
  634. package/test/sap/ui/core/demokit/tutorial/mockserver/04/package.json +2 -5
  635. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +8 -0
  636. package/test/sap/ui/core/demokit/tutorial/mockserver/04/webapp/manifest.json +1 -1
  637. package/test/sap/ui/core/demokit/tutorial/navigation/01/package.json +2 -4
  638. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +7 -0
  639. package/test/sap/ui/core/demokit/tutorial/navigation/01/webapp/index.html +1 -1
  640. package/test/sap/ui/core/demokit/tutorial/navigation/02/package.json +2 -4
  641. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +7 -0
  642. package/test/sap/ui/core/demokit/tutorial/navigation/02/webapp/index.html +1 -1
  643. package/test/sap/ui/core/demokit/tutorial/navigation/03/package.json +2 -4
  644. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +7 -0
  645. package/test/sap/ui/core/demokit/tutorial/navigation/03/webapp/index.html +1 -1
  646. package/test/sap/ui/core/demokit/tutorial/navigation/04/package.json +2 -4
  647. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +7 -0
  648. package/test/sap/ui/core/demokit/tutorial/navigation/04/webapp/index.html +1 -1
  649. package/test/sap/ui/core/demokit/tutorial/navigation/05/package.json +2 -4
  650. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +7 -0
  651. package/test/sap/ui/core/demokit/tutorial/navigation/05/webapp/index.html +1 -1
  652. package/test/sap/ui/core/demokit/tutorial/navigation/06/package.json +2 -4
  653. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +7 -0
  654. package/test/sap/ui/core/demokit/tutorial/navigation/06/webapp/index.html +1 -1
  655. package/test/sap/ui/core/demokit/tutorial/navigation/07/package.json +2 -4
  656. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +7 -0
  657. package/test/sap/ui/core/demokit/tutorial/navigation/07/webapp/index.html +1 -1
  658. package/test/sap/ui/core/demokit/tutorial/navigation/08/package.json +2 -4
  659. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +7 -0
  660. package/test/sap/ui/core/demokit/tutorial/navigation/08/webapp/index.html +1 -1
  661. package/test/sap/ui/core/demokit/tutorial/navigation/09/package.json +2 -4
  662. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +7 -0
  663. package/test/sap/ui/core/demokit/tutorial/navigation/09/webapp/index.html +1 -1
  664. package/test/sap/ui/core/demokit/tutorial/navigation/10/package.json +2 -4
  665. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +7 -0
  666. package/test/sap/ui/core/demokit/tutorial/navigation/10/webapp/index.html +1 -1
  667. package/test/sap/ui/core/demokit/tutorial/navigation/11/package.json +2 -4
  668. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +7 -0
  669. package/test/sap/ui/core/demokit/tutorial/navigation/11/webapp/index.html +1 -1
  670. package/test/sap/ui/core/demokit/tutorial/navigation/12/package.json +2 -4
  671. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +7 -0
  672. package/test/sap/ui/core/demokit/tutorial/navigation/12/webapp/index.html +1 -1
  673. package/test/sap/ui/core/demokit/tutorial/navigation/13/package.json +2 -4
  674. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +7 -0
  675. package/test/sap/ui/core/demokit/tutorial/navigation/13/webapp/index.html +1 -1
  676. package/test/sap/ui/core/demokit/tutorial/navigation/14/package.json +2 -4
  677. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +7 -0
  678. package/test/sap/ui/core/demokit/tutorial/navigation/14/webapp/index.html +1 -1
  679. package/test/sap/ui/core/demokit/tutorial/navigation/15/package.json +2 -4
  680. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +7 -0
  681. package/test/sap/ui/core/demokit/tutorial/navigation/15/webapp/index.html +1 -1
  682. package/test/sap/ui/core/demokit/tutorial/navigation/16/package.json +2 -4
  683. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +7 -0
  684. package/test/sap/ui/core/demokit/tutorial/navigation/16/webapp/index.html +1 -1
  685. package/test/sap/ui/core/demokit/tutorial/navigation/17/package.json +4 -6
  686. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +8 -1
  687. package/test/sap/ui/core/demokit/tutorial/navigation/17/webapp/index.html +1 -1
  688. package/test/sap/ui/core/demokit/tutorial/navigation/index.html +2 -2
  689. package/test/sap/ui/core/demokit/tutorial/odatav4/01/package.json +2 -6
  690. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +9 -0
  691. package/test/sap/ui/core/demokit/tutorial/odatav4/02/package.json +2 -6
  692. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +9 -0
  693. package/test/sap/ui/core/demokit/tutorial/odatav4/03/package.json +2 -6
  694. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +9 -0
  695. package/test/sap/ui/core/demokit/tutorial/odatav4/04/package.json +2 -6
  696. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +9 -0
  697. package/test/sap/ui/core/demokit/tutorial/odatav4/05/package.json +2 -6
  698. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +9 -0
  699. package/test/sap/ui/core/demokit/tutorial/odatav4/06/package.json +2 -6
  700. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +9 -0
  701. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/controller/App.controller.js +5 -5
  702. package/test/sap/ui/core/demokit/tutorial/odatav4/07/package.json +2 -6
  703. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +9 -0
  704. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/controller/App.controller.js +7 -7
  705. package/test/sap/ui/core/demokit/tutorial/odatav4/08/package.json +2 -6
  706. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +9 -0
  707. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/controller/App.controller.js +7 -7
  708. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/test/integration/opaTests.qunit.js +5 -5
  709. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/test/integration/pages/Tutorial.js +1 -1
  710. package/test/sap/ui/core/demokit/tutorial/odatav4/09/package.json +2 -6
  711. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +9 -0
  712. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/controller/App.controller.js +7 -7
  713. package/test/sap/ui/core/demokit/tutorial/odatav4/10/package.json +2 -6
  714. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +9 -0
  715. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/controller/App.controller.js +7 -7
  716. package/test/sap/ui/core/demokit/tutorial/odatav4/11/package.json +2 -6
  717. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +9 -0
  718. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/controller/App.controller.js +7 -7
  719. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/test/integration/opaTests.qunit.js +5 -5
  720. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/test/integration/pages/Tutorial.js +1 -1
  721. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/package.json +2 -5
  722. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +8 -0
  723. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/webapp/manifest.json +1 -1
  724. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/webapp/test/integration/opaTests.qunit.js +6 -6
  725. package/test/sap/ui/core/frameoptions/createcontent.js +7 -6
  726. package/test/sap/ui/core/internal/samples/client/MusicCollection/index.html +1 -1
  727. package/test/sap/ui/core/internal/samples/composite/xmlcomposite/exStringAndFloat/Test.controller.js +3 -2
  728. package/test/sap/ui/core/internal/samples/composite/xmlcomposite/exTableWrapperOuterBinding/Test.controller.js +3 -2
  729. package/test/sap/ui/core/internal/samples/odata/twoFields/Opa.qunit.html +1 -1
  730. package/test/sap/ui/core/internal/samples/odata/twoFields/Opa.qunit.js +8 -8
  731. package/test/sap/ui/core/internal/samples/odata/twoFields/index.html +1 -1
  732. package/test/sap/ui/core/internal/samples/odata/v2/Products/Opa.qunit.html +1 -1
  733. package/test/sap/ui/core/internal/samples/odata/v2/Products/Opa.qunit.js +7 -7
  734. package/test/sap/ui/core/internal/samples/odata/v2/Products/index.html +1 -1
  735. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Component.js +3 -2
  736. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/MIT.SalesOrders(V2).ODLB.create.html +2 -0
  737. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.controller.js +4 -4
  738. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.view.xml +6 -3
  739. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Opa.qunit.html +1 -1
  740. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Opa.qunit.js +9 -6
  741. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/SandboxModel.js +3 -0
  742. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/data/ODLB.create/TC3/SalesOrderSet_desc_4-1.json +16 -0
  743. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/index.html +1 -1
  744. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/tests/ODataListBinding.create/TC3_SalesOrders_InlineCreationRow.js +9 -0
  745. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Component.js +3 -2
  746. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.controller.js +3 -3
  747. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.view.xml +1 -1
  748. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/index.html +1 -1
  749. package/test/sap/ui/core/qunit/BlockLayerUtils.qunit.js +9 -7
  750. package/test/sap/ui/core/qunit/CalculatedFields.qunit.js +4 -2
  751. package/test/sap/ui/core/qunit/ContextMenuSupport.qunit.js +3 -2
  752. package/test/sap/ui/core/qunit/ControlDefinition.qunit.js +49 -28
  753. package/test/sap/ui/core/qunit/ControlRenderer.qunit.js +218 -223
  754. package/test/sap/ui/core/qunit/Core.qunit.js +39 -34
  755. package/test/sap/ui/core/qunit/CoreEvents.qunit.js +17 -15
  756. package/test/sap/ui/core/qunit/Core_libraryTerminologies_integration.qunit.js +12 -11
  757. package/test/sap/ui/core/qunit/Core_repeatedExecution.qunit.js +3 -3
  758. package/test/sap/ui/core/qunit/CustomStyleClassSupport.qunit.js +122 -119
  759. package/test/sap/ui/core/qunit/CustomThemeFallback.qunit.js +5 -17
  760. package/test/sap/ui/core/qunit/Declarative.qunit.js +37 -37
  761. package/test/sap/ui/core/qunit/Element_base.qunit.js +1 -1
  762. package/test/sap/ui/core/qunit/Element_data.qunit.js +5 -5
  763. package/test/sap/ui/core/qunit/Element_destroy.qunit.js +6 -4
  764. package/test/sap/ui/core/qunit/Element_focus.qunit.js +25 -24
  765. package/test/sap/ui/core/qunit/Element_metadata_selector.qunit.js +3 -2
  766. package/test/sap/ui/core/qunit/EnabledPropagator.qunit.js +7 -6
  767. package/test/sap/ui/core/qunit/EventBus.qunit.js +4 -3
  768. package/test/sap/ui/core/qunit/ExpressionParser.qunit.js +1 -1
  769. package/test/sap/ui/core/qunit/FastNavigation.qunit.js +3 -2
  770. package/test/sap/ui/core/qunit/FastNavigationWithWebComponents.qunit.js +5 -5
  771. package/test/sap/ui/core/qunit/FieldGroup.qunit.js +17 -13
  772. package/test/sap/ui/core/qunit/FocusHandler.qunit.js +11 -9
  773. package/test/sap/ui/core/qunit/Fragment.qunit.js +47 -46
  774. package/test/sap/ui/core/qunit/Fragment_legacyAPIs.qunit.js +63 -61
  775. package/test/sap/ui/core/qunit/HTML.qunit.js +67 -67
  776. package/test/sap/ui/core/qunit/Icon.qunit.js +66 -65
  777. package/test/sap/ui/core/qunit/IconPool.qunit.js +5 -4
  778. package/test/sap/ui/core/qunit/InvisibleText.qunit.js +17 -15
  779. package/test/sap/ui/core/qunit/Lib.qunit.js +8 -8
  780. package/test/sap/ui/core/qunit/LocalBusyIndicator.qunit.js +24 -24
  781. package/test/sap/ui/core/qunit/ManagedObject.qunit.js +3 -3
  782. package/test/sap/ui/core/qunit/PlaceAt.qunit.js +2 -2
  783. package/test/sap/ui/core/qunit/RenderManager.qunit.js +54 -53
  784. package/test/sap/ui/core/qunit/ResizeHandler.qunit.js +8 -9
  785. package/test/sap/ui/core/qunit/ScrollBar.qunit.js +7 -6
  786. package/test/sap/ui/core/qunit/ShortcutHints.qunit.js +13 -11
  787. package/test/sap/ui/core/qunit/StashedControlSupport.qunit.js +15 -14
  788. package/test/sap/ui/core/qunit/ThemeHelper.qunit.js +5 -4
  789. package/test/sap/ui/core/qunit/ThemeManager.qunit.js +47 -79
  790. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +44 -375
  791. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +686 -0
  792. package/test/sap/ui/core/qunit/Theming.qunit.js +88 -50
  793. package/test/sap/ui/core/qunit/Theming_default_and_fallback.qunit.js +130 -0
  794. package/test/sap/ui/core/qunit/TooltipBase.qunit.js +6 -4
  795. package/test/sap/ui/core/qunit/UIArea.qunit.js +258 -28
  796. package/test/sap/ui/core/qunit/analytics/testsuite4analytics.qunit.html +3 -3
  797. package/test/sap/ui/core/qunit/analytics/testsuite4analytics.qunit.js +9 -8
  798. package/test/sap/ui/core/qunit/app/MessageListBinding.qunit.js +10 -10
  799. package/test/sap/ui/core/qunit/base/Config.qunit.js +12 -2
  800. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +123 -52
  801. package/test/sap/ui/core/qunit/base/Config_meta.qunit.html +2 -0
  802. package/test/sap/ui/core/qunit/base/config/GlobalConfig.js +3 -1
  803. package/test/sap/ui/core/qunit/base/config/GlobalConfigForCascade.js +4 -1
  804. package/test/sap/ui/core/qunit/base/i18n/Localization.qunit.js +4 -3
  805. package/test/sap/ui/core/qunit/base/i18n/ResourceBundle.qunit.js +13 -3
  806. package/test/sap/ui/core/qunit/base/util/UriParameters.qunit.js +27 -1
  807. package/test/sap/ui/core/qunit/bootstrap/BootstrapCustomBootTaskPreloadCss.qunit.js +4 -4
  808. package/test/sap/ui/core/qunit/bootstrap/BootstrapMinimal.qunit.js +3 -3
  809. package/test/sap/ui/core/qunit/bootstrap/BootstrapMinimal_legacyAPIs.qunit.js +13 -11
  810. package/test/sap/ui/core/qunit/bootstrap/BootstrapPreload.qunit.js +1 -1
  811. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithCustomBootTask.beforeBootstrap.qunit.js +22 -21
  812. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithCustomBootTask.qunit.js +4 -9
  813. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithCustomScript_legacyAPIs.qunit.js +13 -11
  814. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithNoJQuery_legacyAPIs.qunit.js +7 -5
  815. package/test/sap/ui/core/qunit/bootstrap/CalendarClassLoadingWithCustomBootTaskAndPreload.qunit.js +27 -14
  816. package/test/sap/ui/core/qunit/bootstrap/CfgDefaults.qunit.js +4 -2
  817. package/test/sap/ui/core/qunit/bootstrap/CfgFromConfigAttribute.qunit.js +4 -3
  818. package/test/sap/ui/core/qunit/bootstrap/CfgFromGlobalObject.qunit.js +4 -3
  819. package/test/sap/ui/core/qunit/bootstrap/CfgFromTagAttributes.qunit.js +5 -4
  820. package/test/sap/ui/core/qunit/bootstrap/Configuration.qunit.js +2 -198
  821. package/test/sap/ui/core/qunit/bootstrap/Configuration_language_via_URL.qunit.js +210 -0
  822. package/test/sap/ui/core/qunit/bootstrap/ThemeVersion.qunit.js +33 -30
  823. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +18 -6
  824. package/test/sap/ui/core/qunit/component/Component.qunit.js +26 -15
  825. package/test/sap/ui/core/qunit/component/ComponentSupport.qunit.js +6 -5
  826. package/test/sap/ui/core/qunit/component/Component_dependencyLoading.qunit.js +15 -9
  827. package/test/sap/ui/core/qunit/component/Component_dependencyLoading_unavoidablySync.qunit.js +10 -6
  828. package/test/sap/ui/core/qunit/component/Component_unavoidablySync.qunit.js +4 -3
  829. package/test/sap/ui/core/qunit/component/Customizing.qunit.js +11 -11
  830. package/test/sap/ui/core/qunit/component/Customizing_async.qunit.js +4 -3
  831. package/test/sap/ui/core/qunit/component/Customizing_disabled.qunit.js +9 -10
  832. package/test/sap/ui/core/qunit/component/Customizing_legacyAPIs.qunit.js +10 -11
  833. package/test/sap/ui/core/qunit/component/Customizing_multi.qunit.js +9 -11
  834. package/test/sap/ui/core/qunit/component/Customizing_unavoidablySync.qunit.js +9 -11
  835. package/test/sap/ui/core/qunit/component/ExtensionPoint.qunit.js +4 -5
  836. package/test/sap/ui/core/qunit/component/ExtensionPoint_unavoidablySync.qunit.js +4 -3
  837. package/test/sap/ui/core/qunit/component/Metadata.qunit.js +3 -3
  838. package/test/sap/ui/core/qunit/component/Models.qunit.js +103 -44
  839. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +38 -22
  840. package/test/sap/ui/core/qunit/component/UIComponent_unavoidablySync.qunit.js +23 -22
  841. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component1/manifest.json +2 -1
  842. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component2/manifest.json +1 -0
  843. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component3/manifest.json +2 -1
  844. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component4/manifest.json +1 -0
  845. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component5/manifest.json +1 -1
  846. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component6/manifest.json +1 -0
  847. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/componentVariant/manifest.json +1 -0
  848. package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/manifest.json +1 -1
  849. package/test/sap/ui/core/qunit/component/testdata/v2inline/Component.js +1 -1
  850. package/test/sap/ui/core/qunit/composite/XMLComposite.qunit.js +48 -48
  851. package/test/sap/ui/core/qunit/csp/ContentSecurityPolicy.qunit.js +18 -13
  852. package/test/sap/ui/core/qunit/dnd/DragAndDrop.qunit.js +19 -18
  853. package/test/sap/ui/core/qunit/dnd/DragInfo.qunit.js +13 -12
  854. package/test/sap/ui/core/qunit/dnd/DropInfo.qunit.js +5 -4
  855. package/test/sap/ui/core/qunit/generic/ControlMemoryLeaks.qunit.js +7 -6
  856. package/test/sap/ui/core/qunit/generic/DuplicateIdCheck.qunit.js +7 -6
  857. package/test/sap/ui/core/qunit/generic/legacy/ControlIterator.qunit.js +6 -6
  858. package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaks.qunit.js +20 -17
  859. package/test/sap/ui/core/qunit/generic/legacy/DuplicateIdCheck.qunit.js +8 -7
  860. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +1 -2
  861. package/test/sap/ui/core/qunit/internal/1Ring.qunit.html +14 -19
  862. package/test/sap/ui/core/qunit/internal/1Ring.qunit.js +34 -22
  863. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.html +4 -5
  864. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +1 -0
  865. package/test/sap/ui/core/qunit/internal/AnnotationParser.qunit.html +4 -4
  866. package/test/sap/ui/core/qunit/internal/ODataV4.qunit.html +6 -6
  867. package/test/sap/ui/core/qunit/internal/testsuite.feature-odata-v4.qunit.js +4 -0
  868. package/test/sap/ui/core/qunit/internal/testsuite.models.qunit.js +19 -9
  869. package/test/sap/ui/core/qunit/isBehindOtherElement.qunit.js +7 -7
  870. package/test/sap/ui/core/qunit/jquery-mobile-custom.qunit.js +3 -3
  871. package/test/sap/ui/core/qunit/jquery.sap.events.qunit.js +3 -2
  872. package/test/sap/ui/core/qunit/jquery.sap.global-config.qunit.js +2 -4
  873. package/test/sap/ui/core/qunit/jquery.sap.ui.qunit.js +20 -19
  874. package/test/sap/ui/core/qunit/json/JSONModel.qunit.js +5 -9
  875. package/test/sap/ui/core/qunit/messages/Messaging.qunit.js +137 -0
  876. package/test/sap/ui/core/qunit/messages/messagesDataBinding.qunit.js +3 -1
  877. package/test/sap/ui/core/qunit/messages/messagesEnd2End.qunit.js +10 -10
  878. package/test/sap/ui/core/qunit/messages/messagesGeneral.qunit.js +42 -46
  879. package/test/sap/ui/core/qunit/messages/messagesGeneral_legacyAPIs.qunit.js +158 -0
  880. package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +29 -39
  881. package/test/sap/ui/core/qunit/messages/testsuite.messaging.base.qunit.js +9 -2
  882. package/test/sap/ui/core/qunit/model/Binding.qunit.js +8 -8
  883. package/test/sap/ui/core/qunit/model/ClientPropertyBinding.qunit.js +47 -0
  884. package/test/sap/ui/core/qunit/model/controlhelper/TreeBindingProxy.qunit.js +24 -14
  885. package/test/sap/ui/core/qunit/mvc/AnyView.qunit.js +7 -6
  886. package/test/sap/ui/core/qunit/mvc/AnyViewAsync.qunit.js +3 -2
  887. package/test/sap/ui/core/qunit/mvc/AsyncXMLView.qunit.js +5 -3
  888. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +3 -3
  889. package/test/sap/ui/core/qunit/mvc/View.qunit.js +5 -1
  890. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorAsync_unavoidablyUsingInlineStyle.qunit.js +5 -4
  891. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +8 -9
  892. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +50 -44
  893. package/test/sap/ui/core/qunit/mvc/testdata/TypedViewWithRendererRenderer.js +2 -2
  894. package/test/sap/ui/core/qunit/mvc/testdata/stashed/OP.html +1 -1
  895. package/test/sap/ui/core/qunit/mvc/testdata/stashed/manifest.json +2 -1
  896. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing.qunit.js +18 -22
  897. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing_legacyAPIs.qunit.js +23 -27
  898. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AnyViewAsync_legacyAPIs.qunit.js +10 -11
  899. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AnyView_legacyAPIs.qunit.js +7 -6
  900. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AsyncXMLView_legacyAPIs.qunit.js +5 -3
  901. package/test/sap/ui/core/qunit/mvc_legacyAPIs/HTMLView_legacyAPIs.qunit.js +8 -7
  902. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLTemplateProcessorRequireXML_legacyAPIs.qunit.js +7 -7
  903. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLView_legacyAPIs.qunit.js +45 -51
  904. package/test/sap/ui/core/qunit/odata/ODataAnnotations.qunit.js +52 -20
  905. package/test/sap/ui/core/qunit/odata/{ODataListBinding.qunit.js → ODataListBinding_legacyAPIs.qunit.js} +27 -0
  906. package/test/sap/ui/core/qunit/odata/ODataMessageParser.qunit.js +44 -48
  907. package/test/sap/ui/core/qunit/odata/ODataMessageParserNoFakeService.qunit.js +19 -15
  908. package/test/sap/ui/core/qunit/odata/ODataMetaModel.qunit.js +101 -29
  909. package/test/sap/ui/core/qunit/odata/ODataMetadata.qunit.js +17 -7
  910. package/test/sap/ui/core/qunit/odata/ODataTreeBindingAdapter.qunit.js +147 -89
  911. package/test/sap/ui/core/qunit/odata/ODataUtils.qunit.js +1 -0
  912. package/test/sap/ui/core/qunit/odata/_AnnotationHelperBasics.qunit.js +10 -4
  913. package/test/sap/ui/core/qunit/odata/data/ODataModelFakeService.js +1 -1
  914. package/test/sap/ui/core/qunit/odata/type/DateTimeBase.qunit.js +38 -12
  915. package/test/sap/ui/core/qunit/odata/type/ODataType.qunit.js +9 -0
  916. package/test/sap/ui/core/qunit/odata/type/TimeOfDay.qunit.js +33 -12
  917. package/test/sap/ui/core/qunit/odata/v2/CanonicalRequests.qunit.js +5 -4
  918. package/test/sap/ui/core/qunit/odata/v2/Context.qunit.js +12 -0
  919. package/test/sap/ui/core/qunit/odata/v2/ODataListBindingNoFakeService.qunit.js +485 -22
  920. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +762 -90
  921. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +149 -6
  922. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingFlatNoFakeService.qunit.js +21 -0
  923. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingNoFakeService.qunit.js +1 -2
  924. package/test/sap/ui/core/qunit/odata/v2/ODataV2ListBinding.qunit.js +7 -207
  925. package/test/sap/ui/core/qunit/odata/v2/ODataV2ListBinding_Filter_legacyAPIs.qunit.js +281 -0
  926. package/test/sap/ui/core/qunit/odata/v2/ODataV2Model.qunit.js +9 -8
  927. package/test/sap/ui/core/qunit/odata/v2/ODataV2TreeBinding.qunit.js +1 -0
  928. package/test/sap/ui/core/qunit/odata/v2/V2ODataModel.qunit.js +95 -85
  929. package/test/sap/ui/core/qunit/odata/v2/V2ODataModelB.qunit.js +70 -67
  930. package/test/sap/ui/core/qunit/odata/v2/V2ODataModelDataState.qunit.js +19 -20
  931. package/test/sap/ui/core/qunit/odata/v2/testsuite.odatav2.qunit.js +4 -0
  932. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +145 -35
  933. package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +64 -13
  934. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +359 -78
  935. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +255 -33
  936. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +2267 -148
  937. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +18 -17
  938. package/test/sap/ui/core/qunit/odata/v4/ODataParentBinding.qunit.js +19 -9
  939. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +6 -27
  940. package/test/sap/ui/core/qunit/odata/v4/data/metadata.json +3 -1
  941. package/test/sap/ui/core/qunit/odata/v4/data/metadata.xml +2 -2
  942. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +444 -53
  943. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +7 -8
  944. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +295 -161
  945. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +12 -22
  946. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +108 -10
  947. package/test/sap/ui/core/qunit/odata/v4/lib/_V2Requestor.qunit.js +1 -1
  948. package/test/sap/ui/core/qunit/opa/Opa5PageObject.qunit.js +5 -6
  949. package/test/sap/ui/core/qunit/opa/OpaPlugin.qunit.js +35 -46
  950. package/test/sap/ui/core/qunit/opa/RecordReplay.qunit.js +13 -14
  951. package/test/sap/ui/core/qunit/opa/_ControlFinder.qunit.js +5 -4
  952. package/test/sap/ui/core/qunit/opa/actions/Action.qunit.js +6 -5
  953. package/test/sap/ui/core/qunit/opa/actions/EnterText.qunit.js +22 -21
  954. package/test/sap/ui/core/qunit/opa/actions/Press.qunit.js +60 -56
  955. package/test/sap/ui/core/qunit/opa/autowaiter/_cssAnimationWaiter.js +5 -7
  956. package/test/sap/ui/core/qunit/opa/autowaiter/_cssTransitionWaiter.js +5 -9
  957. package/test/sap/ui/core/qunit/opa/autowaiter/_jsAnimationWaiter.js +5 -6
  958. package/test/sap/ui/core/qunit/opa/autowaiter/_navigationContainerWaiter.js +5 -4
  959. package/test/sap/ui/core/qunit/opa/autowaiter/_resourceWaiter.js +21 -20
  960. package/test/sap/ui/core/qunit/opa/fixture/bindingPath.js +6 -5
  961. package/test/sap/ui/core/qunit/opa/matchers/Interactable.qunit.js +7 -5
  962. package/test/sap/ui/core/qunit/opa/matchers/LabelFor.qunit.js +4 -3
  963. package/test/sap/ui/core/qunit/opa/matchers/Sibling.qunit.js +4 -3
  964. package/test/sap/ui/core/qunit/opa/matchers/Visible.qunit.js +6 -5
  965. package/test/sap/ui/core/qunit/opa/matchers/_Busy.qunit.js +28 -27
  966. package/test/sap/ui/core/qunit/opa/matchers/_Editable.qunit.js +11 -10
  967. package/test/sap/ui/core/qunit/opa/matchers/_Enabled.qunit.js +11 -10
  968. package/test/sap/ui/core/qunit/opa/matchers/_Visitor.qunit.js +5 -4
  969. package/test/sap/ui/core/qunit/opa/opa5/actions.qunit.js +8 -7
  970. package/test/sap/ui/core/qunit/opa/opa5/basics.qunit.js +12 -17
  971. package/test/sap/ui/core/qunit/opa/opa5/logging.qunit.js +5 -6
  972. package/test/sap/ui/core/qunit/opa/opa5/matchers.qunit.js +6 -5
  973. package/test/sap/ui/core/qunit/opa/selectors/_BindingPath.js +10 -9
  974. package/test/sap/ui/core/qunit/opa/selectors/_ControlSelectorGenerator.js +6 -7
  975. package/test/sap/ui/core/qunit/opa/selectors/_ControlSelectorValidator.js +4 -3
  976. package/test/sap/ui/core/qunit/opa/selectors/_DropdownItem.js +4 -3
  977. package/test/sap/ui/core/qunit/opa/selectors/_GlobalID.js +4 -3
  978. package/test/sap/ui/core/qunit/opa/selectors/_LabelFor.js +4 -3
  979. package/test/sap/ui/core/qunit/opa/selectors/_Properties.js +33 -27
  980. package/test/sap/ui/core/qunit/opa/selectors/_Selector.js +9 -11
  981. package/test/sap/ui/core/qunit/opa/selectors/_TableRowItem.js +8 -9
  982. package/test/sap/ui/core/qunit/opa/selectors/_ViewID.js +5 -7
  983. package/test/sap/ui/core/qunit/performance/trace/Interaction.qunit.js +35 -28
  984. package/test/sap/ui/core/qunit/routing/Placeholder.qunit.js +11 -9
  985. package/test/sap/ui/core/qunit/routing/PlaceholderOptOut.qunit.js +5 -3
  986. package/test/sap/ui/core/qunit/routing/async/Router.qunit.js +57 -0
  987. package/test/sap/ui/core/qunit/routing/fixture/historyIframe/iframe/index.html +1 -1
  988. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Child/Component.js +30 -0
  989. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Child/manifest.json +25 -0
  990. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Parent/Component.js +14 -0
  991. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Parent/manifest.json +51 -0
  992. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Parent/view/NotFound.view.xml +3 -0
  993. package/test/sap/ui/core/qunit/routing/fixture/router/component/2LevelsMultiNavTo/Parent/view/RootView.view.xml +5 -0
  994. package/test/sap/ui/core/qunit/rule/app/deprecatedJSViewUsage.qunit.js +4 -0
  995. package/test/sap/ui/core/qunit/rule/app/globalApiUsage.qunit.js +4 -0
  996. package/test/sap/ui/core/qunit/rule/app/jquerySapUsage.qunit.js +4 -0
  997. package/test/sap/ui/core/qunit/rule/app/syncXHR.qunit.js +28 -17
  998. package/test/sap/ui/core/qunit/rule/app/syncXHRBootstrap.qunit.js +7 -3
  999. package/test/sap/ui/core/qunit/rule/app/syncXHRBootstrapDebug.qunit.js +7 -3
  1000. package/test/sap/ui/core/qunit/rule/app/syncXHRBootstrapDebugBeforeBootstrap.js +4 -0
  1001. package/test/sap/ui/core/qunit/rule/config/asynchronousXMLViews.qunit.js +13 -19
  1002. package/test/sap/ui/core/qunit/rule/misc/silentEventBus.qunit.js +8 -7
  1003. package/test/sap/ui/core/qunit/rule/model/modelSupport.qunit.js +11 -2
  1004. package/test/sap/ui/core/qunit/rule/testsuite.rule.qunit.js +18 -0
  1005. package/test/sap/ui/core/qunit/support/techinfo/TechnicalInfoTestbench.html +3 -1
  1006. package/test/sap/ui/core/qunit/test/starter/find/index.html +1 -1
  1007. package/test/sap/ui/core/qunit/test/starter/find/main.js +13 -9
  1008. package/test/sap/ui/core/qunit/testsuite.core.framework.qunit.js +0 -6
  1009. package/test/sap/ui/core/qunit/testsuites/testsuite.base.configuration.qunit.js +1 -1
  1010. package/test/sap/ui/core/qunit/testsuites/testsuite.databinding.qunit.js +16 -6
  1011. package/test/sap/ui/core/qunit/testsuites/testsuite.foundation.enablement.qunit.js +7 -1
  1012. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +48 -6
  1013. package/test/sap/ui/core/qunit/tmpl/Template.qunit.js +36 -35
  1014. package/test/sap/ui/core/qunit/types/DateFormat.qunit.js +13 -0
  1015. package/test/sap/ui/core/qunit/types/DateInterval.qunit.js +2 -2
  1016. package/test/sap/ui/core/qunit/util/BusyIndicatorNoCore.qunit.js +2 -2
  1017. package/test/sap/ui/core/qunit/util/InvisibleMessage.qunit.js +4 -4
  1018. package/test/sap/ui/core/qunit/util/LabelEnablement.qunit.js +27 -31
  1019. package/test/sap/ui/core/qunit/util/Popup.qunit.js +27 -27
  1020. package/test/sap/ui/core/qunit/util/ResponsivePaddingsEnablement.qunit.js +13 -9
  1021. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +60 -7
  1022. package/test/sap/ui/core/qunit/util/jQuery.sap.Version.qunit.js +5 -5
  1023. package/test/sap/ui/core/qunit/util/jQuery.sap.measure.qunit.js +1 -1
  1024. package/test/sap/ui/core/qunit/util/jquery.sap.dom.qunit.js +3 -2
  1025. package/test/sap/ui/core/qunit/util/reflection/JsControlTreeModifier.qunit.js +38 -21
  1026. package/test/sap/ui/core/qunit/util/reflection/XmlTreeModifier.qunit.js +64 -40
  1027. package/test/sap/ui/core/qunit/util/static/TechnicalInfoTestbenchInit.js +8 -2
  1028. package/test/sap/ui/core/qunit/util/support/TechnicalInfo.qunit.js +11 -10
  1029. package/test/sap/ui/core/qunit/webc/WebComponent.qunit.js +188 -0
  1030. package/test/sap/ui/core/qunit/webc/testsuite.webc.qunit.html +14 -0
  1031. package/test/sap/ui/core/qunit/webc/testsuite.webc.qunit.js +22 -0
  1032. package/test/sap/ui/core/qunit/xml/XMLPropertyBinding.qunit.js +69 -8
  1033. package/test/sap/ui/core/relnotes/changes-1.117.json +1 -34
  1034. package/test/sap/ui/core/relnotes/changes-1.118.json +110 -0
  1035. package/test/sap/ui/core/relnotes/changes-1.119.json +217 -0
  1036. package/test/sap/ui/core/resources/fastnav.js +3 -2
  1037. package/test/sap/ui/core/samples/ResponsiveDemo.html +3 -3
  1038. package/test/sap/ui/core/samples/components/commands/manifest.json +2 -2
  1039. package/test/sap/ui/core/samples/components/resourcesCSS/index.html +1 -1
  1040. package/test/sap/ui/core/samples/components/sample/manifest.json +2 -1
  1041. package/test/sap/ui/core/samples/databinding/DataBindingAsyncType.html +3 -2
  1042. package/test/sap/ui/core/samples/databinding/DatabindingMessages.html +158 -153
  1043. package/test/sap/ui/core/samples/databinding/ODatabindingMessages.html +7 -9
  1044. package/test/sap/ui/core/samples/databinding/UnitTable.view.xml +9 -2
  1045. package/test/sap/ui/core/samples/databinding/UnitTableMain.js +3 -4
  1046. package/test/sap/ui/core/samples/extensions/index_legacyAPIs.html +15 -13
  1047. package/test/sap/ui/core/samples/formatting/controller/ChooseFormatOptions.controller.js +3 -2
  1048. package/test/sap/ui/core/samples/formatting/manifest.json +2 -2
  1049. package/test/sap/ui/core/samples/mvc/ExtendedXMLViewEventHandlerSyntax.html +5 -3
  1050. package/test/sap/ui/core/samples/mvc/XMLViewAsync.html +62 -61
  1051. package/test/sap/ui/core/samples/mvc/XMLViewBindableAggregation.html +1 -1
  1052. package/test/sap/ui/core/samples/routing_legacyAPIs/AsyncViews.html +124 -123
  1053. package/test/sap/ui/core/terminologies/App.controller.js +3 -2
  1054. package/test/sap/ui/core/terminologies/App.view.xml +64 -64
  1055. package/test/sap/ui/core/tmpl_legacyAPIs/TemplateSimple.html +38 -37
  1056. package/test/sap/ui/core/util/PasteHelper.html +5 -4
  1057. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/firstItem-contextMenu.ref.lnk +1 -1
  1058. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/initial.ref.lnk +1 -1
  1059. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/lastItem-contextMenu.ref.lnk +1 -1
  1060. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/leftDownBtn-contextMenu.ref.lnk +1 -1
  1061. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/myButtonSample-contextMenu.ref.lnk +1 -1
  1062. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/rightDownBtn-contextMenu.ref.lnk +1 -1
  1063. package/test/testsuite/testframe.html +4 -4
  1064. package/src/ui5-boot.js +0 -50
  1065. package/test/sap/ui/core/qunit/CoreLock.qunit.js +0 -61
  1066. package/test/sap/ui/core/qunit/internal/ODataV4.qunit.js +0 -30
  1067. package/test/sap/ui/core/qunit/messages/MessageManager.qunit.js +0 -135
  1068. package/test/sap/ui/core/samples/databinding/DataBinding.html +0 -133
  1069. package/test/sap/ui/core/samples/databinding/DataBindingCalculatedFields.html +0 -227
  1070. package/test/sap/ui/core/samples/databinding/DataBindingCompositeTypes.html +0 -273
  1071. package/test/sap/ui/core/samples/databinding/DataBindingFormat.html +0 -294
  1072. package/test/sap/ui/core/samples/databinding/DataBindingList.html +0 -288
  1073. package/test/sap/ui/core/samples/databinding/DataBindingListNamedModel.html +0 -288
  1074. package/test/sap/ui/core/samples/databinding/DataBindingListXML.html +0 -278
  1075. package/test/sap/ui/core/samples/databinding/DataBindingMasterDetail.html +0 -117
  1076. package/test/sap/ui/core/samples/databinding/DataBindingMultiModel.html +0 -152
  1077. package/test/sap/ui/core/samples/databinding/DataBindingResourceModel.html +0 -119
  1078. package/test/sap/ui/core/samples/databinding/DataBindingSortingFiltering.html +0 -101
  1079. package/test/sap/ui/core/samples/databinding/DataBindingTree.html +0 -166
  1080. package/test/sap/ui/core/samples/databinding/DataBindingTreeFilter.html +0 -117
  1081. package/test/sap/ui/core/samples/databinding/DataBindingTreeFilterXML.html +0 -103
  1082. package/test/sap/ui/core/samples/databinding/DataBindingTreeLarge.html +0 -139
  1083. package/test/sap/ui/core/samples/databinding/DataBindingTreeWithArrays.html +0 -132
  1084. package/test/sap/ui/core/samples/databinding/DataBindingTwoWay.html +0 -156
  1085. package/test/sap/ui/core/samples/databinding/DataBindingTwoWayTable.html +0 -140
  1086. package/test/sap/ui/core/samples/databinding/DataBindingTypes.html +0 -265
  1087. package/test/sap/ui/core/samples/databinding/DataBindingValidation.html +0 -194
  1088. package/test/sap/ui/core/samples/databinding/DataBindingXML.html +0 -147
  1089. package/test/sap/ui/core/samples/databinding/DataBindingXMLView.html +0 -53
  1090. package/test/sap/ui/core/samples/databinding/testdata/ListBinding.view.xml +0 -9
  1091. package/test/sap/ui/core/samples/databinding/testdata/test.view.json +0 -15
  1092. package/test/sap/ui/core/samples/databinding/testdata/test.view.xml +0 -8
  1093. /package/test/sap/ui/core/qunit/{MasterDetail.qunit.js → MasterDetail_legacyAPIs.qunit.js} +0 -0
  1094. /package/test/sap/ui/core/qunit/odata/{ODataModel.qunit.js → ODataModel_legacyAPIs.qunit.js} +0 -0
  1095. /package/test/sap/ui/core/qunit/odata/{ODataSharedMetadata.qunit.js → ODataSharedMetadata_legacyAPIs.qunit.js} +0 -0
  1096. /package/test/sap/ui/core/qunit/odata/{ODataTreeBinding.qunit.js → ODataTreeBinding_legacyAPIs.qunit.js} +0 -0
@@ -12,6 +12,7 @@ sap.ui.define([
12
12
  "sap/ui/core/Configuration",
13
13
  "sap/ui/core/Core",
14
14
  "sap/ui/core/library",
15
+ "sap/ui/core/Messaging",
15
16
  "sap/ui/core/date/UI5Date",
16
17
  "sap/ui/core/message/Message",
17
18
  "sap/ui/core/mvc/Controller",
@@ -36,8 +37,8 @@ sap.ui.define([
36
37
  // load Table resources upfront to avoid loading times > 1 second for the first test using Table
37
38
  // "sap/ui/table/Table"
38
39
  ], function (Log, merge, uid, Input, Device, ManagedObjectObserver, SyncPromise, Configuration,
39
- Core, coreLibrary, UI5Date, Message, Controller, View, Rendering, BindingMode, Filter, FilterOperator,
40
- FilterType, Model, Sorter, JSONModel, MessageModel, CountMode, MessageScope, Context,
40
+ Core, coreLibrary, Messaging, UI5Date, Message, Controller, View, Rendering, BindingMode, Filter,
41
+ FilterOperator, FilterType, Model, Sorter, JSONModel, MessageModel, CountMode, MessageScope, Context,
41
42
  ODataModel, XMLModel, TestUtils, datajs, XMLHelper) {
42
43
  /*global QUnit, sinon*/
43
44
  /*eslint max-nested-callbacks: 0, no-warning-comments: 0, quote-props: 0*/
@@ -346,7 +347,7 @@ sap.ui.define([
346
347
 
347
348
  oDocument = XMLHelper.parse(
348
349
  '<mvc:View xmlns="sap.m" xmlns:f="sap.f" xmlns:mvc="sap.ui.core.mvc" \
349
- xmlns:t="sap.ui.table">'
350
+ xmlns:t="sap.ui.table" xmlns:trm="sap.ui.table.rowmodes">'
350
351
  + sViewXML
351
352
  + '</mvc:View>',
352
353
  "application/xml"
@@ -366,16 +367,27 @@ sap.ui.define([
366
367
  */
367
368
  function xmlConvertGridTables(oDocument) {
368
369
  function convertElements(aElements) {
369
- var oChildNode, aChildNodes, oColumn, oElement, i, j, oTemplate;
370
+ var oChildNode, aChildNodes, oColumn, oElement, i, j, oTemplate,
371
+ oRowMode, oFixedRowMode;
370
372
 
371
373
  for (i = aElements.length - 1; i >= 0; i -= 1) {
372
374
  oElement = aElements[i];
373
375
 
376
+ if (oElement.hasAttribute("visibleRowCount")) {
377
+ oRowMode = document.createElementNS("sap.ui.table", "rowMode");
378
+ oElement.appendChild(oRowMode);
379
+ oFixedRowMode = document.createElementNS("sap.ui.table.rowmodes", "Fixed");
380
+ oFixedRowMode.setAttribute("rowCount", oElement.getAttribute("visibleRowCount"));
381
+ oRowMode.appendChild(oFixedRowMode);
382
+ oElement.removeAttribute("visibleRowCount");
383
+ }
384
+
374
385
  aChildNodes = oElement.childNodes;
375
386
  for (j = aChildNodes.length - 1; j >= 0; j -= 1) {
376
387
  oChildNode = aChildNodes[j];
377
388
  if (oChildNode.nodeType === Node.ELEMENT_NODE
378
- && oChildNode.localName !== "Column") {
389
+ && oChildNode.localName !== "Column"
390
+ && oChildNode.localName !== "rowMode") {
379
391
  oColumn = document.createElementNS("sap.ui.table", "Column");
380
392
  oElement.insertBefore(oColumn, oChildNode);
381
393
  oElement.removeChild(oChildNode);
@@ -526,7 +538,7 @@ sap.ui.define([
526
538
  // {string} sText with the expected text
527
539
  this.aValueStates = [];
528
540
 
529
- // If the "VisibleRowCountMode" of the sap.ui.table.* is "Auto", the table uses the
541
+ // If the "rowMode" of the sap.ui.table.* is "Auto", the table uses the
530
542
  // screen height (Device.resize.height) to compute the amount of contexts it requests
531
543
  // initially. Make sure that this is stable across devices.
532
544
  this._oSandbox.stub(Device.resize, "height").value(1000);
@@ -576,8 +588,9 @@ sap.ui.define([
576
588
  }
577
589
  delete this.mListChanges[sControlId];
578
590
  }
579
- if (Core.getUIDirty()
580
- || Core.getMessageManager().getMessageModel().getObject("/").length < this.aMessages.length) {
591
+
592
+ if (Rendering.isPending()
593
+ || Messaging.getMessageModel().getObject("/").length < this.aMessages.length) {
581
594
  setTimeout(this.checkFinish.bind(this, assert), 10);
582
595
 
583
596
  return;
@@ -595,7 +608,7 @@ sap.ui.define([
595
608
  * @param {object} assert The QUnit assert object
596
609
  */
597
610
  checkMessages : function (assert) {
598
- var aCurrentMessages = Core.getMessageManager().getMessageModel()
611
+ var aCurrentMessages = Messaging.getMessageModel()
599
612
  .getObject("/").sort(compareMessages),
600
613
  aExpectedMessages = this.aMessages.slice().sort(compareMessages);
601
614
 
@@ -1049,7 +1062,14 @@ sap.ui.define([
1049
1062
  ? vModel
1050
1063
  : {undefined : vModel || createSalesOrdersModel()};
1051
1064
  this.oModel = mNamedModels.undefined;
1052
- this.mock(datajs).expects("request").atLeast(0).callsFake(checkRequest);
1065
+ const oDatajsMock = this.mock(datajs);
1066
+ oDatajsMock.expects("request")
1067
+ .withArgs(/*request*/sinon.match.any, /*success*/sinon.match.any, /*error*/sinon.match.any,
1068
+ sinon.match((handler) => handler !== datajs.metadataHandler),
1069
+ /*httpClient*/sinon.match.any, /*metadata*/sinon.match.any)
1070
+ .atLeast(0).callsFake(checkRequest);
1071
+ // always load $metadata resources via TestUtils fake server, they are not mocked
1072
+ oDatajsMock.expects("request").atLeast(0).callThrough();
1053
1073
  //assert.ok(true, sViewXML); // uncomment to see XML in output, in case of parse issues
1054
1074
  this.assert = assert;
1055
1075
 
@@ -1088,7 +1108,7 @@ sap.ui.define([
1088
1108
  that.oView.setModel(mNamedModels[sModelName], sModelName);
1089
1109
  }
1090
1110
  // enable parse error messages in the message manager
1091
- Core.getMessageManager().registerObject(that.oView, true);
1111
+ Messaging.registerObject(that.oView, true);
1092
1112
  // Place the view in the page so that it is actually rendered. In some situations,
1093
1113
  // esp. for the table.Table this is essential.
1094
1114
  that.oView.placeAt("qunit-fixture");
@@ -1665,12 +1685,11 @@ sap.ui.define([
1665
1685
  * Removes all persistent and technical message from the message model.
1666
1686
  */
1667
1687
  removePersistentAndTechnicalMessages : function () {
1668
- var oMessageManager = Core.getMessageManager(),
1669
- aMessages = oMessageManager.getMessageModel().getObject("/").filter(function (oMessage) {
1688
+ var aMessages = Messaging.getMessageModel().getObject("/").filter(function (oMessage) {
1670
1689
  return oMessage.getPersistent() || oMessage.getTechnical();
1671
1690
  });
1672
1691
 
1673
- oMessageManager.removeMessages(aMessages);
1692
+ Messaging.removeMessages(aMessages);
1674
1693
  },
1675
1694
 
1676
1695
  /**
@@ -4714,7 +4733,7 @@ usePreliminaryContext : false}}">\
4714
4733
  oModel.setMessageScope(MessageScope.BusinessObject);
4715
4734
 
4716
4735
  return this.createView(assert, sView, oModel).then(function () {
4717
- oMessage = Core.getMessageManager().getMessageModel().getObject("/")[0];
4736
+ oMessage = Messaging.getMessageModel().getObject("/")[0];
4718
4737
  oObjectPage = that.oView.byId("objectPage");
4719
4738
 
4720
4739
  assert.deepEqual(oMessage.getControlIds(), []);
@@ -7968,6 +7987,133 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
7968
7987
  return this.createView(assert, sView);
7969
7988
  });
7970
7989
 
7990
+ //*********************************************************************************************
7991
+ // Scenario: With the binding parameter <code>ignoreMessages</code> the application developer
7992
+ // can control whether messages are displayed at the control. It works for
7993
+ // <code>sap.ui.model.json.JSONPropertyBinding</code>s and composite bindings containing such
7994
+ // bindings.
7995
+ // JIRA: CPOUI5MODELS-1397
7996
+ QUnit.test("JSONPropertyBinding and CompositeBindings: ignoreMessages", function (assert) {
7997
+ var oJSONModel = new JSONModel({
7998
+ data: {SalesOrderID: "1", Note: "Note"}
7999
+ }),
8000
+ oMessage = {
8001
+ processor: oJSONModel,
8002
+ target: ["/data/Note"],
8003
+ message: "Foo",
8004
+ type: MessageType.Warning
8005
+ },
8006
+ sView = '\
8007
+ <FlexBox id="objectPage" binding="{/data}">\
8008
+ <Input id="Note0" value="{Note}" />\
8009
+ <Input id="Note1" value="{path: \'Note\', parameters: {ignoreMessages: false}}" />\
8010
+ <Input id="Note2" value="{path: \'Note\', parameters: {ignoreMessages: true}}" />\
8011
+ <Input id="Composite0" value="{= ${SalesOrderID} + ${value: \' - \'} + ${Note}}" />\
8012
+ <Input id="Composite1" value="{= ${SalesOrderID} + ${value: \' - \'} + ${\
8013
+ path: \'Note\',\
8014
+ parameters: {ignoreMessages: false}\
8015
+ }}" />\
8016
+ <Input id="Composite2" value="{= ${SalesOrderID} + ${value: \' - \'} + ${\
8017
+ path: \'Note\',\
8018
+ parameters: {ignoreMessages: true}\
8019
+ }}" />\
8020
+ <Input id="Composite3" value="{parts: [\'SalesOrderID\', {value: \'-\'}, {\
8021
+ path: \'Note\',\
8022
+ parameters: {ignoreMessages: false}\
8023
+ }]}" />\
8024
+ <Input id="Composite4" value="{parts: [\'SalesOrderID\', {value: \'-\'}, {\
8025
+ path: \'Note\',\
8026
+ parameters: {ignoreMessages: true}\
8027
+ }]}" />\
8028
+ </FlexBox>';
8029
+
8030
+ this.expectValue("Note0", "Note")
8031
+ .expectValue("Note1", "Note")
8032
+ .expectValue("Note2", "Note")
8033
+ .expectValue("Composite0", "1 - Note")
8034
+ .expectValue("Composite1", "1 - Note")
8035
+ .expectValue("Composite2", "1 - Note")
8036
+ .expectValue("Composite3", "1 - Note")
8037
+ .expectValue("Composite4", "1 - Note")
8038
+ .expectValueState("Note0", "Warning", "Foo")
8039
+ .expectValueState("Note1", "Warning", "Foo")
8040
+ .expectValueState("Note2", "None", "")
8041
+ .expectValueState("Composite0", "Warning", "Foo")
8042
+ .expectValueState("Composite1", "Warning", "Foo")
8043
+ .expectValueState("Composite2", "None", "")
8044
+ .expectValueState("Composite3", "Warning", "Foo")
8045
+ .expectValueState("Composite4", "None", "")
8046
+ .expectMessages([oMessage]);
8047
+
8048
+ Messaging.addMessages([new Message(oMessage)]);
8049
+
8050
+ // code under test
8051
+ return this.createView(assert, sView, oJSONModel);
8052
+ });
8053
+
8054
+ //*********************************************************************************************
8055
+ // Scenario: With the binding parameter <code>ignoreMessages</code> the application developer
8056
+ // can control whether messages are displayed at the control. It works for
8057
+ // <code>sap.ui.model.xml.XMLPropertyBinding</code>s and composite bindings containing such
8058
+ // bindings.
8059
+ // JIRA: CPOUI5MODELS-1397
8060
+ QUnit.test("XMLPropertyBinding and CompositeBindings: ignoreMessages", function (assert) {
8061
+ var oXMLModel = new XMLModel(),
8062
+ oMessage = {
8063
+ processor: oXMLModel,
8064
+ target: ["/data/0/@Note"],
8065
+ message: "Foo",
8066
+ type: MessageType.Warning
8067
+ },
8068
+ sView = '\
8069
+ <FlexBox id="objectPage" binding="{/data/0}">\
8070
+ <Input id="Note0" value="{@Note}" />\
8071
+ <Input id="Note1" value="{path: \'@Note\', parameters: {ignoreMessages: false}}" />\
8072
+ <Input id="Note2" value="{path: \'@Note\', parameters: {ignoreMessages: true}}" />\
8073
+ <Input id="Composite0" value="{= ${@SalesOrderID} + ${value: \' - \'} + ${@Note}}" />\
8074
+ <Input id="Composite1" value="{= ${@SalesOrderID} + ${value: \' - \'} + ${\
8075
+ path: \'@Note\',\
8076
+ parameters: {ignoreMessages: false}\
8077
+ }}" />\
8078
+ <Input id="Composite2" value="{= ${@SalesOrderID} + ${value: \' - \'} + ${\
8079
+ path: \'@Note\',\
8080
+ parameters: {ignoreMessages: true}\
8081
+ }}" />\
8082
+ <Input id="Composite3" value="{parts: [\'@SalesOrderID\', {value: \'-\'}, {\
8083
+ path: \'@Note\',\
8084
+ parameters: {ignoreMessages: false}\
8085
+ }]}" />\
8086
+ <Input id="Composite4" value="{parts: [\'@SalesOrderID\', {value: \'-\'}, {\
8087
+ path: \'@Note\',\
8088
+ parameters: {ignoreMessages: true}\
8089
+ }]}" />\
8090
+ </FlexBox>';
8091
+
8092
+ this.expectValue("Note0", "Note")
8093
+ .expectValue("Note1", "Note")
8094
+ .expectValue("Note2", "Note")
8095
+ .expectValue("Composite0", "1 - Note")
8096
+ .expectValue("Composite1", "1 - Note")
8097
+ .expectValue("Composite2", "1 - Note")
8098
+ .expectValue("Composite3", "1 - Note")
8099
+ .expectValue("Composite4", "1 - Note")
8100
+ .expectValueState("Note0", "Warning", "Foo")
8101
+ .expectValueState("Note1", "Warning", "Foo")
8102
+ .expectValueState("Note2", "None", "")
8103
+ .expectValueState("Composite0", "Warning", "Foo")
8104
+ .expectValueState("Composite1", "Warning", "Foo")
8105
+ .expectValueState("Composite2", "None", "")
8106
+ .expectValueState("Composite3", "Warning", "Foo")
8107
+ .expectValueState("Composite4", "None", "")
8108
+ .expectMessages([oMessage]);
8109
+
8110
+ oXMLModel.setXML('<?xml version="1.0"?><root><data SalesOrderID="1" Note="Note"/></root>');
8111
+ Messaging.addMessages([new Message(oMessage)]);
8112
+
8113
+ // code under test
8114
+ return this.createView(assert, sView, oXMLModel);
8115
+ });
8116
+
7971
8117
  //*********************************************************************************************
7972
8118
  // Scenario: With the binding parameter <code>ignoreMessages</code> the application developer
7973
8119
  // can control whether messages are displayed at the control. For
@@ -9278,10 +9424,18 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
9278
9424
  const oModel = createModel("/sap/opu/odata/sap/FAR_CUSTOMER_LINE_ITEMS");
9279
9425
  const sView = '\
9280
9426
  <t:AnalyticalTable id="table" threshold="10" visibleRowCount="4">\
9281
- <t:AnalyticalColumn grouped="true" leadingProperty="CompanyCode" template="CompanyCode"/>\
9282
- <t:AnalyticalColumn grouped="false" leadingProperty="Customer" template="Customer"/>\
9283
- <t:AnalyticalColumn leadingProperty="AmountInCompanyCodeCurrency" summed="true"\
9284
- template="AmountInCompanyCodeCurrency"/>\
9427
+ <t:AnalyticalColumn grouped="true" leadingProperty="CompanyCode">\
9428
+ <Label text="CompanyCode"/>\
9429
+ <t:template><Text wrapping="false" text="{CompanyCode}"/></t:template>\
9430
+ </t:AnalyticalColumn>\
9431
+ <t:AnalyticalColumn grouped="false" leadingProperty="Customer">\
9432
+ <Label text="Customer"/>\
9433
+ <t:template><Text wrapping="false" text="{Customer}"/></t:template>\
9434
+ </t:AnalyticalColumn>\
9435
+ <t:AnalyticalColumn summed="true" leadingProperty="AmountInCompanyCodeCurrency">\
9436
+ <Label text="AmountInCompanyCodeCurrency"/>\
9437
+ <t:template><Text wrapping="false" text="{AmountInCompanyCodeCurrency}"/></t:template>\
9438
+ </t:AnalyticalColumn>\
9285
9439
  </t:AnalyticalTable>';
9286
9440
 
9287
9441
  return this.createView(assert, sView, oModel).then(() => {
@@ -9340,10 +9494,18 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
9340
9494
  const oModel = createModel("/sap/opu/odata/sap/FAR_CUSTOMER_LINE_ITEMS");
9341
9495
  const sView = '\
9342
9496
  <t:AnalyticalTable id="table" threshold="10" visibleRowCount="4">\
9343
- <t:AnalyticalColumn grouped="true" leadingProperty="CompanyCode" template="CompanyCode"/>\
9344
- <t:AnalyticalColumn grouped="false" leadingProperty="Customer" template="Customer"/>\
9345
- <t:AnalyticalColumn leadingProperty="AmountInCompanyCodeCurrency" summed="true"\
9346
- template="AmountInCompanyCodeCurrency"/>\
9497
+ <t:AnalyticalColumn grouped="true" leadingProperty="CompanyCode">\
9498
+ <Label text="CompanyCode"/>\
9499
+ <t:template><Text wrapping="false" text="{CompanyCode}"/></t:template>\
9500
+ </t:AnalyticalColumn>\
9501
+ <t:AnalyticalColumn grouped="false" leadingProperty="Customer">\
9502
+ <Label text="Customer"/>\
9503
+ <t:template><Text wrapping="false" text="{Customer}"/></t:template>\
9504
+ </t:AnalyticalColumn>\
9505
+ <t:AnalyticalColumn summed="true" leadingProperty="AmountInCompanyCodeCurrency">\
9506
+ <Label text="AmountInCompanyCodeCurrency"/>\
9507
+ <t:template><Text wrapping="false" text="{AmountInCompanyCodeCurrency}"/></t:template>\
9508
+ </t:AnalyticalColumn>\
9347
9509
  </t:AnalyticalTable>';
9348
9510
 
9349
9511
  return this.createView(assert, sView, oModel).then(() => {
@@ -10099,8 +10261,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10099
10261
  <t:TreeTable id="table"\
10100
10262
  rows="{path : \'to_AllwncReqToFe\', parameters : \
10101
10263
  {countMode : \'Inline\', groupId : \'myGroup\', usePreliminaryContext : true}}"\
10102
- visibleRowCount="1"\
10103
- visibleRowCountMode="Fixed">\
10264
+ visibleRowCount="1">\
10104
10265
  <Text id="orgID" text="{ForceElementOrgID}" />\
10105
10266
  </t:TreeTable>\
10106
10267
  </FlexBox>';
@@ -10169,8 +10330,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10169
10330
  path : \'/C_RSHMaintSchedSmltdOrdAndOp\'\
10170
10331
  }"\
10171
10332
  threshold="0"\
10172
- visibleRowCount="1"\
10173
- visibleRowCountMode="Fixed">\
10333
+ visibleRowCount="1">\
10174
10334
  <Text id="maintenanceOrder" text="{MaintenanceOrder}" />\
10175
10335
  </t:TreeTable>',
10176
10336
  that = this;
@@ -10273,8 +10433,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10273
10433
  },\
10274
10434
  path : \'to_C_RSHMaintSchedSmltdOrdAndOp\'\
10275
10435
  }"\
10276
- visibleRowCount="1"\
10277
- visibleRowCountMode="Fixed">\
10436
+ visibleRowCount="1">\
10278
10437
  <Text id="maintenanceOrder" text="{MaintenanceOrder}" />\
10279
10438
  </t:TreeTable>\
10280
10439
  </FlexBox>',
@@ -10480,7 +10639,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10480
10639
  }])
10481
10640
  .expectValueState("note", "Error", "Some message");
10482
10641
 
10483
- Core.getMessageManager().addMessages(new Message({
10642
+ Messaging.addMessages(new Message({
10484
10643
  message : "Some message",
10485
10644
  processor : oModel,
10486
10645
  target : "/Note",
@@ -10518,7 +10677,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10518
10677
  }])
10519
10678
  .expectValueState("note", "Error", "Some message");
10520
10679
 
10521
- Core.getMessageManager().addMessages(new Message({
10680
+ Messaging.addMessages(new Message({
10522
10681
  message : "Some message",
10523
10682
  processor : oModel,
10524
10683
  target : "/Note",
@@ -10666,8 +10825,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10666
10825
  path : \'/C_RSHMaintSchedSmltdOrdAndOp\'\
10667
10826
  }"\
10668
10827
  threshold="0"\
10669
- visibleRowCount="2"\
10670
- visibleRowCountMode="Fixed">\
10828
+ visibleRowCount="2">\
10671
10829
  <Text id="maintenanceOrder" text="{MaintenanceOrder}" />\
10672
10830
  </t:TreeTable>',
10673
10831
  that = this;
@@ -10756,6 +10914,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10756
10914
  });
10757
10915
  });
10758
10916
 
10917
+ /** @deprecated As of version 1.102.0, reason OperationMode.Auto */
10759
10918
  //*********************************************************************************************
10760
10919
  // Scenario: If operation mode auto and a threshold is set as binding parameter and a count
10761
10920
  // request returns a count smaller than the threshold then this count is used as the $top
@@ -10781,8 +10940,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10781
10940
  },\
10782
10941
  path : \'/C_RSHMaintSchedSmltdOrdAndOp\'\
10783
10942
  }"\
10784
- visibleRowCount="2"\
10785
- visibleRowCountMode="Fixed">\
10943
+ visibleRowCount="2">\
10786
10944
  <Text text="{MaintenanceOrder}" />\
10787
10945
  </t:TreeTable>';
10788
10946
 
@@ -11566,7 +11724,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
11566
11724
  }])
11567
11725
  .expectValueState("quantity", "Error", "Some message");
11568
11726
 
11569
- Core.getMessageManager().addMessages(new Message({
11727
+ Messaging.addMessages(new Message({
11570
11728
  message : "Some message",
11571
11729
  processor : oModel,
11572
11730
  target : "/RequestedQuantity",
@@ -14254,6 +14412,57 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
14254
14412
  });
14255
14413
  });
14256
14414
 
14415
+ //*********************************************************************************************
14416
+ // Scenario: If a list binding contains created entries at the start of the list and the
14417
+ // binding's length is final, ensure that all data is requested if the user scrolls to the end
14418
+ // of the list.
14419
+ // BCP: 002075129400006921272023
14420
+ QUnit.test("Created entries at start: scrolling to the end reads all data", function (assert) {
14421
+ var oTable,
14422
+ oModel = createSalesOrdersModel({defaultCountMode : CountMode.Inline}),
14423
+ sView = '\
14424
+ <Table growing="true" growingThreshold="3" id="table" items="{/SalesOrderSet}">\
14425
+ <Input id="note" value="{Note}"/>\
14426
+ </Table>',
14427
+ that = this;
14428
+
14429
+ this.expectHeadRequest()
14430
+ .expectRequest("SalesOrderSet?$skip=0&$top=3&$inlinecount=allpages", {
14431
+ __count : "5",
14432
+ results : [
14433
+ {__metadata : {uri : "SalesOrderSet('1')"}, Note : "SO1", SalesOrderID : "1"},
14434
+ {__metadata : {uri : "SalesOrderSet('2')"}, Note : "SO2", SalesOrderID : "2"},
14435
+ {__metadata : {uri : "SalesOrderSet('3')"}, Note : "SO3", SalesOrderID : "3"}
14436
+ ]
14437
+ })
14438
+ .expectValue("note", ["SO1", "SO2", "SO3"]);
14439
+
14440
+ return this.createView(assert, sView, oModel).then(function () {
14441
+ oTable = that.oView.byId("table");
14442
+
14443
+ that.expectValue("note", ["SONew", "SO1", "SO2", "SO3"]);
14444
+
14445
+ // code under test - create an item at the start of the list
14446
+ oTable.getBinding("items").create({Note : "SONew"});
14447
+
14448
+ return that.waitForChanges(assert);
14449
+ }).then(function () {
14450
+ that.expectRequest("SalesOrderSet?$skip=3&$top=2", {
14451
+ results : [
14452
+ {__metadata : {uri : "SalesOrderSet('4')"}, Note : "SO4", SalesOrderID : "4"},
14453
+ {__metadata : {uri : "SalesOrderSet('5')"}, Note : "SO5", SalesOrderID : "5"}
14454
+ ]
14455
+ });
14456
+
14457
+ that.expectValue("note", ["SO3", "SO4", "SO5"], 3);
14458
+
14459
+ // code under test - scroll down to get all data from server
14460
+ oTable.requestItems();
14461
+
14462
+ return that.waitForChanges(assert);
14463
+ });
14464
+ });
14465
+
14257
14466
  //*********************************************************************************************
14258
14467
  // Scenario: If the table displays only transient entities (no threshold is set) and a new
14259
14468
  // control filter is set on the table the number of available entities is properly displayed.
@@ -14329,8 +14538,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
14329
14538
  // Scenario: Simple test for creation at the end of the list; more complex cases are tested in
14330
14539
  // all pairs tests for multi create.
14331
14540
  // JIRA: CPOUI5MODELS-617
14541
+ // Scenario 2: Contexts can be retrieved using getContextByIndex
14542
+ // BCP: 002075129400004574672023
14332
14543
  QUnit.test("Creation at the end of a list", function (assert) {
14333
- var oModel = createSalesOrdersModel(),
14544
+ var oRowsBinding,
14545
+ oModel = createSalesOrdersModel(),
14334
14546
  sView = '\
14335
14547
  <t:Table id="table" rows="{/SalesOrderSet}" visibleRowCount="2">\
14336
14548
  <Text id="id" text="{SalesOrderID}"/>\
@@ -14338,6 +14550,17 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
14338
14550
  </t:Table>',
14339
14551
  that = this;
14340
14552
 
14553
+ function checkContextByIndex(bCreated) {
14554
+ assert.strictEqual(oRowsBinding.getContextByIndex(-1), undefined);
14555
+ assert.strictEqual(oRowsBinding.getContextByIndex(0).getPath(), "/SalesOrderSet('42')");
14556
+ if (bCreated) {
14557
+ assert.strictEqual(oRowsBinding.getContextByIndex(1).isTransient(), true);
14558
+ } else {
14559
+ assert.strictEqual(oRowsBinding.getContextByIndex(1), undefined);
14560
+ }
14561
+ assert.strictEqual(oRowsBinding.getContextByIndex(2), undefined);
14562
+ }
14563
+
14341
14564
  this.expectHeadRequest()
14342
14565
  .expectRequest("SalesOrderSet?$skip=0&$top=102", {
14343
14566
  results : [{
@@ -14350,11 +14573,15 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
14350
14573
  .expectValue("note", ["First SalesOrder", ""]);
14351
14574
 
14352
14575
  return this.createView(assert, sView, oModel).then(function () {
14576
+ oRowsBinding = that.oView.byId("table").getBinding("rows");
14577
+
14353
14578
  that.expectValue("note", "New 1", 1);
14579
+ checkContextByIndex(false);
14354
14580
 
14355
14581
  // code under test
14356
- that.oView.byId("table").getBinding("rows").create({Note : "New 1"}, /*bAtEnd*/true);
14582
+ oRowsBinding.create({Note : "New 1"}, /*bAtEnd*/true);
14357
14583
 
14584
+ checkContextByIndex(true);
14358
14585
  return that.waitForChanges(assert);
14359
14586
  });
14360
14587
  });
@@ -17698,9 +17925,8 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
17698
17925
  // restores the tree state for property and hierarchy changes, regardless of whether
17699
17926
  // refreshAfterChange is true or false.
17700
17927
  // JIRA: CPOUI5MODELS-958
17701
- // Scenario: To perform hierarchy changes both ODataModel#submitChanges and
17702
- // ODataTreeBinding#submitChanges can be used and both behave the same. For simple property
17703
- // changes via ODataModel#submitChanges a refresh/restoreTreeState is not needed.
17928
+ // Scenario: To perform hierarchy changes ODataModel#submitChanges can be used. For simple property
17929
+ // changes a refresh/restoreTreeState is not needed.
17704
17930
  // JIRA: CPOUI5MODELS-745
17705
17931
  [false, true].forEach(function (bRefreshAfterChange) {
17706
17932
  var sTitle = "ODataTreeBindingFlat: ODataModel#submitChanges for refreshAfterChange="
@@ -17758,8 +17984,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
17758
17984
  },\
17759
17985
  path : \'/ErhaOrder(\\\'1\\\')/to_Item\'\
17760
17986
  }"\
17761
- visibleRowCount="3"\
17762
- visibleRowCountMode="Fixed">\
17987
+ visibleRowCount="3">\
17763
17988
  <Text id="itemName" text="{ErhaOrderItemName}" />\
17764
17989
  </t:TreeTable>',
17765
17990
  that = this;
@@ -17843,15 +18068,15 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
17843
18068
  });
17844
18069
  });
17845
18070
  });
18071
+
17846
18072
  /** @deprecated As of version 1.104.0 */
17847
18073
  //*********************************************************************************************
17848
18074
  // Scenario: A table using ODataTreeBindingFlat with restoreTreeStateAfterChange=true correctly
17849
18075
  // restores the tree state for property and hierarchy changes, regardless of whether
17850
18076
  // refreshAfterChange is true or false.
17851
18077
  // JIRA: CPOUI5MODELS-958
17852
- // Scenario: To perform hierarchy changes both ODataModel#submitChanges and
17853
- // ODataTreeBinding#submitChanges can be used and both behave the same. For simple property
17854
- // changes via ODataModel#submitChanges a refresh/restoreTreeState is not needed.
18078
+ // Scenario: To perform hierarchy changes ODataTreeBinding#submitChanges can be used. For simple property
18079
+ // changes a refresh/restoreTreeState is needed.
17855
18080
  // JIRA: CPOUI5MODELS-745
17856
18081
  [false, true].forEach(function (bRefreshAfterChange) {
17857
18082
  var sTitle = "ODataTreeBindingFlat: ODataTreeBindingFlat#submitChanges for refreshAfterChange="
@@ -17909,8 +18134,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
17909
18134
  },\
17910
18135
  path : \'/ErhaOrder(\\\'1\\\')/to_Item\'\
17911
18136
  }"\
17912
- visibleRowCount="3"\
17913
- visibleRowCountMode="Fixed">\
18137
+ visibleRowCount="3">\
17914
18138
  <Text id="itemName" text="{ErhaOrderItemName}" />\
17915
18139
  </t:TreeTable>',
17916
18140
  that = this;
@@ -18017,15 +18241,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18017
18241
  // restoreTreeStateAfterChange=false. After property / hierarchy changes have been submitted the
18018
18242
  // binding gets refreshed.
18019
18243
  // JIRA: CPOUI5MODELS-959
18020
- // Scenario: To perform hierarchy changes both ODataModel#submitChanges and
18021
- // ODataTreeBinding#submitChanges can be used and both behave the same. For simple property
18022
- // changes via ODataModel#submitChanges a refresh/restoreTreeState is not needed.
18244
+ // Scenario: To perform hierarchy changes ODataModel#submitChanges can be used. For simple property
18245
+ // changes a refresh/restoreTreeState is not needed.
18023
18246
  // JIRA: CPOUI5MODELS-745
18024
- [false, true].forEach(function (bSubmitOnModel) {
18025
- var sTitle = "ODataTreeBindingFlat: " + (bSubmitOnModel ? "ODataModel" : "ODataTreeBindingFlat")
18026
- + "#submitChanges for refreshAfterChange=false and restoreTreeStateAfterChange=false";
18027
-
18028
- QUnit.test(sTitle, function (assert) {
18247
+ QUnit.test("ODataTreeBindingFlat: ODataModel#submitChanges for refreshAfterChange=false and "
18248
+ + "restoreTreeStateAfterChange=false", function (assert) {
18029
18249
  var oBinding, oTable,
18030
18250
  oModel = createHierarchyMaintenanceModel({refreshAfterChange : false}),
18031
18251
  oNode100 = {
@@ -18076,15 +18296,165 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18076
18296
  },\
18077
18297
  path : \'/ErhaOrder(\\\'1\\\')/to_Item\'\
18078
18298
  }"\
18079
- visibleRowCount="3"\
18080
- visibleRowCountMode="Fixed">\
18299
+ visibleRowCount="3">\
18081
18300
  <Text id="itemName" text="{ErhaOrderItemName}" />\
18082
18301
  </t:TreeTable>',
18083
18302
  that = this;
18084
18303
 
18085
- function fnSubmitChanges() {
18086
- (bSubmitOnModel ? oModel : oBinding).submitChanges();
18087
- }
18304
+ this.expectHeadRequest()
18305
+ .expectRequest({
18306
+ batchNo : 1,
18307
+ requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18308
+ + "&$filter=HierarchyDistanceFromRoot le 0"
18309
+ }, {
18310
+ __count : "1",
18311
+ results : [oNode100]
18312
+ })
18313
+ .expectValue("itemName", ["foo", "", ""]);
18314
+
18315
+ return this.createView(assert, sView, oModel).then(function () {
18316
+ oTable = that.oView.byId("table");
18317
+
18318
+ that.expectRequest({
18319
+ batchNo : 2,
18320
+ requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18321
+ + "&$filter=HierarchyParentNode eq '100'"
18322
+ }, {
18323
+ __count : "2",
18324
+ results : [oNode200, oNode300]
18325
+ })
18326
+ .expectValue("itemName", ["bar", "baz"], 1);
18327
+
18328
+ oTable.expand(0);
18329
+
18330
+ return that.waitForChanges(assert);
18331
+ }).then(function () {
18332
+ oBinding = oTable.getBinding("rows");
18333
+
18334
+ that.expectRequest({
18335
+ batchNo : 3,
18336
+ method : "DELETE",
18337
+ requestUri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='300')"
18338
+ }, NO_CONTENT)
18339
+ .expectValue("itemName", "", 2)
18340
+ .expectRequest({
18341
+ batchNo : 4,
18342
+ requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18343
+ + "&$filter=HierarchyDistanceFromRoot le 0"
18344
+ }, {
18345
+ __count : "1",
18346
+ results : [oNode100]
18347
+ })
18348
+ .expectValue("itemName", "", 1); // binding gets refreshed, no restore tree state
18349
+
18350
+ // code under test: hierarchy change
18351
+ oBinding.removeContext(oTable.getContextByIndex(2));
18352
+ oModel.submitChanges();
18353
+
18354
+ return that.waitForChanges(assert);
18355
+ }).then(function () {
18356
+ oTable = that.oView.byId("table");
18357
+
18358
+ that.expectRequest({
18359
+ batchNo : 5,
18360
+ requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18361
+ + "&$filter=HierarchyParentNode eq '100'"
18362
+ }, {
18363
+ __count : "1",
18364
+ results : [oNode200]
18365
+ })
18366
+ .expectValue("itemName", "bar", 1);
18367
+
18368
+ // manually expand the node again
18369
+ oTable.expand(0);
18370
+
18371
+ return that.waitForChanges(assert);
18372
+ }).then(function () {
18373
+ that.expectValue("itemName", "bar: renamed", 1)
18374
+ .expectRequest({
18375
+ batchNo : 6,
18376
+ data : {
18377
+ __metadata : {uri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"},
18378
+ ErhaOrderItemName : "bar: renamed"
18379
+ },
18380
+ key : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')",
18381
+ method : "MERGE",
18382
+ requestUri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"
18383
+ }, NO_CONTENT);
18384
+
18385
+ // code under test: property change
18386
+ oModel.setProperty("ErhaOrderItemName", "bar: renamed", oTable.getContextByIndex(1));
18387
+ oModel.submitChanges();
18388
+
18389
+ return that.waitForChanges(assert);
18390
+ });
18391
+ });
18392
+
18393
+ /** @deprecated As of version 1.104.0 */
18394
+ //*********************************************************************************************
18395
+ // Scenario: A table using ODataTreeBindingFlat with refreshAfterChange=false and
18396
+ // restoreTreeStateAfterChange=false. After property / hierarchy changes have been submitted the
18397
+ // binding gets refreshed.
18398
+ // JIRA: CPOUI5MODELS-959
18399
+ // Scenario: To perform hierarchy changes ODataTreeBinding#submitChanges can be used. For simple property
18400
+ // changes a refresh/restoreTreeState is needed.
18401
+ // JIRA: CPOUI5MODELS-745
18402
+ QUnit.test("ODataTreeBindingFlat: ODataTreeBindingFlat#submitChanges for refreshAfterChange=false and "
18403
+ + "restoreTreeStateAfterChange=false", function (assert) {
18404
+ var oBinding, oTable,
18405
+ oModel = createHierarchyMaintenanceModel({refreshAfterChange : false}),
18406
+ oNode100 = {
18407
+ __metadata : {uri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='100')"},
18408
+ ErhaOrder : "1",
18409
+ ErhaOrderItem : "100",
18410
+ ErhaOrderItemName : "foo",
18411
+ HierarchyNode : "100",
18412
+ HierarchyParentNode : "",
18413
+ HierarchyDescendantCount : 0,
18414
+ HierarchyDistanceFromRoot : 0,
18415
+ HierarchyDrillState : "collapsed",
18416
+ HierarchyPreorderRank : 0,
18417
+ HierarchySiblingRank : 0
18418
+ },
18419
+ oNode200 = {
18420
+ __metadata : {uri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"},
18421
+ ErhaOrder : "1",
18422
+ ErhaOrderItem : "200",
18423
+ ErhaOrderItemName : "bar",
18424
+ HierarchyNode : "200",
18425
+ HierarchyParentNode : "100",
18426
+ HierarchyDescendantCount : 0,
18427
+ HierarchyDistanceFromRoot : 1,
18428
+ HierarchyDrillState : "leaf",
18429
+ HierarchyPreorderRank : 0,
18430
+ HierarchySiblingRank : 0
18431
+ },
18432
+ oNode300 = {
18433
+ __metadata : {uri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='300')"},
18434
+ ErhaOrder : "1",
18435
+ ErhaOrderItem : "300",
18436
+ ErhaOrderItemName : "baz",
18437
+ HierarchyNode : "300",
18438
+ HierarchyParentNode : "100",
18439
+ HierarchyDescendantCount : 0,
18440
+ HierarchyDistanceFromRoot : 1,
18441
+ HierarchyDrillState : "leaf",
18442
+ HierarchyPreorderRank : 1,
18443
+ HierarchySiblingRank : 1
18444
+ },
18445
+ sView = '\
18446
+ <t:TreeTable id="table"\
18447
+ rows="{\
18448
+ parameters : {\
18449
+ countMode : \'Inline\',\
18450
+ numberOfExpandedLevels : 0\
18451
+ },\
18452
+ path : \'/ErhaOrder(\\\'1\\\')/to_Item\'\
18453
+ }"\
18454
+ visibleRowCount="3">\
18455
+ <Text id="itemName" text="{ErhaOrderItemName}" />\
18456
+ </t:TreeTable>',
18457
+ that = this;
18088
18458
 
18089
18459
  this.expectHeadRequest()
18090
18460
  .expectRequest({
@@ -18134,7 +18504,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18134
18504
 
18135
18505
  // code under test: hierarchy change
18136
18506
  oBinding.removeContext(oTable.getContextByIndex(2));
18137
- fnSubmitChanges();
18507
+ oBinding.submitChanges();
18138
18508
 
18139
18509
  return that.waitForChanges(assert);
18140
18510
  }).then(function () {
@@ -18167,7 +18537,6 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18167
18537
  requestUri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"
18168
18538
  }, NO_CONTENT);
18169
18539
 
18170
- if (!bSubmitOnModel) {
18171
18540
  that.expectRequest({
18172
18541
  batchNo : 7,
18173
18542
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
@@ -18178,28 +18547,22 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18178
18547
  })
18179
18548
  // binding gets refreshed, no restore tree state
18180
18549
  .expectValue("itemName", "", 1);
18181
- }
18182
18550
 
18183
18551
  // code under test: property change
18184
18552
  oModel.setProperty("ErhaOrderItemName", "bar: renamed", oTable.getContextByIndex(1));
18185
- fnSubmitChanges();
18553
+ oBinding.submitChanges();
18186
18554
 
18187
18555
  return that.waitForChanges(assert);
18188
18556
  });
18189
18557
  });
18190
- });
18191
18558
 
18192
18559
  //*********************************************************************************************
18193
18560
  // Scenario: A table using ODataTreeBindingFlat with refreshAfterChange=true and
18194
18561
  // restoreTreeStateAfterChange=false. After property / hierarchy changes have been submitted
18195
- // either via ODataModel#submitChanges or via ODataTreeBindingFlat#submitChanges the binding
18196
- // gets refreshed only once via <code>refreshAfterChange</code>.
18562
+ // via ODataModel#submitChanges the binding gets refreshed only once via <code>refreshAfterChange</code>.
18197
18563
  // JIRA: CPOUI5MODELS-970
18198
- [false, true].forEach(function (bSubmitOnModel) {
18199
- var sTitle = "ODataTreeBindingFlat: " + (bSubmitOnModel ? "ODataModel" : "ODataTreeBindingFlat")
18200
- + "#submitChanges for refreshAfterChange=true and restoreTreeStateAfterChange=false";
18201
-
18202
- QUnit.test(sTitle, function (assert) {
18564
+ QUnit.test("ODataTreeBindingFlat: ODataModel#submitChanges for refreshAfterChange=true and "
18565
+ + "restoreTreeStateAfterChange=false", function (assert) {
18203
18566
  var oBinding, oTable,
18204
18567
  oModel = createHierarchyMaintenanceModel({refreshAfterChange : true}),
18205
18568
  oNode100 = {
@@ -18250,16 +18613,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18250
18613
  },\
18251
18614
  path : \'/ErhaOrder(\\\'1\\\')/to_Item\'\
18252
18615
  }"\
18253
- visibleRowCount="3"\
18254
- visibleRowCountMode="Fixed">\
18616
+ visibleRowCount="3">\
18255
18617
  <Text id="itemName" text="{ErhaOrderItemName}" />\
18256
18618
  </t:TreeTable>',
18257
18619
  that = this;
18258
18620
 
18259
- function fnSubmitChanges() {
18260
- (bSubmitOnModel ? oModel : oBinding).submitChanges();
18261
- }
18262
-
18263
18621
  this.expectHeadRequest()
18264
18622
  .expectRequest({
18265
18623
  batchNo : 1,
@@ -18333,7 +18691,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18333
18691
  // code under test: hierarchy change
18334
18692
  oBinding.removeContext(oMoveContext);
18335
18693
  oBinding.addContexts(oParentContext, [oMoveContext]);
18336
- fnSubmitChanges();
18694
+ oModel.submitChanges();
18337
18695
 
18338
18696
  return that.waitForChanges(assert);
18339
18697
  }).then(function () {
@@ -18378,12 +18736,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18378
18736
 
18379
18737
  // code under test: property change
18380
18738
  oModel.setProperty("ErhaOrderItemName", "bar: renamed", oTable.getContextByIndex(1));
18381
- fnSubmitChanges();
18739
+ oModel.submitChanges();
18382
18740
 
18383
18741
  return that.waitForChanges(assert);
18384
18742
  });
18385
18743
  });
18386
- });
18387
18744
 
18388
18745
  //*********************************************************************************************
18389
18746
  // Scenario: It has to be possible to change a property with Edm.Time type to a different value
@@ -18520,8 +18877,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18520
18877
  },\
18521
18878
  path : \'/ErhaOrder(\\\'1\\\')/to_Item\'\
18522
18879
  }"\
18523
- visibleRowCount="4"\
18524
- visibleRowCountMode="Fixed">\
18880
+ visibleRowCount="4">\
18525
18881
  <Text id="itemName" text="{ErhaOrderItemName}" />\
18526
18882
  </t:TreeTable>',
18527
18883
  that = this;
@@ -18685,8 +19041,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18685
19041
  },\
18686
19042
  path : \'/ErhaOrder(\\\'1\\\')/to_Item\'\
18687
19043
  }"\
18688
- visibleRowCount="3"\
18689
- visibleRowCountMode="Fixed">\
19044
+ visibleRowCount="3">\
18690
19045
  <Text id="itemName" text="{ErhaOrderItemName}" />\
18691
19046
  </t:TreeTable>',
18692
19047
  that = this;
@@ -18820,8 +19175,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18820
19175
  },\
18821
19176
  path : \'/ErhaOrder(\\\'1\\\')/to_Item\'\
18822
19177
  }"\
18823
- visibleRowCount="2"\
18824
- visibleRowCountMode="Fixed">\
19178
+ visibleRowCount="2">\
18825
19179
  <Text id="itemName" text="{ErhaOrderItemName}" />\
18826
19180
  </t:TreeTable>',
18827
19181
  that = this;
@@ -19026,6 +19380,97 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
19026
19380
  });
19027
19381
  });
19028
19382
 
19383
+ //*********************************************************************************************
19384
+ // Scenario: A table has an inactive created entity and a 'createActivate' event handler
19385
+ // suppresses the activation until all conditions are fulfilled. After re-binding the table the
19386
+ // activation is still only done if all conditions are fulfilled. Destroyed bindings don't
19387
+ // influence the activation.
19388
+ // BCP: 2380123522
19389
+ QUnit.test("ODataListBinding: createActivate-event works with destroyed bindings", function (assert) {
19390
+ var oBinding, oCreatedContext, oTable,
19391
+ oModel = createSalesOrdersModel({defaultBindingMode: BindingMode.TwoWay, refreshAfterChange: false}),
19392
+ sView = '\
19393
+ <t:Table id="table" rows="{/BusinessPartnerSet}" visibleRowCount="2">\
19394
+ <Input id="company" value="{CompanyName}"/>\
19395
+ </t:Table>',
19396
+ that = this;
19397
+
19398
+ function onCreateActivate(oEvent) {
19399
+ assert.strictEqual(oEvent.getParameter("context"), oCreatedContext);
19400
+ assert.strictEqual(oCreatedContext.isInactive(), true);
19401
+ if (oCreatedContext.getObject("").CompanyName !== "SAP") {
19402
+ oEvent.preventDefault();
19403
+ }
19404
+ }
19405
+
19406
+ this.expectHeadRequest()
19407
+ .expectRequest("BusinessPartnerSet?$skip=0&$top=102", {results: []})
19408
+ .expectValue("company", ["", ""]);
19409
+
19410
+ return this.createView(assert, sView, oModel).then(function () {
19411
+ oTable = that.oView.byId("table");
19412
+ oBinding = oTable.getBinding("rows");
19413
+
19414
+ that.expectValue("company", "Initial", 0);
19415
+
19416
+ // code under test: attach createActivate on initial binding; create inactive entity
19417
+ oBinding.attachCreateActivate(onCreateActivate);
19418
+ oCreatedContext = oBinding.create({CompanyName: "Initial"}, false, {inactive: true});
19419
+
19420
+ return that.waitForChanges(assert);
19421
+ }).then(function () {
19422
+ that.expectValue("company", "Foo", 0);
19423
+
19424
+ // code under test: change the value that prevents activation
19425
+ oTable.getRows()[0].getCells()[0].setValue("Foo");
19426
+ oModel.submitChanges();
19427
+
19428
+ return that.waitForChanges(assert);
19429
+ }).then(function () {
19430
+ that.expectRequest("BusinessPartnerSet?$skip=0&$top=102", {results: []});
19431
+
19432
+ // code under test: rebind table and attach event on new binding
19433
+ oTable.bindRows(oTable.getBindingInfo("rows"));
19434
+ oBinding = oTable.getBinding("rows");
19435
+ oBinding.attachCreateActivate(onCreateActivate);
19436
+ oModel.submitChanges();
19437
+
19438
+ return that.waitForChanges(assert);
19439
+ }).then(function () {
19440
+ that.expectValue("company", "Bar", 0);
19441
+
19442
+ // code under test: on new binding change value that still not activate the entry
19443
+ oTable.getRows()[0].getCells()[0].setValue("Bar");
19444
+ oModel.submitChanges();
19445
+
19446
+ return that.waitForChanges(assert);
19447
+ }).then(function () {
19448
+ that.expectRequest({
19449
+ created: true,
19450
+ data: {
19451
+ __metadata: {type: "GWSAMPLE_BASIC.BusinessPartner"},
19452
+ CompanyName: "SAP"
19453
+ },
19454
+ method: "POST",
19455
+ requestUri: "BusinessPartnerSet"
19456
+ }, {
19457
+ data: {
19458
+ __metadata: {uri: "BusinessPartnerSet('42')"},
19459
+ BusinessPartnerID: "42",
19460
+ CompanyName: "SAP"
19461
+ },
19462
+ statusCode: 201
19463
+ })
19464
+ .expectValue("company", "SAP", 0);
19465
+
19466
+ // code under test: change the value that activation is done
19467
+ oTable.getRows()[0].getCells()[0].setValue("SAP");
19468
+ oModel.submitChanges();
19469
+
19470
+ return that.waitForChanges(assert);
19471
+ });
19472
+ });
19473
+
19029
19474
  //*********************************************************************************************
19030
19475
  // Scenario: For a transient entity, transient sub-entities are created for its :n-navigation
19031
19476
  // property. The complete deep create object is created in back-end via one POST request.
@@ -20006,8 +20451,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20006
20451
  {path : \'CreatedByUser\', operator : \'EQ\', value1 : \'user1\'}\
20007
20452
  ]\
20008
20453
  }"\
20009
- visibleRowCount="4"\
20010
- visibleRowCountMode="Fixed">\
20454
+ visibleRowCount="4">\
20011
20455
  <Text id="itemName" text="{ErhaOrderItemName}" />\
20012
20456
  </t:TreeTable>',
20013
20457
  that = this;
@@ -20209,4 +20653,232 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20209
20653
  return that.waitForChanges(assert);
20210
20654
  });
20211
20655
  });
20656
+
20657
+ //*********************************************************************************************
20658
+ // Scenario: If the server uses server side paging and the OData model uses "Client" mode all
20659
+ // data is requested up to the model size limit.
20660
+ // BCP: 2380127053
20661
+ [false, true].forEach(function (bShortRead) {
20662
+ QUnit.test("OperationMode.Client: with server side paging, short read:" + bShortRead, function (assert) {
20663
+ var oTable,
20664
+ iDataReceived = 0,
20665
+ iDataRequested = 0,
20666
+ iExpectedSize = bShortRead ? 15 : 30,
20667
+ oModel = createSalesOrdersModel({defaultOperationMode: "Client"}),
20668
+ sView = '\
20669
+ <t:Table id="table">\
20670
+ <Text id="note" text="{Note}"/>\
20671
+ </t:Table>',
20672
+ that = this;
20673
+
20674
+ function dataRequested() {
20675
+ iDataRequested += 1;
20676
+ }
20677
+ function dataReceived(oEvent) {
20678
+ var oEventData = oEvent.getParameter("data");
20679
+
20680
+ iDataReceived += 1;
20681
+ // responses are merged
20682
+ assert.strictEqual(oEventData.results.length, iExpectedSize);
20683
+ oEventData.results.forEach((oData, i) => {
20684
+ assert.strictEqual(oData.Note, "SO" + (i + 1));
20685
+ });
20686
+ assert.strictEqual(oEventData.__count, "" + iExpectedSize);
20687
+ }
20688
+
20689
+ oModel.setSizeLimit(30);
20690
+
20691
+ return this.createView(assert, sView, oModel).then(function () {
20692
+ function createItems(iFrom, iLength) {
20693
+ var i,
20694
+ aItems = [];
20695
+
20696
+ for (i = 0; i < iLength; i += 1) {
20697
+ aItems.push({
20698
+ __metadata: {uri : "SalesOrderSet('" + iFrom + "')"},
20699
+ Note: "SO" + iFrom,
20700
+ SalesOrderID: "" + iFrom
20701
+ });
20702
+ iFrom += 1;
20703
+ }
20704
+
20705
+ return aItems;
20706
+ }
20707
+
20708
+ that.expectHeadRequest()
20709
+ .expectRequest("SalesOrderSet", {
20710
+ __next: "/sap/opu/odata/sap/ZUI5_GWSAMPLE_BASIC/SalesOrderSet?$skiptoken=3",
20711
+ results: createItems(1, 3) // whitout $top server returns 3; in real maybe 100
20712
+ })
20713
+ .expectRequest("SalesOrderSet?$skip=3&$top=27", {
20714
+ // if $top is given server limit is used; here 10, in real maybe 5000
20715
+ __next: "/sap/opu/odata/sap/ZUI5_GWSAMPLE_BASIC/SalesOrderSet?$top=24$skiptoken=13",
20716
+ results: createItems(4, 10)
20717
+ })
20718
+ .expectRequest("SalesOrderSet?$skip=13&$top=17", {
20719
+ // no _next link, that means server returned all requestd entries; there may be
20720
+ // more on the server but the amount of data exceeds the model size limit
20721
+ results: createItems(14, bShortRead ? 2 : 17)
20722
+ });
20723
+
20724
+ oTable = that.oView.byId("table");
20725
+ // code under test - client mode reads all data
20726
+ oTable.bindRows({
20727
+ events: {
20728
+ dataRequested: dataRequested,
20729
+ dataReceived: dataReceived
20730
+ },
20731
+ filter: [new Filter("GrossAmount", FilterOperator.GT, 500)],
20732
+ path: "/SalesOrderSet",
20733
+ sorter: [new Sorter("CompanyCode", true)]
20734
+ });
20735
+
20736
+ return that.waitForChanges(assert);
20737
+ }).then(function () {
20738
+ var oBinding = oTable.getBinding("rows");
20739
+
20740
+ assert.strictEqual(oBinding.getLength(), iExpectedSize);
20741
+ assert.strictEqual(oBinding.getCount(), iExpectedSize);
20742
+ assert.strictEqual(iDataRequested, 1);
20743
+ assert.strictEqual(iDataReceived, 1);
20744
+ });
20745
+ });
20746
+ });
20747
+
20748
+ //*********************************************************************************************
20749
+ // Scenario: Skip server cache for security tokens, so that two services running on different backends behind
20750
+ // a reverse proxy can be consumed without a failing $batch due to a token for a different system taken from server
20751
+ // cache.
20752
+ // JIRA:CPOUI5MODELS-1381
20753
+ QUnit.test("Skip server cache for security tokens", function (assert) {
20754
+ const sView = '\
20755
+ <FlexBox binding="{/SalesOrderSet(\'1\')}">\
20756
+ <Text id="id0" text="{SalesOrderID}" />\
20757
+ </FlexBox>\
20758
+ <FlexBox id="box1">\
20759
+ <Text id="id1" text="{model1>ContactCardID}" />\
20760
+ </FlexBox>';
20761
+
20762
+ function checkServiceCache(aTokens) {
20763
+ const oServiceCache = ODataModel.mSharedData.service;
20764
+ assert.deepEqual(
20765
+ Object.values(oServiceCache).map((oCacheEntry) => oCacheEntry.securityToken).sort(),
20766
+ aTokens.sort());
20767
+ }
20768
+
20769
+ function clearCaches() {
20770
+ ODataModel.mSharedData.server = {};
20771
+ ODataModel.mSharedData.service = {};
20772
+ }
20773
+
20774
+ clearCaches(); // clear static caches on ODataModel to prevent effects from previous tests
20775
+ // create model *after* clearing the caches as the token is lost otherwise
20776
+ const oModel0 = createSalesOrdersModel({tokenHandling : "skipServerCache"});
20777
+ this.expectRequest({
20778
+ deepPath : "",
20779
+ headers : {"x-csrf-token" : "Fetch"},
20780
+ method : "HEAD",
20781
+ requestUri : ""
20782
+ }, {}, {"x-csrf-token" : "token0"})
20783
+ .expectRequest("SalesOrderSet('1')", {
20784
+ SalesOrderID : "1"
20785
+ })
20786
+ .expectValue("id0", "1");
20787
+
20788
+ // code under test
20789
+ return this.createView(assert, sView, oModel0).then(() => {
20790
+ checkServiceCache(["token0"]);
20791
+
20792
+ this.expectRequest({
20793
+ deepPath : "",
20794
+ headers : {"x-csrf-token" : "Fetch"},
20795
+ method : "HEAD",
20796
+ requestUri : "/special/cases/"
20797
+ }, {}, {"x-csrf-token" : "token1"})
20798
+ .expectRequest({
20799
+ requestUri : "I_UserContactCard('ID')"
20800
+ }, {
20801
+ ContactCardID : "ID"
20802
+ })
20803
+ .expectValue("id1", "ID");
20804
+
20805
+ // code under test: request data for second service *after* security token for first has been retrieved
20806
+ const oModel1 = createSpecialCasesModel({tokenHandling : "skipServerCache"});
20807
+ this.oView.setModel(oModel1, "model1");
20808
+ this.oView.byId("box1").bindElement("model1>/I_UserContactCard('ID')");
20809
+
20810
+ assert.deepEqual(ODataModel.mSharedData.server, {}, "server cache for tokens is empty");
20811
+
20812
+ return this.waitForChanges(assert);
20813
+ }).then(() => {
20814
+ checkServiceCache(["token0", "token1"]);
20815
+ }).finally(clearCaches);
20816
+ });
20817
+ //*********************************************************************************************
20818
+ // Scenario: For a table where transient entries have messages, the filter returned by requestFilterForMessages does
20819
+ // not refer to these entries. For the BCP incident, check the case no item loaded from the backend has a message:
20820
+ // the filter is null then.
20821
+ // BCP: 2370088390
20822
+ QUnit.test("Filter table where only transient items have messages", function (assert) {
20823
+ let oCreatedContext, oRowsBinding;
20824
+ const oModel = createSalesOrdersModel({preliminaryContext : true});
20825
+ const sView = '\
20826
+ <t:Table id="table" rows="{/SalesOrderSet(\'1\')/ToLineItems}" visibleRowCount="2">\
20827
+ <Input id="itemPosition" value="{ItemPosition}" />\
20828
+ <Input id="note" value="{Note}" />\
20829
+ </t:Table>';
20830
+
20831
+ this.expectHeadRequest()
20832
+ .expectRequest({
20833
+ requestUri : "SalesOrderSet('1')/ToLineItems?$skip=0&$top=102"
20834
+ }, {
20835
+ results : [{
20836
+ __metadata : {
20837
+ uri : "SalesOrderLineItemSet(SalesOrderID='1',ItemPosition='10')"
20838
+ },
20839
+ Note : "Bar",
20840
+ ItemPosition : "10",
20841
+ SalesOrderID : "1"
20842
+ }, {
20843
+ __metadata : {
20844
+ uri : "SalesOrderLineItemSet(SalesOrderID='1',ItemPosition='20')"
20845
+ },
20846
+ Note : "Baz",
20847
+ ItemPosition : "20",
20848
+ SalesOrderID : "1"
20849
+ }]
20850
+ })
20851
+ .expectValue("itemPosition", ["10", "20"])
20852
+ .expectValue("note", ["Bar", "Baz"]);
20853
+
20854
+ return this.createView(assert, sView, oModel).then(() => {
20855
+ this.expectValue("itemPosition", ["", "10"])
20856
+ .expectValue("note", ["Foo", "Bar"]);
20857
+
20858
+ // code under test
20859
+ oRowsBinding = this.oView.byId("table").getBinding("rows");
20860
+ oCreatedContext = oRowsBinding.create({Note : "Foo"}, /*bAtEnd*/ false, {inactive: true});
20861
+
20862
+ return this.waitForChanges(assert);
20863
+ }).then(() => {
20864
+ const oMessage = { // usually, this message occurs on activation
20865
+ message: "Item position is required",
20866
+ type: "Error",
20867
+ target: oCreatedContext.getPath() + "/ItemPosition",
20868
+ fullTarget: oCreatedContext.getDeepPath() + "/ItemPosition",
20869
+ processor: oModel
20870
+ };
20871
+ this.expectMessages(oMessage);
20872
+
20873
+ // code under test
20874
+ Messaging.addMessages(new Message(oMessage));
20875
+
20876
+ return Promise.all([
20877
+ oRowsBinding.requestFilterForMessages(),
20878
+ this.waitForChanges(assert)
20879
+ ]);
20880
+ }).then((aResults) => {
20881
+ assert.strictEqual(aResults[0], null, "no message filter, only transient item has message");
20882
+ });
20883
+ });
20212
20884
  });