@openui5/sap.ui.core 1.122.0 → 1.123.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 (534) hide show
  1. package/.dtsgenrc +7 -1
  2. package/.eslintrc.json +3 -0
  3. package/package.json +1 -1
  4. package/src/jquery.sap.global.js +1 -17
  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/future.js +3 -1
  13. package/src/sap/base/i18n/Formatting.js +119 -94
  14. package/src/sap/base/i18n/LanguageTag.js +1 -1
  15. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  16. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  17. package/src/sap/base/util/restricted/_castArray.js +1 -1
  18. package/src/sap/base/util/restricted/_compact.js +1 -1
  19. package/src/sap/base/util/restricted/_curry.js +1 -1
  20. package/src/sap/base/util/restricted/_debounce.js +1 -1
  21. package/src/sap/base/util/restricted/_difference.js +1 -1
  22. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  23. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  24. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  25. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  26. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  27. package/src/sap/base/util/restricted/_flatten.js +1 -1
  28. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  29. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  30. package/src/sap/base/util/restricted/_intersection.js +1 -1
  31. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  32. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  33. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  34. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  35. package/src/sap/base/util/restricted/_isNil.js +1 -1
  36. package/src/sap/base/util/restricted/_max.js +1 -1
  37. package/src/sap/base/util/restricted/_merge.js +1 -1
  38. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  39. package/src/sap/base/util/restricted/_min.js +1 -1
  40. package/src/sap/base/util/restricted/_omit.js +1 -1
  41. package/src/sap/base/util/restricted/_pick.js +1 -1
  42. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  43. package/src/sap/base/util/restricted/_throttle.js +1 -1
  44. package/src/sap/base/util/restricted/_toArray.js +1 -1
  45. package/src/sap/base/util/restricted/_union.js +1 -1
  46. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  47. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  48. package/src/sap/base/util/restricted/_uniq.js +1 -1
  49. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  50. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  51. package/src/sap/base/util/restricted/_without.js +1 -1
  52. package/src/sap/base/util/restricted/_xor.js +1 -1
  53. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  54. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  55. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  56. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  57. package/src/sap/ui/Device.js +3 -3
  58. package/src/sap/ui/Global.js +7 -4
  59. package/src/sap/ui/base/BindingInfo.js +22 -0
  60. package/src/sap/ui/base/Event.js +1 -1
  61. package/src/sap/ui/base/EventProvider.js +1 -1
  62. package/src/sap/ui/base/Interface.js +1 -1
  63. package/src/sap/ui/base/ManagedObject.js +5 -14
  64. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  65. package/src/sap/ui/base/Metadata.js +15 -14
  66. package/src/sap/ui/base/Object.js +1 -1
  67. package/src/sap/ui/base/ObjectPool.js +1 -1
  68. package/src/sap/ui/core/.library +1 -1
  69. package/src/sap/ui/core/BusyIndicator.js +1 -1
  70. package/src/sap/ui/core/Component.js +17 -16
  71. package/src/sap/ui/core/ComponentContainer.js +1 -1
  72. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  73. package/src/sap/ui/core/ComponentSupport.js +1 -1
  74. package/src/sap/ui/core/Configuration.js +53 -18
  75. package/src/sap/ui/core/Control.js +1 -1
  76. package/src/sap/ui/core/Core.js +58 -21
  77. package/src/sap/ui/core/CustomData.js +1 -1
  78. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  79. package/src/sap/ui/core/Element.js +1 -1
  80. package/src/sap/ui/core/ElementMetadata.js +1 -1
  81. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  82. package/src/sap/ui/core/EventBus.js +6 -2
  83. package/src/sap/ui/core/Fragment.js +10 -5
  84. package/src/sap/ui/core/HTML.js +1 -1
  85. package/src/sap/ui/core/History.js +1 -1
  86. package/src/sap/ui/core/Icon.js +1 -1
  87. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  88. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  89. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  90. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  91. package/src/sap/ui/core/InvisibleText.js +1 -1
  92. package/src/sap/ui/core/Item.js +1 -1
  93. package/src/sap/ui/core/LabelEnablement.js +1 -1
  94. package/src/sap/ui/core/LayoutData.js +1 -1
  95. package/src/sap/ui/core/ListItem.js +1 -1
  96. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  97. package/src/sap/ui/core/Locale.js +1 -1
  98. package/src/sap/ui/core/LocaleData.js +37 -21
  99. package/src/sap/ui/core/Manifest.js +1 -1
  100. package/src/sap/ui/core/Message.js +1 -1
  101. package/src/sap/ui/core/RenderManager.js +7 -1
  102. package/src/sap/ui/core/Renderer.js +4 -1
  103. package/src/sap/ui/core/ResizeHandler.js +1 -1
  104. package/src/sap/ui/core/ScrollBar.js +2 -2
  105. package/src/sap/ui/core/SeparatorItem.js +1 -1
  106. package/src/sap/ui/core/Title.js +1 -1
  107. package/src/sap/ui/core/TooltipBase.js +1 -1
  108. package/src/sap/ui/core/UIArea.js +37 -47
  109. package/src/sap/ui/core/UIComponent.js +1 -1
  110. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  111. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  112. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  113. package/src/sap/ui/core/XMLComposite.js +1 -1
  114. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  115. package/src/sap/ui/core/XMLTemplateProcessor.js +12 -0
  116. package/src/sap/ui/core/_IconRegistry.js +1 -0
  117. package/src/sap/ui/core/date/UI5Date.js +1 -1
  118. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  119. package/src/sap/ui/core/delegate/ScrollEnablement.js +2 -2
  120. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  121. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  122. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  123. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  124. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  125. package/src/sap/ui/core/format/NumberFormat.js +28 -3
  126. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  127. package/src/sap/ui/core/getCompatibilityVersion.js +6 -2
  128. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  129. package/src/sap/ui/core/library.js +3 -3
  130. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  131. package/src/sap/ui/core/message/Message.js +1 -1
  132. package/src/sap/ui/core/message/MessageManager.js +1 -1
  133. package/src/sap/ui/core/message/MessageParser.js +1 -1
  134. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  135. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  136. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  137. package/src/sap/ui/core/mvc/JSView.js +1 -1
  138. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  139. package/src/sap/ui/core/mvc/View.js +12 -7
  140. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  141. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  142. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  143. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  144. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  145. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  146. package/src/sap/ui/core/rules/CoreHelper.support.js +2 -3
  147. package/src/sap/ui/core/rules/Misc.support.js +3 -12
  148. package/src/sap/ui/core/rules/Theming.support.js +5 -9
  149. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  150. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  151. package/src/sap/ui/core/service/Service.js +1 -1
  152. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  153. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  154. package/src/sap/ui/core/support/Plugin.js +1 -1
  155. package/src/sap/ui/core/support/Support.js +1 -20
  156. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  157. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  158. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  159. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  160. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  161. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  162. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  163. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  164. package/src/sap/ui/core/themes/base/.theming +3 -1
  165. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  166. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  167. package/src/sap/ui/core/theming/Parameters.js +5 -1
  168. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  169. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  170. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  171. package/src/sap/ui/core/tmpl/Template.js +1 -1
  172. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  173. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  174. package/src/sap/ui/core/util/Export.js +2 -2
  175. package/src/sap/ui/core/util/ExportCell.js +2 -2
  176. package/src/sap/ui/core/util/ExportColumn.js +2 -2
  177. package/src/sap/ui/core/util/ExportRow.js +2 -2
  178. package/src/sap/ui/core/util/ExportType.js +2 -2
  179. package/src/sap/ui/core/util/ExportTypeCSV.js +2 -2
  180. package/src/sap/ui/core/util/File.js +1 -1
  181. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  182. package/src/sap/ui/core/util/MockServer.js +1 -1
  183. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  184. package/src/sap/ui/core/util/XMLPreprocessor.js +8 -13
  185. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  186. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  187. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  188. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  189. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  190. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  191. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  192. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  193. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  194. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  195. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  196. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  197. package/src/sap/ui/debug/ControlTree.js +1 -1
  198. package/src/sap/ui/debug/DebugEnv.js +1 -1
  199. package/src/sap/ui/debug/PropertyList.js +1 -1
  200. package/src/sap/ui/dom/jquery/Aria.js +19 -0
  201. package/src/sap/ui/events/jquery/EventExtension.js +4 -3
  202. package/src/sap/ui/model/ClientModel.js +1 -1
  203. package/src/sap/ui/model/CompositeDataState.js +1 -1
  204. package/src/sap/ui/model/CompositeType.js +4 -4
  205. package/src/sap/ui/model/DataState.js +2 -2
  206. package/src/sap/ui/model/ManagedObjectBindingSupport.js +22 -33
  207. package/src/sap/ui/model/MetaModel.js +1 -1
  208. package/src/sap/ui/model/Model.js +1 -1
  209. package/src/sap/ui/model/SelectionModel.js +1 -1
  210. package/src/sap/ui/model/SimpleType.js +1 -1
  211. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  212. package/src/sap/ui/model/Type.js +1 -1
  213. package/src/sap/ui/model/analytics/AnalyticalVersionInfo.js +1 -1
  214. package/src/sap/ui/model/controlhelper/TreeBindingProxy.js +7 -1
  215. package/src/sap/ui/model/json/JSONModel.js +1 -1
  216. package/src/sap/ui/model/message/MessageModel.js +1 -1
  217. package/src/sap/ui/model/odata/AnnotationHelper.js +11 -8
  218. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  219. package/src/sap/ui/model/odata/ODataExpressionAddons.js +21 -0
  220. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  221. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  222. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  223. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  224. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  225. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  226. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  227. package/src/sap/ui/model/odata/type/Date.js +1 -1
  228. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  229. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  230. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  231. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  232. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  233. package/src/sap/ui/model/odata/type/Double.js +1 -1
  234. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  235. package/src/sap/ui/model/odata/type/Int.js +1 -1
  236. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  237. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  238. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  239. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  240. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  241. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  242. package/src/sap/ui/model/odata/type/Single.js +1 -1
  243. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  244. package/src/sap/ui/model/odata/type/String.js +1 -1
  245. package/src/sap/ui/model/odata/type/Time.js +1 -1
  246. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  247. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  248. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  249. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  250. package/src/sap/ui/model/odata/v2/ODataModel.js +17 -48
  251. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  252. package/src/sap/ui/model/odata/v4/AnnotationHelper.js +2 -0
  253. package/src/sap/ui/model/odata/v4/Context.js +66 -22
  254. package/src/sap/ui/model/odata/v4/ODataBinding.js +10 -11
  255. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +207 -180
  256. package/src/sap/ui/model/odata/v4/ODataListBinding.js +75 -52
  257. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +9 -11
  258. package/src/sap/ui/model/odata/v4/ODataModel.js +34 -35
  259. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +9 -9
  260. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +20 -8
  261. package/src/sap/ui/model/odata/v4/SubmitMode.js +1 -1
  262. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +126 -46
  263. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +56 -11
  264. package/src/sap/ui/model/odata/v4/lib/_Cache.js +21 -34
  265. package/src/sap/ui/model/odata/v4/lib/_Helper.js +16 -27
  266. package/src/sap/ui/model/odata/v4/lib/_MetadataConverter.js +2 -6
  267. package/src/sap/ui/model/odata/v4/lib/_MinMaxHelper.js +1 -1
  268. package/src/sap/ui/model/odata/v4/lib/_Parser.js +6 -5
  269. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +49 -38
  270. package/src/sap/ui/model/odata/v4/lib/_TreeState.js +75 -24
  271. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +3 -4
  272. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +4 -12
  273. package/src/sap/ui/model/odata/v4/lib/_V4MetadataConverter.js +1 -1
  274. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  275. package/src/sap/ui/model/type/Boolean.js +1 -1
  276. package/src/sap/ui/model/type/Currency.js +48 -4
  277. package/src/sap/ui/model/type/Date.js +1 -1
  278. package/src/sap/ui/model/type/DateInterval.js +1 -1
  279. package/src/sap/ui/model/type/DateTime.js +1 -1
  280. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  281. package/src/sap/ui/model/type/FileSize.js +1 -1
  282. package/src/sap/ui/model/type/Float.js +1 -1
  283. package/src/sap/ui/model/type/Integer.js +1 -1
  284. package/src/sap/ui/model/type/String.js +1 -1
  285. package/src/sap/ui/model/type/Time.js +1 -1
  286. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  287. package/src/sap/ui/model/type/Unit.js +5 -4
  288. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  289. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  290. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +4 -1
  291. package/src/sap/ui/test/ModuleTracking.js +46 -0
  292. package/src/sap/ui/test/OpaBuilder.js +19 -19
  293. package/src/sap/ui/test/autowaiter/_jsAnimationWaiter.js +39 -6
  294. package/src/sap/ui/test/generic/TestBase.js +1 -1
  295. package/src/sap/ui/util/Storage.js +1 -1
  296. package/src/sap/ui/util/_enforceNoReturnValue.js +3 -1
  297. package/src/ui5loader-autoconfig.js +22 -16
  298. package/src/ui5loader.js +38 -1
  299. package/test/sap/ui/core/demokit/docuindex.json +17 -6
  300. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/BasicMessages/Component.js +1 -1
  301. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/BasicMessages/Controller.controller.js +30 -47
  302. package/test/sap/ui/core/demokit/sample/Messaging/BasicMessages/MessagePopover.fragment.xml +13 -0
  303. package/test/sap/ui/core/demokit/sample/Messaging/BasicMessages/View.view.xml +135 -0
  304. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/BasicMessages/manifest.json +2 -2
  305. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/BasicODataMessages/Component.js +1 -1
  306. package/test/sap/ui/core/demokit/sample/Messaging/BasicODataMessages/Controller.controller.js +58 -0
  307. package/test/sap/ui/core/demokit/sample/Messaging/BasicODataMessages/MessagePopover.fragment.xml +13 -0
  308. package/test/sap/ui/core/demokit/sample/Messaging/BasicODataMessages/View.view.xml +57 -0
  309. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/BasicODataMessages/localService/mockserver.js +11 -13
  310. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/BasicODataMessages/manifest.json +2 -2
  311. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/Component.js +1 -1
  312. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/manifest.json +2 -1
  313. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/package.json +1 -1
  314. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/ui5.yaml +11 -0
  315. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/Component.js +2 -2
  316. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/webapp/controller/App.controller.js +12 -0
  317. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/webapp/controller/BaseController.js +41 -0
  318. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/webapp/controller/Employee.controller.js +54 -0
  319. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/controller/NotFound.controller.js +9 -11
  320. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/webapp/fragment/MessagePopover.fragment.xml +13 -0
  321. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/webapp/i18n/i18n.properties +9 -0
  322. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/webapp/index.html +20 -0
  323. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/webapp/index.js +16 -0
  324. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/localService/mockserver.js +27 -27
  325. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/manifest.json +7 -4
  326. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/view/App.view.xml +1 -1
  327. package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/view/Employee.view.xml +6 -6
  328. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/webapp/view/NotFound.view.xml +13 -0
  329. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Types.controller.js +1 -1
  330. package/test/sap/ui/core/demokit/sample/common/Helper.js +8 -9
  331. package/test/sap/ui/core/demokit/sample/common/SandboxModelHelper.js +1 -1
  332. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithOPA5/GherkinTestRunner.html +2 -2
  333. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithPageObjects/GherkinTestRunner.html +2 -2
  334. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithQUnit/GherkinTestRunner.html +2 -2
  335. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithQUnit/Steps.js +4 -5
  336. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithUIComponent/GherkinTestRunner.html +2 -2
  337. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  338. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  339. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  340. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  341. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/AutoExpand.view.xml +1 -0
  342. package/test/sap/ui/core/demokit/sample/odata/v4/ConsumeV2Service/Main.controller.js +1 -1
  343. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/ObjectPage.controller.js +2 -2
  344. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.controller.js +1 -1
  345. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Main.controller.js +1 -1
  346. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/MIT.ListBinding.html +1 -1
  347. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Main.controller.js +5 -7
  348. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Main.view.xml +2 -2
  349. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/MIT.ListBindingTemplate.html +1 -1
  350. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +3 -3
  351. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.view.xml +6 -5
  352. package/test/sap/ui/core/demokit/sample/odata/v4/MusicArtists/ObjectPage.controller.js +5 -7
  353. package/test/sap/ui/core/demokit/sample/odata/v4/Products/MIT.Products.html +2 -2
  354. package/test/sap/ui/core/demokit/sample/odata/v4/Products/pages/Main.js +1 -1
  355. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +27 -9
  356. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/MIT.SalesOrderTP100.html +1 -1
  357. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/MIT.SalesOrderTP100.html +1 -1
  358. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/MIT.Basics.html +1 -1
  359. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/MIT.SalesOrderAdditionalTargets.html +1 -1
  360. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/MIT.SalesOrderCreate.html +1 -1
  361. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/MIT.SalesOrderCreateMultiple.html +1 -1
  362. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/MIT.SalesOrderCreateRelative.html +1 -1
  363. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/MIT.SalesOrderMessageHandling.html +3 -3
  364. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.controller.js +5 -5
  365. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.view.xml +3 -3
  366. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/pages/Main.js +7 -9
  367. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/MessageHandling.js +3 -3
  368. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/MIT.RTA.html +2 -2
  369. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/MIT.SalesOrdersTemplate.html +1 -1
  370. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/MIT.Sticky.html +3 -3
  371. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/Main.controller.js +3 -3
  372. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/pages/Main.js +1 -1
  373. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  374. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  375. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  376. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  377. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  378. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  379. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  380. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  381. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  382. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  383. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  384. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  385. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  386. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  387. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  388. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  389. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  390. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  391. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  392. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  393. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  394. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  395. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  396. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  397. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  398. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  399. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  400. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  401. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  402. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  403. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  404. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  405. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  406. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  407. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  408. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  409. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  410. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  411. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  412. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  413. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  414. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  415. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/localService/mockserver.js +1 -1
  416. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  417. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/localService/mockserver.js +1 -1
  418. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  419. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/controller/App.controller.js +1 -1
  420. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/localService/mockserver.js +1 -1
  421. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  422. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/controller/App.controller.js +1 -1
  423. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/localService/mockserver.js +1 -1
  424. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  425. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/controller/App.controller.js +1 -1
  426. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/localService/mockserver.js +1 -1
  427. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  428. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/controller/App.controller.js +1 -1
  429. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/localService/mockserver.js +1 -1
  430. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  431. package/test/sap/ui/core/internal/samples/odata/v2/Products/Main.view.xml +1 -1
  432. package/test/sap/ui/core/qunit/CustomStyleClassSupport.qunit.js +12 -3
  433. package/test/sap/ui/core/qunit/CustomThemeFallback.qunit.js +33 -38
  434. package/test/sap/ui/core/qunit/CustomThemeFallback_unavoidablySync.qunit.js +119 -0
  435. package/test/sap/ui/core/qunit/EventBus.qunit.js +15 -0
  436. package/test/sap/ui/core/qunit/Lib_terminologies.qunit.js +109 -0
  437. package/test/sap/ui/core/qunit/StashedControlSupport_unavoidablySync.qunit.js +19 -0
  438. package/test/sap/ui/core/qunit/StashedControlSupport_unavoidablySync.view.xml +27 -0
  439. package/test/sap/ui/core/qunit/app/ThemeClassParameters.qunit.js +105 -140
  440. package/test/sap/ui/core/qunit/app/testsuite.app.qunit.js +75 -2
  441. package/test/sap/ui/core/qunit/base/Config.qunit.js +6 -2
  442. package/test/sap/ui/core/qunit/base/Config_bootstrap.qunit.html +4 -1
  443. package/test/sap/ui/core/qunit/base/Config_bootstrap.qunit.js +6 -2
  444. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +6 -3
  445. package/test/sap/ui/core/qunit/base/Config_global.qunit.html +5 -2
  446. package/test/sap/ui/core/qunit/base/Config_meta.qunit.html +5 -2
  447. package/test/sap/ui/core/qunit/base/Config_noUrl.qunit.html +5 -2
  448. package/test/sap/ui/core/qunit/base/Config_noUrl.qunit.js +5 -1
  449. package/test/sap/ui/core/qunit/base/Config_url.qunit.html +5 -2
  450. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithNoJQuery-without-jquery-ui-position.qunit.html +2 -1
  451. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithNoJQuery.qunit.html +2 -1
  452. package/test/sap/ui/core/qunit/bootstrap/DebugMode.beforeBootstrap.qunit.js +7 -0
  453. package/test/sap/ui/core/qunit/bootstrap/DebugModeAsync.qunit.html +10 -4
  454. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +7 -0
  455. package/test/sap/ui/core/qunit/component/Component_keepAlive.qunit.js +9 -0
  456. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessAmbiguous.html +2 -2
  457. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessDuplicate.html +2 -2
  458. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessFailing.html +2 -2
  459. package/test/sap/ui/core/qunit/gherkin/opa5TestHarness.qunit.html +2 -2
  460. package/test/sap/ui/core/qunit/gherkin/qUnitTestHarness.qunit.html +2 -2
  461. package/test/sap/ui/core/qunit/gherkin/testHarnessTests.js +1 -1
  462. package/test/sap/ui/core/qunit/i18n/GenericLocaleData.qunit.js +1 -1
  463. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +15 -15
  464. package/test/sap/ui/core/qunit/i18n/testsuite.i18n.qunit.js +7 -1
  465. package/test/sap/ui/core/qunit/loader/config.qunit.js +14 -6
  466. package/test/sap/ui/core/qunit/model/PropertyBinding.qunit.js +288 -0
  467. package/test/sap/ui/core/qunit/model/controlhelper/TreeBindingProxy.qunit.js +12 -0
  468. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +7 -2
  469. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +223 -40
  470. package/test/sap/ui/core/qunit/odata/v2/ODataPropertyBinding.qunit.js +78 -7
  471. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +142 -17
  472. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +93 -87
  473. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +116 -86
  474. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +3 -3
  475. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1828 -548
  476. package/test/sap/ui/core/qunit/odata/v4/ODataModel.realOData.qunit.js +1 -1
  477. package/test/sap/ui/core/qunit/odata/v4/ODataParentBinding.qunit.js +1 -1
  478. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +26 -23
  479. package/test/sap/ui/core/qunit/odata/v4/data/metadata_special_cases.xml +9 -0
  480. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +251 -113
  481. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +50 -0
  482. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +3 -3
  483. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +31 -11
  484. package/test/sap/ui/core/qunit/odata/v4/lib/_Parser.qunit.js +8 -2
  485. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +46 -31
  486. package/test/sap/ui/core/qunit/odata/v4/lib/_TreeState.qunit.js +144 -45
  487. package/test/sap/ui/core/qunit/odata/v4/lib/_V2Requestor.qunit.js +5 -5
  488. package/test/sap/ui/core/qunit/odata/v4/lib/data/v2/QM_INSP_PLAN_SRV/metadata.xml +3 -3
  489. package/test/sap/ui/core/qunit/odata/v4/lib/data/v2/QM_INSP_PLAN_SRV/metadata_only.xml +3 -3
  490. package/test/sap/ui/core/qunit/opa/autowaiter/_jsAnimationWaiter.js +82 -0
  491. package/test/sap/ui/core/qunit/testdata/libraries/terminologies/simple/i18n/i18n_fr.properties +1 -0
  492. package/test/sap/ui/core/qunit/testdata/libraries/terminologies/simple/i18n/terminologies/oil/i18n_fr.properties +2 -0
  493. package/test/sap/ui/core/qunit/testdata/libraries/terminologies/simple/library-preload.js +2 -2
  494. package/test/sap/ui/core/qunit/testdata/uilib-custom-theme-fallback/themes/sap_hcb/library.css +3 -0
  495. package/test/sap/ui/core/qunit/testsuite.core.framework.qunit.js +19 -1
  496. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +14 -0
  497. package/test/sap/ui/core/qunit/types/NumberFormat.qunit.js +37 -20
  498. package/test/sap/ui/core/qunit/types/NumberFormatCurrencies.qunit.js +21 -0
  499. package/test/sap/ui/core/qunit/types/Types.qunit.js +126 -15
  500. package/test/sap/ui/core/qunit/ui5classes/ManagedObject.qunit.js +58 -4
  501. package/test/sap/ui/core/relnotes/changes-1.122.json +0 -22
  502. package/test/sap/ui/core/relnotes/changes-1.123.json +47 -0
  503. package/test/sap/ui/core/samples/databinding/DataBindingDeclarativeSyntax.js +55 -56
  504. package/test/sap/ui/core/samples/databinding/DatabindingDeclarativeSyntax.html +4 -4
  505. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/firstItem-contextMenu.ref.lnk +1 -1
  506. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/initial.ref.lnk +1 -1
  507. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/lastItem-contextMenu.ref.lnk +1 -1
  508. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/leftDownBtn-contextMenu.ref.lnk +1 -1
  509. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/myButtonSample-contextMenu.ref.lnk +1 -1
  510. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/rightDownBtn-contextMenu.ref.lnk +1 -1
  511. package/test/testsuite/js/testfwk.js +47 -64
  512. package/test/sap/ui/core/demokit/sample/MessageManager/BasicMessages/MessagePopover.fragment.xml +0 -13
  513. package/test/sap/ui/core/demokit/sample/MessageManager/BasicMessages/View.view.xml +0 -136
  514. package/test/sap/ui/core/demokit/sample/MessageManager/BasicODataMessages/Controller.controller.js +0 -74
  515. package/test/sap/ui/core/demokit/sample/MessageManager/BasicODataMessages/MessagePopover.fragment.xml +0 -13
  516. package/test/sap/ui/core/demokit/sample/MessageManager/BasicODataMessages/View.view.xml +0 -58
  517. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/ui5.yaml +0 -11
  518. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/controller/App.controller.js +0 -14
  519. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/controller/BaseController.js +0 -55
  520. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/controller/Employee.controller.js +0 -56
  521. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/fragment/MessagePopover.fragment.xml +0 -13
  522. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/i18n/i18n.properties +0 -5
  523. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/index.html +0 -42
  524. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/webapp/view/NotFound.view.xml +0 -11
  525. package/test/sap/ui/core/qunit/app/beforeBootstrap.js +0 -19
  526. package/test/sap/ui/core/qunit/base/i18n/Formatting.qunit.html +0 -24
  527. /package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/BasicODataMessages/localService/metadata.xml +0 -0
  528. /package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/BasicODataMessages/localService/mockdata/Employees.json +0 -0
  529. /package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/BasicODataMessages/localService/response/ODataErrorResponse.json +0 -0
  530. /package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/localService/metadata.xml +0 -0
  531. /package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/localService/mockdata/Employees.json +0 -0
  532. /package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/localService/mockdata/Employees_3.json +0 -0
  533. /package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/localService/response/ODataErrorResponseTemplate.json +0 -0
  534. /package/test/sap/ui/core/demokit/sample/{MessageManager → Messaging}/ODataBackendMessagesComp/webapp/localService/response/SAP-Message-Header.json +0 -0
@@ -729,16 +729,19 @@ sap.ui.define([
729
729
  assert.strictEqual(
730
730
  oCache.calculateKeyPredicate("~oElement~", "~mTypeForMetaPath~", "~metapath~"),
731
731
  "~sPredicate~");
732
+
733
+ if (oPICT.oParentGroupNode) {
734
+ assert.strictEqual(oCache.$parentFilter, "~filter~");
735
+ } else {
736
+ assert.notOk("$parentFilter" in oCache);
737
+ }
732
738
  });
733
739
  });
734
740
 
735
741
  //*********************************************************************************************
736
742
  [undefined, {}].forEach(function (oParentGroupNode, i) {
737
743
  QUnit.test("createGroupLevelCache: recursive hierarchy, #" + i, function (assert) {
738
- var oAggregation = {
739
- hierarchyQualifier : "X",
740
- $metaPath : "/meta/path"
741
- },
744
+ var oAggregation = {hierarchyQualifier : "X"},
742
745
  oCache = {},
743
746
  mCacheQueryOptions = {},
744
747
  iLevel = oParentGroupNode ? 3 : 1,
@@ -756,7 +759,7 @@ sap.ui.define([
756
759
  .withExactArgs(sinon.match.same(oParentGroupNode), "filter").returns(undefined);
757
760
  this.mock(oAggregationCache).expects("getTypes").withExactArgs().returns("~getTypes~");
758
761
  this.mock(_Helper).expects("getKeyFilter")
759
- .withExactArgs(sinon.match.same(oParentGroupNode), "/meta/path", "~getTypes~")
762
+ .withExactArgs(sinon.match.same(oParentGroupNode), "/Foo", "~getTypes~")
760
763
  .returns("~filter~");
761
764
  }
762
765
  this.mock(_AggregationHelper).expects("getAllProperties").never();
@@ -794,6 +797,12 @@ sap.ui.define([
794
797
  assert.strictEqual(
795
798
  oCache.calculateKeyPredicate("~oElement~", "~mTypeForMetaPath~", "~metapath~"),
796
799
  "~sPredicate~");
800
+
801
+ if (oParentGroupNode) {
802
+ assert.strictEqual(oCache.$parentFilter, "~filter~");
803
+ } else {
804
+ assert.notOk("$parentFilter" in oCache);
805
+ }
797
806
  });
798
807
  });
799
808
 
@@ -1066,7 +1075,6 @@ sap.ui.define([
1066
1075
  $DistanceFromRoot : "DistFromRoot",
1067
1076
  $DrillState : "myDrillState",
1068
1077
  $LimitedDescendantCount : "LtdDescendant_Count",
1069
- $metaPath : "~metaPath~",
1070
1078
  $NodeProperty : "NodeID",
1071
1079
  $path : "/path",
1072
1080
  aggregate : {},
@@ -1087,7 +1095,7 @@ sap.ui.define([
1087
1095
  oCache.aElements[25] = {"@$ui5.node.level" : 5};
1088
1096
  oCache.aElements[26] = {"@$ui5.node.level" : 3};
1089
1097
  const oHelperMock = this.mock(_Helper);
1090
- oHelperMock.expects("getKeyFilter").withExactArgs(oNode, "~metaPath~", "~Types~")
1098
+ oHelperMock.expects("getKeyFilter").withExactArgs(oNode, "/Foo", "~Types~")
1091
1099
  .returns("~Key~");
1092
1100
  this.mock(this.oRequestor).expects("buildQueryString")
1093
1101
  .withExactArgs(null, {$apply : "ancestors($root/path,X,NodeID,filter(~Key~),1)"})
@@ -1139,7 +1147,7 @@ sap.ui.define([
1139
1147
  "LtdDescendant_Count"], "~GroupLock~", true)
1140
1148
  .resolves();
1141
1149
  oNodePropertyExpectation = oCacheMock.expects("requestNodeProperty")
1142
- .withExactArgs("~Parent~", "~GroupLock~")
1150
+ .withExactArgs("~Parent~", "~GroupLock~", false)
1143
1151
  .resolves();
1144
1152
 
1145
1153
  return {value : ["~Parent~"]};
@@ -1173,7 +1181,6 @@ sap.ui.define([
1173
1181
  $DistanceFromRoot : "DistFromRoot",
1174
1182
  $DrillState : "myDrillState",
1175
1183
  $LimitedDescendantCount : "LtdDescendant_Count",
1176
- $metaPath : "~metaPath~",
1177
1184
  $NodeProperty : "NodeID",
1178
1185
  $path : "/path",
1179
1186
  aggregate : {},
@@ -1188,7 +1195,7 @@ sap.ui.define([
1188
1195
  const oNode = {};
1189
1196
  oCache.aElements[22] = {"@$ui5.node.level" : 0};
1190
1197
  oCache.aElements[23] = oNode;
1191
- this.mock(_Helper).expects("getKeyFilter").withExactArgs(oNode, "~metaPath~", "~Types~")
1198
+ this.mock(_Helper).expects("getKeyFilter").withExactArgs(oNode, "/Foo", "~Types~")
1192
1199
  .returns("~Key~");
1193
1200
  this.mock(this.oRequestor).expects("buildQueryString")
1194
1201
  .withExactArgs(null, {$apply : "ancestors($root/path,X,NodeID,filter(~Key~),1)"})
@@ -1231,7 +1238,6 @@ sap.ui.define([
1231
1238
  $DistanceFromRoot : "DistFromRoot",
1232
1239
  $DrillState : "myDrillState",
1233
1240
  $LimitedDescendantCount : "LtdDescendant_Count",
1234
- $metaPath : "~metaPath~",
1235
1241
  $NodeProperty : "NodeID",
1236
1242
  $path : "/path",
1237
1243
  aggregate : {},
@@ -1246,7 +1252,7 @@ sap.ui.define([
1246
1252
  const oNode = {};
1247
1253
  oCache.aElements[22] = {"@$ui5.node.level" : 0};
1248
1254
  oCache.aElements[23] = oNode;
1249
- this.mock(_Helper).expects("getKeyFilter").withExactArgs(oNode, "~metaPath~", "~Types~")
1255
+ this.mock(_Helper).expects("getKeyFilter").withExactArgs(oNode, "/Foo", "~Types~")
1250
1256
  .returns("~Key~");
1251
1257
  this.mock(this.oRequestor).expects("buildQueryString")
1252
1258
  .withExactArgs(null, {$apply : "ancestors($root/path,X,NodeID,filter(~Key~),1)"})
@@ -1757,33 +1763,41 @@ sap.ui.define([
1757
1763
  iFirstLevelLength : 3,
1758
1764
  iExpectedStart : 0,
1759
1765
  iExpectedLength : 33
1760
- }, {
1766
+ }, { // prefetch wins; less than iStart
1761
1767
  iFirstLevelIndex : 25,
1762
1768
  iFirstLevelLength : 1,
1763
1769
  iOutOfPlaceCount : 5,
1764
1770
  iPrefetchLength : 10,
1765
- iExpectedStart : 10,
1766
- iExpectedLength : 26
1767
- }, {
1768
- iFirstLevelIndex : 21,
1769
- iFirstLevelLength : 1,
1770
- iOutOfPlaceCount : 5,
1771
- iExpectedStart : 0,
1772
- iExpectedLength : 42
1773
- }, {
1774
- iFirstLevelIndex : 20,
1771
+ iExpectedStart : 15,
1772
+ iExpectedLength : 21
1773
+ }, { // out of place count wins; less than iStart
1774
+ iFirstLevelIndex : 25,
1775
1775
  iFirstLevelLength : 1,
1776
- iOutOfPlaceCount : 5,
1777
- iPrefetchLength : 0,
1776
+ iOutOfPlaceCount : 10,
1777
+ iPrefetchLength : 5,
1778
1778
  iExpectedStart : 15,
1779
- iExpectedLength : 6
1780
- }, {
1779
+ iExpectedLength : 16
1780
+ }, { // prefetch wins; more than iStart
1781
+ iFirstLevelIndex : 2,
1782
+ iFirstLevelLength : 1,
1783
+ iOutOfPlaceCount : 3,
1784
+ iPrefetchLength : 5,
1785
+ iExpectedStart : 0,
1786
+ iExpectedLength : 8
1787
+ }, { // out of place count wins; more than iStart
1781
1788
  iFirstLevelIndex : 2,
1782
1789
  iFirstLevelLength : 1,
1783
1790
  iOutOfPlaceCount : 5,
1784
- iPrefetchLength : 0,
1791
+ iPrefetchLength : 1,
1792
+ iExpectedStart : 0,
1793
+ iExpectedLength : 4
1794
+ }, { // oFirstLevel already requested data
1795
+ bHasGrandTotal : false,
1796
+ bHasRequestedData : true,
1797
+ iFirstLevelIndex : 0,
1798
+ iFirstLevelLength : 3,
1785
1799
  iExpectedStart : 0,
1786
- iExpectedLength : 3
1800
+ iExpectedLength : 23
1787
1801
  }].forEach(function (oFixture, i) {
1788
1802
  QUnit.test("readFirst: #" + i, function (assert) {
1789
1803
  var oAggregation = { // filled before by buildApply
@@ -1820,6 +1834,7 @@ sap.ui.define([
1820
1834
  oCache.oGrandTotalPromise = SyncPromise.resolve(oGrandTotal);
1821
1835
  _Helper.setPrivateAnnotation(oGrandTotal, "copy", oGrandTotalCopy);
1822
1836
  }
1837
+ oCache.oFirstLevel.bSentRequest = oFixture.bHasRequestedData;
1823
1838
  for (i = 0; i < Math.min(iExpectedLength, 42); i += 1) {
1824
1839
  oReadResult.value.push({});
1825
1840
  }
@@ -1828,8 +1843,12 @@ sap.ui.define([
1828
1843
  .returns(oFixture.iOutOfPlaceCount ?? 0);
1829
1844
  this.mock(oCache.oFirstLevel).expects("read")
1830
1845
  .withExactArgs(iExpectedStart, iExpectedLength, 0, "~oGroupLock~", "~fnDataRequested~")
1831
- .returns(SyncPromise.resolve(Promise.resolve(oReadResult)));
1832
- this.mock(oCache).expects("requestOutOfPlaceNodes").withExactArgs("~oGroupLock~")
1846
+ .callsFake(function () {
1847
+ oCache.oFirstLevel.bSentRequest = true;
1848
+ return SyncPromise.resolve(Promise.resolve(oReadResult));
1849
+ });
1850
+ this.mock(oCache).expects("requestOutOfPlaceNodes")
1851
+ .exactly(oFixture.bHasRequestedData ? 0 : 1).withExactArgs("~oGroupLock~")
1833
1852
  .returns([Promise.resolve("~outOfPlaceResult0~"),
1834
1853
  Promise.resolve("~outOfPlaceResult1~"), Promise.resolve("~outOfPlaceResult2~")]);
1835
1854
  if (oFixture.bHasGrandTotal) {
@@ -1871,7 +1890,10 @@ sap.ui.define([
1871
1890
  .returns("~placeholder~" + i);
1872
1891
  }
1873
1892
  const oHandleOutOfPlaceNodesExpectation = this.mock(oCache).expects("handleOutOfPlaceNodes")
1874
- .withExactArgs(["~outOfPlaceResult0~", "~outOfPlaceResult1~", "~outOfPlaceResult2~"]);
1893
+ .withExactArgs(oFixture.bHasRequestedData
1894
+ ? []
1895
+ : ["~outOfPlaceResult0~", "~outOfPlaceResult1~", "~outOfPlaceResult2~"]
1896
+ );
1875
1897
 
1876
1898
  // code under test
1877
1899
  return oCache.readFirst(oFixture.iFirstLevelIndex, oFixture.iFirstLevelLength,
@@ -2877,12 +2899,8 @@ sap.ui.define([
2877
2899
  cache : oGroupLevelCache,
2878
2900
  groupLevelCount : 7,
2879
2901
  spliced : [{
2880
- "@$ui5._" : {
2881
- parent : oCache.oFirstLevel, // unrealistic!
2882
- predicate : "('A')",
2883
- rank : 23
2884
- },
2885
- "@$ui5.node.level" : 10
2902
+ "@$ui5._" : {placeholder : true},
2903
+ "@$ui5.node.level" : 0
2886
2904
  }, {
2887
2905
  "@$ui5._" : {placeholder : true, predicate : "n/a", rank : 24},
2888
2906
  "@$ui5.node.level" : 11
@@ -2902,8 +2920,12 @@ sap.ui.define([
2902
2920
  },
2903
2921
  "@$ui5.node.level" : 12
2904
2922
  }, {
2905
- "@$ui5._" : {placeholder : true},
2906
- "@$ui5.node.level" : 0
2923
+ "@$ui5._" : {
2924
+ parent : oCache.oFirstLevel, // unrealistic!
2925
+ predicate : "('A')",
2926
+ rank : 27
2927
+ },
2928
+ "@$ui5.node.level" : 10
2907
2929
  }],
2908
2930
  rank : 42
2909
2931
  },
@@ -2923,6 +2945,7 @@ sap.ui.define([
2923
2945
  if (bStale) {
2924
2946
  oGroupNode["@$ui5._"].spliced.$stale = true;
2925
2947
  }
2948
+ oGroupNode["@$ui5._"].spliced.$level = 9;
2926
2949
  oGroupNode["@$ui5._"].spliced.$rank = 12;
2927
2950
  aElements = [{}, oGroupNode, {}, {}];
2928
2951
  oCache.aElements = aElements.slice();
@@ -2944,12 +2967,12 @@ sap.ui.define([
2944
2967
  .withExactArgs(sinon.match.same(_GroupLock.$cached), sinon.match.same(aSpliced[2]))
2945
2968
  .returns(SyncPromise.resolve(100));
2946
2969
  if (bStale) {
2947
- oCacheMock.expects("turnIntoPlaceholder")
2948
- .withExactArgs(sinon.match.same(aSpliced[0]), "('A')");
2949
2970
  oCacheMock.expects("turnIntoPlaceholder")
2950
2971
  .withExactArgs(sinon.match.same(aSpliced[2]), "('C')");
2951
2972
  oCacheMock.expects("turnIntoPlaceholder")
2952
2973
  .withExactArgs(sinon.match.same(aSpliced[3]), "('created')");
2974
+ oCacheMock.expects("turnIntoPlaceholder")
2975
+ .withExactArgs(sinon.match.same(aSpliced[4]), "('A')");
2953
2976
  oCacheMock.expects("turnIntoPlaceholder")
2954
2977
  .withExactArgs(sinon.match.same(aSpliced[200000]), "('D')");
2955
2978
  } else {
@@ -2973,8 +2996,7 @@ sap.ui.define([
2973
2996
  ["0", "1", "2", "3", "4", "5", "6", "200002", "200003", "200004", "$byPredicate",
2974
2997
  "$count"]);
2975
2998
  assert.strictEqual(oCache.aElements[2], aSpliced[0]);
2976
- assert.strictEqual(aSpliced[0]["@$ui5.node.level"], 6);
2977
- assert.strictEqual(aSpliced[0]["@$ui5._"].rank, 53);
2999
+ assert.strictEqual(aSpliced[0]["@$ui5.node.level"], 0, "unchanged");
2978
3000
  assert.strictEqual(oCache.aElements[3], aSpliced[1]);
2979
3001
  assert.strictEqual(aSpliced[1]["@$ui5.node.level"], 7);
2980
3002
  assert.strictEqual(aSpliced[1]["@$ui5._"].rank, 24);
@@ -2984,7 +3006,8 @@ sap.ui.define([
2984
3006
  assert.strictEqual(_Helper.hasPrivateAnnotation(aSpliced[2], "expanding"), bStale,
2985
3007
  "deleted only if not stale");
2986
3008
  assert.notOk("rank" in aSpliced[3]["@$ui5._"]);
2987
- assert.strictEqual(aSpliced[4]["@$ui5.node.level"], 0, "unchanged");
3009
+ assert.strictEqual(aSpliced[4]["@$ui5.node.level"], 6);
3010
+ assert.strictEqual(aSpliced[4]["@$ui5._"].rank, 57);
2988
3011
  assert.strictEqual(oCache.aElements[200002], aSpliced[200000]);
2989
3012
  assert.strictEqual(aSpliced[200000]["@$ui5.node.level"], 6);
2990
3013
  assert.strictEqual(aSpliced[200000]["@$ui5._"].rank, 200023);
@@ -2994,10 +3017,10 @@ sap.ui.define([
2994
3017
  assert.strictEqual(oCache.aElements[200004], aElements[3]);
2995
3018
 
2996
3019
  assert.deepEqual(oCache.aElements.$byPredicate, bStale ? {} : {
2997
- "('A')" : aSpliced[0],
2998
3020
  "('C')" : aSpliced[2],
2999
3021
  "('created')" : aSpliced[3],
3000
3022
  "($uid=1-23)" : aSpliced[3],
3023
+ "('A')" : aSpliced[4],
3001
3024
  "('D')" : aSpliced[200000]
3002
3025
  });
3003
3026
  });
@@ -3213,7 +3236,8 @@ sap.ui.define([
3213
3236
  collapsed : oCollapsed,
3214
3237
  predicate : "('1')",
3215
3238
  rank : "~rank~"
3216
- }
3239
+ },
3240
+ "@$ui5.node.level" : "~level~"
3217
3241
  }, {
3218
3242
  "@$ui5._" : {predicate : "('2')", transientPredicate : "($uid=1-23)"}
3219
3243
  }, {
@@ -3232,6 +3256,7 @@ sap.ui.define([
3232
3256
  rank : "~rank~"
3233
3257
  },
3234
3258
  "@$ui5.node.isExpanded" : false,
3259
+ "@$ui5.node.level" : "~level~",
3235
3260
  A : "10" // placeholder for an aggregate with subtotals
3236
3261
  }, {
3237
3262
  "@$ui5._" : {predicate : "('4')"}
@@ -3288,6 +3313,7 @@ sap.ui.define([
3288
3313
  "('1')" : aElements[1],
3289
3314
  "('4')" : aElements[4]
3290
3315
  });
3316
+ assert.strictEqual(aElements[1]["@$ui5._"].spliced.$level, "~level~");
3291
3317
  assert.strictEqual(aElements[1]["@$ui5._"].spliced.$rank, "~rank~");
3292
3318
  });
3293
3319
  });
@@ -4572,7 +4598,7 @@ new parent was expanded before = ${bSpliced}, make root = ${bMakeRoot}`;
4572
4598
 
4573
4599
  assert.strictEqual(oSyncPromise.isPending(), true);
4574
4600
 
4575
- return oSyncPromise.then(function (iResult) {
4601
+ return oSyncPromise.then(function ([iResult]) {
4576
4602
  assert.strictEqual(iResult, !bParentIsLeaf ? "~iResult~" : 1);
4577
4603
  assert.deepEqual(oCache.aElements, bParentIsLeaf
4578
4604
  ? ["a", "~oOldParent~", "d", "e", "f", "g", oParentNode, oChildNode, "i"]
@@ -4690,6 +4716,8 @@ make root = ${bMakeRoot}`;
4690
4716
  }
4691
4717
 
4692
4718
  QUnit.test(sTitle, async function (assert) {
4719
+ var oUpdateExistingExpectation;
4720
+
4693
4721
  const oCache = _AggregationCache.create(this.oRequestor, "n/a", "", {}, {
4694
4722
  $ParentNavigationProperty : "myParent",
4695
4723
  expandTo : Number.MAX_SAFE_INTEGER,
@@ -4699,8 +4727,9 @@ make root = ${bMakeRoot}`;
4699
4727
  "@$ui5.node.isExpanded" : bNewParentExpanded,
4700
4728
  "@$ui5.node.level" : 9
4701
4729
  };
4730
+ // Note: oParentNode's index in aElements MUST not matter!
4702
4731
  oCache.aElements
4703
- = ["a", "~oOldParent~", "~oChildNode~", "d", "e", "f", "g", oParentNode, "i"];
4732
+ = ["a", "~oOldParent~", "~oChildNode~", "d", "e", "f", "g", "h", "i"];
4704
4733
  oCache.aElements.$byPredicate = {
4705
4734
  "('23')" : "~oChildNode~",
4706
4735
  "('42')" : oParentNode
@@ -4721,9 +4750,12 @@ make root = ${bMakeRoot}`;
4721
4750
  }, {"myParent@odata.bind" : bMakeRoot ? null : "Foo('42')"},
4722
4751
  /*fnSubmit*/null, /*fnCancel*/sinon.match.func)
4723
4752
  .resolves({"@odata.etag" : "etag"});
4724
- const oUpdateExistingExpectation = oHelperMock.expects("updateExisting")
4725
- .withExactArgs(sinon.match.same(oCache.mChangeListeners), "('23')", "~oChildNode~",
4726
- {"@odata.etag" : "etag", "@$ui5.node.level" : bMakeRoot ? 1 : 10});
4753
+ oCacheMock.expects("expand").exactly(bNewParentExpanded === false ? 1 : 0)
4754
+ .withExactArgs(_GroupLock.$cached, "('42')").returns(SyncPromise.resolve(47));
4755
+ oHelperMock.expects("updateAll")
4756
+ .exactly(oParentNode && bNewParentExpanded === undefined ? 1 : 0)
4757
+ .withExactArgs(sinon.match.same(oCache.mChangeListeners), "('42')",
4758
+ sinon.match.same(oParentNode), {"@$ui5.node.isExpanded" : true});
4727
4759
  oHelperMock.expects("getPrivateAnnotation")
4728
4760
  .withExactArgs("~oChildNode~", "descendants", 0).returns(4);
4729
4761
  oCacheMock.expects("adjustDescendantCount")
@@ -4731,48 +4763,40 @@ make root = ${bMakeRoot}`;
4731
4763
  .callsFake(function () {
4732
4764
  assert.notOk(oUpdateExistingExpectation.called, "old level needed!");
4733
4765
  assert.deepEqual(oCache.aElements,
4734
- ["a", "~oOldParent~", "~oChildNode~", "d", "e", "f", "g", oParentNode, "i"],
4735
- "not spliced yet");
4736
- });
4737
- oCacheMock.expects("shiftRank").withExactArgs(2, -(4 + 1))
4738
- .callsFake(function () {
4739
- assert.deepEqual(oCache.aElements,
4740
- ["a", "~oOldParent~", "~oChildNode~", "d", "e", "f", "g", oParentNode, "i"],
4766
+ ["a", "~oOldParent~", "~oChildNode~", "d", "e", "f", "g", "h", "i"],
4741
4767
  "not spliced yet");
4742
4768
  });
4743
4769
  oHelperMock.expects("getPrivateAnnotation")
4744
4770
  .withExactArgs("~oChildNode~", "rank").returns("~rank~");
4771
+ const oShiftRankForMoveExpectation = oCacheMock.expects("shiftRankForMove")
4772
+ .withExactArgs("~rank~", 4 + 1, 17);
4745
4773
  this.mock(oCache.oFirstLevel).expects("move").withExactArgs("~rank~", 17, 4 + 1);
4746
- const oSetRankExpectation = oHelperMock.expects("setPrivateAnnotation")
4747
- .withExactArgs("~oChildNode~", "rank", 17);
4748
- oCacheMock.expects("expand").exactly(bNewParentExpanded === false ? 1 : 0)
4749
- .withExactArgs(_GroupLock.$cached, "('42')").returns(SyncPromise.resolve(47));
4750
- oCacheMock.expects("shiftRank").withExactArgs(7, +(4 + 1))
4751
- .callsFake(function () {
4752
- assert.ok(oSetRankExpectation.called, "new rank needed");
4753
- assert.deepEqual(oCache.aElements,
4754
- ["a", "~oOldParent~", "d", "e", "f", "g", oParentNode, "~oChildNode~", "i"],
4755
- "already moved");
4774
+ oUpdateExistingExpectation = oHelperMock.expects("updateExisting")
4775
+ .withExactArgs(sinon.match.same(oCache.mChangeListeners), "('23')", "~oChildNode~", {
4776
+ "@odata.etag" : "etag",
4777
+ "@$ui5.node.level" : bMakeRoot ? 1 : 10,
4778
+ "@$ui5.context.isTransient" : undefined
4756
4779
  });
4780
+ oHelperMock.expects("setPrivateAnnotation").withExactArgs("~oChildNode~", "rank", 17);
4781
+ const oGetArrayIndexExpectation = oCacheMock.expects("getArrayIndex").withExactArgs(17)
4782
+ .returns(7);
4757
4783
  oCacheMock.expects("adjustDescendantCount")
4758
4784
  .withExactArgs("~oChildNode~", 7, +(4 + 1))
4759
4785
  .callsFake(function () {
4760
4786
  assert.deepEqual(oCache.aElements,
4761
- ["a", "~oOldParent~", "d", "e", "f", "g", oParentNode, "~oChildNode~", "i"],
4787
+ ["a", "~oOldParent~", "d", "e", "f", "g", "h", "~oChildNode~", "i"],
4762
4788
  "already moved");
4763
4789
  });
4764
- oHelperMock.expects("updateAll")
4765
- .exactly(oParentNode && bNewParentExpanded === undefined ? 1 : 0)
4766
- .withExactArgs(sinon.match.same(oCache.mChangeListeners), "('42')",
4767
- sinon.match.same(oParentNode), {"@$ui5.node.isExpanded" : true});
4768
4790
 
4769
4791
  // code under test
4770
- const iResult
4792
+ const [iResult, iNewIndex]
4771
4793
  = await oCache.move("~oGroupLock~", "Foo('23')", bMakeRoot ? undefined : "Foo('42')");
4772
4794
 
4773
4795
  assert.strictEqual(iResult, bNewParentExpanded === false ? 47 + 1 : 1);
4796
+ assert.strictEqual(iNewIndex, 7);
4774
4797
  assert.deepEqual(oCache.aElements,
4775
- ["a", "~oOldParent~", "d", "e", "f", "g", oParentNode, "~oChildNode~", "i"]);
4798
+ ["a", "~oOldParent~", "d", "e", "f", "g", "h", "~oChildNode~", "i"]);
4799
+ assert.ok(oShiftRankForMoveExpectation.calledBefore(oGetArrayIndexExpectation));
4776
4800
  });
4777
4801
  });
4778
4802
  });
@@ -4873,7 +4897,7 @@ make root = ${bMakeRoot}`;
4873
4897
  return Promise.resolve("~iRank~");
4874
4898
  });
4875
4899
  oNodeExpectation = that.mock(oCache).expects("requestNodeProperty")
4876
- .withExactArgs(sinon.match.same(oEntityData), "~oGroupLock~")
4900
+ .withExactArgs(sinon.match.same(oEntityData), "~oGroupLock~", true)
4877
4901
  .returns(new Promise(function (resolve0) {
4878
4902
  setTimeout(function () {
4879
4903
  bNodePropertyCompleted = true;
@@ -5137,39 +5161,97 @@ make root = ${bMakeRoot}`;
5137
5161
  });
5138
5162
  });
5139
5163
 
5164
+ //*********************************************************************************************
5165
+ QUnit.test("shiftRankForMove", function (assert) {
5166
+ const oCache = _AggregationCache.create(this.oRequestor, "Foo", "", {}, {
5167
+ hierarchyQualifier : "X"
5168
+ });
5169
+
5170
+ function setup(aRanks) {
5171
+ return aRanks.map(function (iRank) {
5172
+ return {"@$ui5._" : {rank : iRank}};
5173
+ });
5174
+ }
5175
+
5176
+ // Note: order does not really matter
5177
+ // "The subtree itself is unaffected and may, but need not be present."
5178
+ // 2: subtree's root node, 3: missing, 4: part of subtree
5179
+ oCache.aElements = setup([0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11]);
5180
+
5181
+ function expect(aExpectedRanks) {
5182
+ assert.deepEqual(
5183
+ oCache.aElements.map((oElement) => oElement["@$ui5._"].rank),
5184
+ aExpectedRanks
5185
+ );
5186
+ }
5187
+
5188
+ // code under test
5189
+ oCache.shiftRankForMove(2, 3, 2);
5190
+
5191
+ expect([0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11]);
5192
+
5193
+ // code under test
5194
+ oCache.shiftRankForMove(2, 3, 7);
5195
+
5196
+ expect([0, 1, 2, 4, 5 - 3, 6 - 3, 7 - 3, 8 - 3, 9 - 3, 10, 11]);
5197
+
5198
+ // 7: subtree's root node, 8: missing, 9: part of subtree
5199
+ oCache.aElements = setup([0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11]);
5200
+
5201
+ // code under test
5202
+ oCache.shiftRankForMove(7, 3, 2);
5203
+
5204
+ expect([0, 1, 2 + 3, 3 + 3, 4 + 3, 5 + 3, 6 + 3, 7, 9, 10, 11]);
5205
+ });
5206
+
5140
5207
  //*********************************************************************************************
5141
5208
  [true, false].forEach((bInheritResult) => {
5142
- QUnit.test("requestProperties: bInheritResult = " + bInheritResult, async function (assert) {
5209
+ [true, false].forEach((bDropFilter) => {
5210
+ const sTitle = "requestProperties: bInheritResult = " + bInheritResult
5211
+ + ", bDropFilter = " + bDropFilter;
5212
+
5213
+ QUnit.test(sTitle, async function (assert) {
5143
5214
  const oCache = _AggregationCache.create(this.oRequestor, "Foo", "", {}, {
5144
5215
  hierarchyQualifier : "X",
5145
- $LimitedRank : "~LimitedRank~",
5146
- $metaPath : "/meta/path"
5216
+ $LimitedRank : "~LimitedRank~"
5147
5217
  });
5148
- const oParentCache = {getQueryOptions : mustBeMocked};
5218
+ const oParentCache = {
5219
+ $parentFilter : "~parentFilter~",
5220
+ getQueryOptions : mustBeMocked
5221
+ };
5149
5222
  const aSelect = ["path/to/property0", "path/to/property1"];
5150
5223
  const oHelperMock = this.mock(_Helper);
5151
5224
  oHelperMock.expects("getPrivateAnnotation").withExactArgs("~oElement~", "parent")
5152
5225
  .returns(oParentCache);
5153
- this.mock(oParentCache).expects("getQueryOptions").withExactArgs()
5226
+ this.mock(oParentCache).expects("getQueryOptions").exactly(bDropFilter ? 0 : 1)
5227
+ .withExactArgs()
5228
+ // Note: buildApply4Hierarchy has already removed $$filterBeforeAggregate, $filter,
5229
+ // and $orderby and integrated these into $apply!
5154
5230
  .returns({
5155
- $$filterBeforeAggregate : "n/a",
5156
5231
  $apply : "A.P.P.L.E.",
5157
5232
  $count : "n/a",
5158
5233
  $expand : "n/a",
5159
- $filter : "n/a",
5160
- $orderby : "n/a",
5161
- $search : "n/a",
5162
5234
  $select : ["n/a"],
5163
5235
  foo : "bar",
5164
5236
  "sap-client" : "123"
5165
5237
  });
5166
5238
  this.mock(oCache).expects("getTypes").withExactArgs().returns("~getTypes~");
5239
+ this.mock(_AggregationHelper).expects("dropFilter").exactly(bDropFilter ? 1 : 0)
5240
+ .withExactArgs(sinon.match.same(oCache.oAggregation),
5241
+ sinon.match.same(oCache.mQueryOptions), "~parentFilter~")
5242
+ .returns({
5243
+ $apply : "A.P.P.L.E.",
5244
+ foo : "bar",
5245
+ "sap-client" : "123"
5246
+ });
5167
5247
  oHelperMock.expects("getKeyFilter")
5168
- .withExactArgs("~oElement~", "/meta/path", "~getTypes~").returns("~filter~");
5248
+ .withExactArgs("~oElement~", "/Foo", "~getTypes~").returns("~filter~");
5169
5249
  this.mock(oCache.oRequestor).expects("buildQueryString")
5170
- .withExactArgs("/meta/path", {
5250
+ .withExactArgs("/Foo", {
5171
5251
  $apply : "A.P.P.L.E.",
5172
- $filter : "~filter~"
5252
+ $filter : "~filter~",
5253
+ foo : "bar",
5254
+ "sap-client" : "123"
5173
5255
  }, false, true)
5174
5256
  .returns("~queryString~");
5175
5257
  const oGroupLock = {getUnlockedCopy : mustBeMocked};
@@ -5177,7 +5259,7 @@ make root = ${bMakeRoot}`;
5177
5259
  .returns("~oGroupLockCopy~");
5178
5260
  this.mock(oCache.oRequestor).expects("request")
5179
5261
  .withExactArgs("GET", "Foo~queryString~", "~oGroupLockCopy~", undefined, undefined,
5180
- undefined, undefined, "/meta/path", undefined, false, {$select : aSelect},
5262
+ undefined, undefined, "/Foo", undefined, false, {$select : aSelect},
5181
5263
  sinon.match.same(oCache))
5182
5264
  .resolves({
5183
5265
  "@odata.context" : "n/a",
@@ -5194,8 +5276,10 @@ make root = ${bMakeRoot}`;
5194
5276
 
5195
5277
  assert.strictEqual(
5196
5278
  // code under test
5197
- await oCache.requestProperties("~oElement~", aSelect, oGroupLock, bInheritResult),
5198
- bInheritResult ? undefined : "~oResult~");
5279
+ await oCache
5280
+ .requestProperties("~oElement~", aSelect, oGroupLock, bInheritResult, bDropFilter),
5281
+ bInheritResult ? undefined : "~oResult~");
5282
+ });
5199
5283
  });
5200
5284
  });
5201
5285
 
@@ -5226,12 +5310,12 @@ make root = ${bMakeRoot}`;
5226
5310
  this.mock(_Helper).expects("drillDown").withExactArgs("~oElement~", "path/to/NodeID")
5227
5311
  .returns(undefined);
5228
5312
  this.mock(oCache).expects("requestProperties")
5229
- .withExactArgs("~oElement~", ["path/to/NodeID"], "~oGroupLock~", true)
5313
+ .withExactArgs("~oElement~", ["path/to/NodeID"], "~oGroupLock~", true, "~bDropFilter~")
5230
5314
  .resolves(undefined);
5231
5315
 
5232
5316
  assert.strictEqual(
5233
5317
  // code under test
5234
- await oCache.requestNodeProperty("~oElement~", "~oGroupLock~"),
5318
+ await oCache.requestNodeProperty("~oElement~", "~oGroupLock~", "~bDropFilter~"),
5235
5319
  undefined, "without a defined result");
5236
5320
  });
5237
5321
 
@@ -5248,7 +5332,7 @@ make root = ${bMakeRoot}`;
5248
5332
 
5249
5333
  assert.strictEqual(
5250
5334
  // code under test
5251
- await oCache.requestNodeProperty("~oElement~", "~oGroupLock~"),
5335
+ await oCache.requestNodeProperty("~oElement~", "~oGroupLock~", "n/a"),
5252
5336
  undefined, "without a defined result");
5253
5337
  });
5254
5338
 
@@ -5293,6 +5377,8 @@ make root = ${bMakeRoot}`;
5293
5377
  "If-Match" : sinon.match.same(oElement)
5294
5378
  })
5295
5379
  .callsFake(() => {
5380
+ this.mock(oCache.oTreeState).expects("delete")
5381
+ .withExactArgs(sinon.match.same(oElement));
5296
5382
  this.mock(_Cache).expects("getElementIndex")
5297
5383
  .withExactArgs(sinon.match.same(oCache.aElements), "~predicate~", 2)
5298
5384
  .returns(4);
@@ -5593,18 +5679,16 @@ make root = ${bMakeRoot}`;
5593
5679
  });
5594
5680
 
5595
5681
  //*********************************************************************************************
5596
- QUnit.test("handleOutOfPlaceNodes", function () {
5682
+ QUnit.test("handleOutOfPlaceNodes", function (assert) {
5597
5683
  const oCache = _AggregationCache.create(this.oRequestor, "Foo", "", {}, {
5598
5684
  hierarchyQualifier : "X",
5685
+ $DrillState : "~DrillState~",
5599
5686
  $LimitedRank : "~LimitedRank~"
5600
5687
  });
5601
- oCache.aElements.$byPredicate = {
5602
- "~predicate2~" : "~node2~",
5603
- "~predicate4~" : "~node4~"
5604
- };
5688
+ oCache.aElements.$byPredicate = {"~predicate2~" : "~node2~"};
5605
5689
  const oRankResult = {
5606
5690
  value : ["~parent1RankResult~", "~node2RankResult~", "~node3RankResult~",
5607
- "~node1RankResult~", "~parent2RankResult~", "~node4RankResult~"]
5691
+ "~node1RankResult~", "~parent2RankResult~"]
5608
5692
  };
5609
5693
  const oOutOfPlaceNodeResult1 = {
5610
5694
  value : ["~node1Data~", "~node2Data~"]
@@ -5615,9 +5699,13 @@ make root = ${bMakeRoot}`;
5615
5699
  const oOutOfPlaceNodeResult3 = {
5616
5700
  value : ["~node4Data~"]
5617
5701
  };
5702
+ const oOutOfPlaceNodeResult4 = {
5703
+ value : ["~node5Data~"]
5704
+ };
5618
5705
  const oCacheMock = this.mock(oCache);
5619
5706
  const oFirstLevelMock = this.mock(oCache.oFirstLevel);
5620
5707
  const oHelperMock = this.mock(_Helper);
5708
+ const oTreeStateMock = this.mock(oCache.oTreeState);
5621
5709
 
5622
5710
  oCacheMock.expects("getTypes").atLeast(1).withExactArgs().returns("~types~");
5623
5711
  // oRankResult
@@ -5636,12 +5724,26 @@ make root = ${bMakeRoot}`;
5636
5724
  oHelperMock.expects("getKeyPredicate")
5637
5725
  .withExactArgs("~parent2RankResult~", "/Foo", "~types~")
5638
5726
  .returns("~parent2Predicate~");
5639
- oHelperMock.expects("getKeyPredicate")
5640
- .withExactArgs("~node4RankResult~", "/Foo", "~types~")
5641
- .returns("~predicate4~");
5727
+
5728
+ oTreeStateMock.expects("getOutOfPlacePredicates").withExactArgs()
5729
+ .returns(["~predicate1~", "~predicate2~", "~predicate3~", "~predicate4~",
5730
+ "~predicate5~", "~predicate6NowInPlace~", "~predicate7NowInPlace~"]);
5731
+
5732
+ // parent1
5733
+ // node1
5734
+ // node2
5735
+ // node3
5736
+ // parent2 (collapsed)
5737
+ // node4 (no rank)
5738
+ // node5 (no rank)
5739
+
5642
5740
  // "~node1Data~"
5643
5741
  oHelperMock.expects("getKeyPredicate").withExactArgs("~node1Data~", "/Foo", "~types~")
5644
5742
  .returns("~predicate1~");
5743
+ oTreeStateMock.expects("getOutOfPlace").withExactArgs("~predicate1~")
5744
+ .returns({parentPredicate : "~parent1Predicate~"});
5745
+ oHelperMock.expects("drillDown").withExactArgs("~parent1RankResult~", "~DrillState~")
5746
+ .returns("expanded");
5645
5747
  oHelperMock.expects("merge").withExactArgs("~node1Data~", "~node1RankResult~");
5646
5748
  oHelperMock.expects("drillDown").withExactArgs("~node1Data~", "~LimitedRank~").returns("4");
5647
5749
  oFirstLevelMock.expects("calculateKeyPredicate")
@@ -5650,12 +5752,14 @@ make root = ${bMakeRoot}`;
5650
5752
  .callsFake(function () {
5651
5753
  oCache.aElements.$byPredicate["~predicate1~"] = "~node1Data~";
5652
5754
  });
5653
- // "~node2Data~"
5755
+ // "~node2Data~": already in $byPredicate
5654
5756
  oHelperMock.expects("getKeyPredicate").withExactArgs("~node2Data~", "/Foo", "~types~")
5655
5757
  .returns("~predicate2~");
5656
5758
  // "~node3Data~"
5657
5759
  oHelperMock.expects("getKeyPredicate").withExactArgs("~node3Data~", "/Foo", "~types~")
5658
5760
  .returns("~predicate3~");
5761
+ oTreeStateMock.expects("getOutOfPlace").withExactArgs("~predicate3~")
5762
+ .returns({/*no parentPredicate*/});
5659
5763
  oHelperMock.expects("merge").withExactArgs("~node3Data~", "~node3RankResult~");
5660
5764
  oHelperMock.expects("drillDown").withExactArgs("~node3Data~", "~LimitedRank~").returns("5");
5661
5765
  oFirstLevelMock.expects("calculateKeyPredicate")
@@ -5664,11 +5768,27 @@ make root = ${bMakeRoot}`;
5664
5768
  .callsFake(function () {
5665
5769
  oCache.aElements.$byPredicate["~predicate3~"] = "~node3Data~";
5666
5770
  });
5667
- // "~node4Data~"
5771
+ // "~node4Data~": parent is collapsed
5668
5772
  oHelperMock.expects("getKeyPredicate").withExactArgs("~node4Data~", "/Foo", "~types~")
5669
5773
  .returns("~predicate4~");
5774
+ oTreeStateMock.expects("getOutOfPlace").withExactArgs("~predicate4~")
5775
+ .returns({parentPredicate : "~parent2Predicate~"});
5776
+ oHelperMock.expects("drillDown").withExactArgs("~parent2RankResult~", "~DrillState~")
5777
+ .returns("collapsed");
5778
+ // "~node5Data~": below node4 (no rank)
5779
+ oHelperMock.expects("getKeyPredicate").withExactArgs("~node5Data~", "/Foo", "~types~")
5780
+ .returns("~predicate5~");
5781
+ oTreeStateMock.expects("getOutOfPlace").withExactArgs("~predicate5~")
5782
+ .returns({parentPredicate : "~predicate4~"});
5783
+
5784
+ const oDeleteOutOfPlace6Expectation = oTreeStateMock.expects("deleteOutOfPlace")
5785
+ .withExactArgs("~predicate6NowInPlace~");
5786
+ const oDeleteOutOfPlace7Expectation = oTreeStateMock.expects("deleteOutOfPlace")
5787
+ .withExactArgs("~predicate7NowInPlace~");
5788
+
5670
5789
  // move nodes
5671
- this.mock(oCache.oTreeState).expects("getOutOfPlaceGroupedByParent").withExactArgs()
5790
+ const oOutOfPlaceGroupedByParentExpectation = oTreeStateMock
5791
+ .expects("getOutOfPlaceGroupedByParent").withExactArgs()
5672
5792
  .returns([{
5673
5793
  nodePredicates : "~parent1NodePredicates~",
5674
5794
  parentPredicate : "~parent1Predicate~"
@@ -5687,8 +5807,13 @@ make root = ${bMakeRoot}`;
5687
5807
  oCacheMock.expects("moveOutOfPlaceNodes").withExactArgs(undefined, "~rootNodePredicates~");
5688
5808
 
5689
5809
  // code under test
5690
- oCache.handleOutOfPlaceNodes(
5691
- [oRankResult, oOutOfPlaceNodeResult1, oOutOfPlaceNodeResult2, oOutOfPlaceNodeResult3]);
5810
+ oCache.handleOutOfPlaceNodes([oRankResult, oOutOfPlaceNodeResult1, oOutOfPlaceNodeResult2,
5811
+ oOutOfPlaceNodeResult3, oOutOfPlaceNodeResult4]);
5812
+
5813
+ assert.ok(oDeleteOutOfPlace6Expectation
5814
+ .calledBefore(oOutOfPlaceGroupedByParentExpectation));
5815
+ assert.ok(oDeleteOutOfPlace7Expectation
5816
+ .calledBefore(oOutOfPlaceGroupedByParentExpectation));
5692
5817
  });
5693
5818
 
5694
5819
  //*********************************************************************************************
@@ -5739,11 +5864,13 @@ make root = ${bMakeRoot}`;
5739
5864
  hierarchyQualifier : "X",
5740
5865
  $LimitedRank : "~LimitedRank~"
5741
5866
  });
5742
- oCache.aElements = ["~foo~", "~parent~", "~node2~", "~bar~", "~node1~", "~node3~"];
5867
+ const oNode3 = {"@$ui5.node.isExpanded" : true};
5868
+ oCache.aElements
5869
+ = ["~foo~", "~parent~", "~node2~", "~bar~", "~node1~", oNode3, "~node4~"];
5743
5870
  oCache.aElements.$byPredicate = {
5744
5871
  "~predicate1~" : "~node1~",
5745
5872
  "~predicate2~" : "~node2~",
5746
- "~predicate3~" : "~node3~"
5873
+ "~predicate3~" : oNode3
5747
5874
  };
5748
5875
 
5749
5876
  const oHelperMock = this.mock(_Helper);
@@ -5751,15 +5878,26 @@ make root = ${bMakeRoot}`;
5751
5878
  .returns(0);
5752
5879
  oHelperMock.expects("getPrivateAnnotation").withExactArgs("~parent~", "rank")
5753
5880
  .returns("~iParentRank~");
5881
+ this.mock(oCache).expects("collapse").withExactArgs("~predicate3~")
5882
+ .callsFake(function () {
5883
+ assert.strictEqual(oCache.aElements.indexOf(oNode3), 5, "not yet moved");
5884
+ });
5885
+ this.mock(oCache).expects("expand")
5886
+ .withExactArgs(sinon.match.same(_GroupLock.$cached), "~predicate3~")
5887
+ .callsFake(function () {
5888
+ assert.strictEqual(oCache.aElements.indexOf(oNode3), 2,
5889
+ "moved immediately behind parent (snapshot)");
5890
+ });
5754
5891
 
5755
5892
  // code under test
5756
5893
  oCache.moveOutOfPlaceNodes("~iParentRank~",
5757
5894
  // the order is important: node2 is not moved, moving node3 shifts the location of
5758
5895
  // node1 which must be searched again (aElements.indexOf(...))
5759
- ["~predicate2~", "~predicate3~", "~predicate1~"]);
5896
+ // node4 has changed its parent
5897
+ ["~predicate2~", "~predicate3~", "~predicate4~", "~predicate1~"]);
5760
5898
 
5761
5899
  assert.deepEqual(oCache.aElements,
5762
- ["~foo~", "~parent~", "~node1~", "~node3~", "~node2~", "~bar~"]);
5900
+ ["~foo~", "~parent~", "~node1~", oNode3, "~node2~", "~bar~", "~node4~"]);
5763
5901
  });
5764
5902
 
5765
5903
  //*********************************************************************************************