@openui5/sap.ui.core 1.124.2 → 1.126.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 (734) hide show
  1. package/.eslintrc.json +4 -1
  2. package/.reuse/dep5 +9 -4
  3. package/THIRDPARTY.txt +13 -6
  4. package/package.json +1 -1
  5. package/src/jquery.sap.global.js +1 -1
  6. package/src/jquery.sap.properties.js +1 -1
  7. package/src/jquery.sap.resources.js +1 -1
  8. package/src/jquery.sap.script.js +1 -1
  9. package/src/jquery.sap.storage.js +3 -3
  10. package/src/sap/base/Event.js +1 -1
  11. package/src/sap/base/Eventing.js +1 -1
  12. package/src/sap/base/Log.js +0 -16
  13. package/src/sap/base/config.js +1 -1
  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/ObjectPath.js +6 -6
  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 +35 -10
  59. package/src/sap/ui/Global.js +6 -6
  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 +16 -1
  64. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  65. package/src/sap/ui/base/Metadata.js +1 -1
  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 +3 -3
  69. package/src/sap/ui/core/BusyIndicator.js +1 -1
  70. package/src/sap/ui/core/Component.js +22 -5
  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 +1 -1
  75. package/src/sap/ui/core/Control.js +1 -1
  76. package/src/sap/ui/core/Core.js +31 -29
  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 +4 -3
  81. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  82. package/src/sap/ui/core/EventBus.js +1 -1
  83. package/src/sap/ui/core/ExtensionPoint.js +23 -9
  84. package/src/sap/ui/core/Fragment.js +15 -1
  85. package/src/sap/ui/core/HTML.js +1 -1
  86. package/src/sap/ui/core/History.js +1 -1
  87. package/src/sap/ui/core/Icon.js +84 -50
  88. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  89. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  90. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  91. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  92. package/src/sap/ui/core/InvisibleText.js +1 -1
  93. package/src/sap/ui/core/Item.js +1 -1
  94. package/src/sap/ui/core/LabelEnablement.js +66 -1
  95. package/src/sap/ui/core/LayoutData.js +1 -1
  96. package/src/sap/ui/core/Lib.js +2 -2
  97. package/src/sap/ui/core/ListItem.js +1 -1
  98. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  99. package/src/sap/ui/core/Locale.js +1 -1
  100. package/src/sap/ui/core/LocaleData.js +148 -102
  101. package/src/sap/ui/core/Manifest.js +1 -1
  102. package/src/sap/ui/core/Message.js +1 -1
  103. package/src/sap/ui/core/RenderManager.js +1 -1
  104. package/src/sap/ui/core/Renderer.js +1 -1
  105. package/src/sap/ui/core/ResizeHandler.js +1 -1
  106. package/src/sap/ui/core/ScrollBar.js +1 -1
  107. package/src/sap/ui/core/SeparatorItem.js +1 -1
  108. package/src/sap/ui/core/Title.js +1 -1
  109. package/src/sap/ui/core/TooltipBase.js +1 -1
  110. package/src/sap/ui/core/UIArea.js +2 -2
  111. package/src/sap/ui/core/UIComponent.js +23 -16
  112. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  113. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  114. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  115. package/src/sap/ui/core/XMLComposite.js +1 -1
  116. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  117. package/src/sap/ui/core/XMLTemplateProcessor.js +110 -74
  118. package/src/sap/ui/core/boot.js +1 -6
  119. package/src/sap/ui/core/cldr/zh_TW.json +20 -20
  120. package/src/sap/ui/core/date/UI5Date.js +1 -1
  121. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  122. package/src/sap/ui/core/delegate/ScrollEnablement.js +2 -2
  123. package/src/sap/ui/core/dnd/DragAndDrop.js +180 -33
  124. package/src/sap/ui/core/dnd/DragDropBase.js +13 -2
  125. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  126. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  127. package/src/sap/ui/core/dnd/DropInfo.js +6 -3
  128. package/src/sap/ui/core/fieldhelp/FieldHelp.js +389 -0
  129. package/src/sap/ui/core/fieldhelp/FieldHelpUtil.js +62 -0
  130. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  131. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  132. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  133. package/src/sap/ui/core/hyphenation/Hyphenation.js +2 -1
  134. package/src/sap/ui/core/library.js +49 -9
  135. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  136. package/src/sap/ui/core/message/Message.js +1 -1
  137. package/src/sap/ui/core/message/MessageManager.js +1 -1
  138. package/src/sap/ui/core/message/MessageParser.js +1 -1
  139. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  140. package/src/sap/ui/core/mvc/Controller.js +77 -77
  141. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  142. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  143. package/src/sap/ui/core/mvc/JSView.js +1 -1
  144. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  145. package/src/sap/ui/core/mvc/View.js +10 -2
  146. package/src/sap/ui/core/mvc/XMLProcessingMode.js +4 -1
  147. package/src/sap/ui/core/mvc/XMLView.js +33 -5
  148. package/src/sap/ui/core/mvc/XMLViewRenderer.js +40 -7
  149. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  150. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  151. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  152. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  153. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  154. package/src/sap/ui/core/routing/async/TargetCache.js +12 -1
  155. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  156. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  157. package/src/sap/ui/core/service/Service.js +1 -1
  158. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  159. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  160. package/src/sap/ui/core/support/Plugin.js +1 -1
  161. package/src/sap/ui/core/support/Support.js +1 -1
  162. package/src/sap/ui/core/support/bootstrapFallback.js +1 -1
  163. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  164. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  165. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  166. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  167. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  168. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  169. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  170. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  171. package/src/sap/ui/core/themes/sap_hcb/base_BlindLayer.less +37 -0
  172. package/src/sap/ui/core/themes/sap_hcb/base_BrowserScrollbar.less +36 -0
  173. package/src/sap/ui/core/themes/sap_hcb/base_BusyIndicator.less +19 -0
  174. package/src/sap/ui/core/themes/sap_hcb/base_CommandShortcutHints.less +20 -0
  175. package/src/sap/ui/core/themes/sap_hcb/base_DragAndDrop.less +76 -0
  176. package/src/sap/ui/core/themes/sap_hcb/base_Icon.less +144 -0
  177. package/src/sap/ui/core/themes/sap_hcb/base_LocalBusyIndicator.less +292 -0
  178. package/src/sap/ui/core/themes/sap_hcb/base_SAP-icons.less +10 -0
  179. package/src/sap/ui/core/themes/sap_hcb/base_ScrollBar.less +20 -0
  180. package/src/sap/ui/core/themes/sap_hcb/base_Shadow.less +3 -0
  181. package/src/sap/ui/core/themes/sap_hcb/base_TechnicalInfo.less +157 -0
  182. package/src/sap/ui/core/themes/sap_hcb/base_View.less +12 -0
  183. package/src/sap/ui/core/themes/sap_hcb/base_media.less +36 -0
  184. package/src/sap/ui/core/themes/sap_hcb/base_parameterClasses.less +83 -0
  185. package/src/sap/ui/core/themes/sap_hcb/base_shared.less +340 -0
  186. package/src/sap/ui/core/themes/sap_hcb/library.source.less +27 -1
  187. package/src/sap/ui/core/theming/Parameters.js +66 -6
  188. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  189. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  190. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  191. package/src/sap/ui/core/tmpl/Template.js +1 -1
  192. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  193. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  194. package/src/sap/ui/core/util/Export.js +1 -1
  195. package/src/sap/ui/core/util/ExportCell.js +1 -1
  196. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  197. package/src/sap/ui/core/util/ExportRow.js +1 -1
  198. package/src/sap/ui/core/util/ExportType.js +1 -1
  199. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  200. package/src/sap/ui/core/util/File.js +1 -1
  201. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  202. package/src/sap/ui/core/util/MockServer.js +1 -1
  203. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  204. package/src/sap/ui/core/util/XMLPreprocessor.js +14 -15
  205. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  206. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  207. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  208. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  209. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  210. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  211. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  212. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  213. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  214. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  215. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  216. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  217. package/src/sap/ui/debug/ControlTree.js +1 -1
  218. package/src/sap/ui/debug/DebugEnv.js +1 -1
  219. package/src/sap/ui/debug/PropertyList.js +1 -1
  220. package/src/sap/ui/dom/jquery/control.js +6 -3
  221. package/src/sap/ui/model/Binding.js +38 -0
  222. package/src/sap/ui/model/ClientModel.js +1 -1
  223. package/src/sap/ui/model/CompositeDataState.js +1 -1
  224. package/src/sap/ui/model/CompositeType.js +1 -1
  225. package/src/sap/ui/model/DataState.js +1 -1
  226. package/src/sap/ui/model/ManagedObjectBindingSupport.js +5 -0
  227. package/src/sap/ui/model/MetaModel.js +1 -1
  228. package/src/sap/ui/model/Model.js +1 -1
  229. package/src/sap/ui/model/SelectionModel.js +1 -1
  230. package/src/sap/ui/model/SimpleType.js +1 -1
  231. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  232. package/src/sap/ui/model/Type.js +1 -1
  233. package/src/sap/ui/model/analytics/AnalyticalBinding.js +8 -12
  234. package/src/sap/ui/model/base/ManagedObjectModel.js +12 -2
  235. package/src/sap/ui/model/json/JSONModel.js +6 -5
  236. package/src/sap/ui/model/message/MessageModel.js +1 -1
  237. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  238. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  239. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  240. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  241. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  242. package/src/sap/ui/model/odata/ODataUtils.js +22 -14
  243. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  244. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  245. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  246. package/src/sap/ui/model/odata/type/Date.js +1 -1
  247. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  248. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  249. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  250. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  251. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  252. package/src/sap/ui/model/odata/type/Double.js +1 -1
  253. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  254. package/src/sap/ui/model/odata/type/Int.js +1 -1
  255. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  256. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  257. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  258. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  259. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  260. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  261. package/src/sap/ui/model/odata/type/Single.js +1 -1
  262. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  263. package/src/sap/ui/model/odata/type/String.js +1 -1
  264. package/src/sap/ui/model/odata/type/Time.js +1 -1
  265. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  266. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  267. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  268. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  269. package/src/sap/ui/model/odata/v2/ODataModel.js +50 -6
  270. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  271. package/src/sap/ui/model/odata/v4/Context.js +127 -46
  272. package/src/sap/ui/model/odata/v4/ODataBinding.js +20 -20
  273. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +72 -73
  274. package/src/sap/ui/model/odata/v4/ODataListBinding.js +406 -250
  275. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +49 -47
  276. package/src/sap/ui/model/odata/v4/ODataModel.js +271 -217
  277. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +205 -205
  278. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +11 -10
  279. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +232 -61
  280. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +53 -9
  281. package/src/sap/ui/model/odata/v4/lib/_Cache.js +53 -59
  282. package/src/sap/ui/model/odata/v4/lib/_Helper.js +140 -80
  283. package/src/sap/ui/model/odata/v4/lib/_Parser.js +3 -3
  284. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +98 -90
  285. package/src/sap/ui/model/odata/v4/lib/_TreeState.js +1 -1
  286. package/src/sap/ui/model/odata/v4/lib/_V2MetadataConverter.js +22 -22
  287. package/src/sap/ui/model/odata/v4/lib/_V2Requestor.js +63 -63
  288. package/src/sap/ui/model/resource/ResourceModel.js +7 -2
  289. package/src/sap/ui/model/type/Boolean.js +1 -1
  290. package/src/sap/ui/model/type/Currency.js +1 -1
  291. package/src/sap/ui/model/type/Date.js +1 -1
  292. package/src/sap/ui/model/type/DateInterval.js +1 -1
  293. package/src/sap/ui/model/type/DateTime.js +1 -1
  294. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  295. package/src/sap/ui/model/type/FileSize.js +1 -1
  296. package/src/sap/ui/model/type/Float.js +1 -1
  297. package/src/sap/ui/model/type/Integer.js +1 -1
  298. package/src/sap/ui/model/type/String.js +1 -1
  299. package/src/sap/ui/model/type/Time.js +1 -1
  300. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  301. package/src/sap/ui/model/type/Unit.js +1 -1
  302. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  303. package/src/sap/ui/performance/trace/FESR.js +1 -1
  304. package/src/sap/ui/qunit/qunit-coverage-istanbul.js +1 -1
  305. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  306. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  307. package/src/sap/ui/test/OpaPlugin.js +36 -12
  308. package/src/sap/ui/test/generic/TestBase.js +1 -1
  309. package/src/sap/ui/test/starter/_utils.js +18 -3
  310. package/src/sap/ui/util/Storage.js +1 -1
  311. package/src/ui5loader-autoconfig.js +0 -25
  312. package/test/sap/ui/core/BindableResponseHeaders.html +5 -6
  313. package/test/sap/ui/core/ComponentCleanup.html +46 -46
  314. package/test/sap/ui/core/ComponentManifestFirst.html +26 -20
  315. package/test/sap/ui/core/ContextMenuSupport.html +9 -10
  316. package/test/sap/ui/core/DesigntimeOverview.html +1 -1
  317. package/test/sap/ui/core/EventBroadcaster.html +2 -2
  318. package/test/sap/ui/core/FieldGroup.html +70 -61
  319. package/test/sap/ui/core/GenericEventBinding.html +26 -23
  320. package/test/sap/ui/core/HTMLControl.html +46 -38
  321. package/test/sap/ui/core/HTMLSanitizer.html +70 -45
  322. package/test/sap/ui/core/IntervalTrigger.html +22 -21
  323. package/test/sap/ui/core/InvisibleControls.html +72 -72
  324. package/test/sap/ui/core/InvisibleText.html +2 -2
  325. package/test/sap/ui/core/LRUPersistentCache.html +19 -18
  326. package/test/sap/ui/core/LabelEnablement.html +18 -29
  327. package/test/sap/ui/core/Localization.html +40 -65
  328. package/test/sap/ui/core/Localization_HeapUsage.html +11 -12
  329. package/test/sap/ui/core/ManagedObjectModel.html +6 -7
  330. package/test/sap/ui/core/ODataAnnotationsPerformance.html +592 -602
  331. package/test/sap/ui/core/ODataV2CanonicalRequests.html +16 -13
  332. package/test/sap/ui/core/ODataV2Messages.html +15 -12
  333. package/test/sap/ui/core/ODataV2MessagesPerf.html +156 -132
  334. package/test/sap/ui/core/Popup.html +18 -14
  335. package/test/sap/ui/core/PopupWithUserSelection.html +4 -4
  336. package/test/sap/ui/core/StashedControlSupport.html +1 -1
  337. package/test/sap/ui/core/ThemeParameters.html +32 -20
  338. package/test/sap/ui/core/ValidateURL.html +109 -75
  339. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/ui5.yaml +1 -1
  340. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/iStartMyAppInAFrame.html +2 -1
  341. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/iStartMyAppInAFrame.js +2 -12
  342. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Component.js +1 -4
  343. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Detail.controller.js +0 -1
  344. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Main.controller.js +0 -1
  345. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Opa.qunit.html +0 -1
  346. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/extension/Component.js +1 -5
  347. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/manifest.json +2 -10
  348. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/Component.js +4 -1
  349. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/manifest.json +37 -0
  350. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/Component.js +5 -1
  351. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/manifest.json +42 -0
  352. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/Component.js +6 -3
  353. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/Main.view.xml +4 -1
  354. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/manifest.json +49 -0
  355. package/test/sap/ui/core/demokit/sample/common/Controller.js +2 -2
  356. package/test/sap/ui/core/demokit/sample/common/ValueHelp.js +2 -2
  357. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  358. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  359. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  360. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  361. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTime/Component.js +1 -0
  362. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTime/manifest.json +1 -2
  363. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTimeOffset/Component.js +1 -0
  364. package/test/sap/ui/core/demokit/sample/odata/types/v2/DateTimeOffset/manifest.json +1 -2
  365. package/test/sap/ui/core/demokit/sample/odata/types/v2/Time/Component.js +1 -0
  366. package/test/sap/ui/core/demokit/sample/odata/types/v2/Time/manifest.json +1 -2
  367. package/test/sap/ui/core/demokit/sample/odata/types/v4/Date/Component.js +1 -0
  368. package/test/sap/ui/core/demokit/sample/odata/types/v4/Date/manifest.json +1 -2
  369. package/test/sap/ui/core/demokit/sample/odata/types/v4/DateTimeOffset/Component.js +1 -0
  370. package/test/sap/ui/core/demokit/sample/odata/types/v4/DateTimeOffset/manifest.json +1 -2
  371. package/test/sap/ui/core/demokit/sample/odata/types/v4/TimeOfDay/Component.js +1 -0
  372. package/test/sap/ui/core/demokit/sample/odata/types/v4/TimeOfDay/manifest.json +1 -2
  373. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Component.js +1 -0
  374. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Main.controller.js +35 -31
  375. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/manifest.json +1 -10
  376. package/test/sap/ui/core/demokit/sample/odata/v4/ConsumeV2Service/Component.js +1 -0
  377. package/test/sap/ui/core/demokit/sample/odata/v4/ConsumeV2Service/manifest.json +2 -11
  378. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Component.js +1 -0
  379. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.controller.js +71 -68
  380. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/Opa.qunit.html +0 -1
  381. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/manifest.json +3 -11
  382. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Component.js +1 -0
  383. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/Opa.qunit.html +0 -1
  384. package/test/sap/ui/core/demokit/sample/odata/v4/DeepCreate/manifest.json +7 -16
  385. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Component.js +1 -0
  386. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Main.controller.js +3 -3
  387. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/Opa.qunit.html +0 -1
  388. package/test/sap/ui/core/demokit/sample/odata/v4/Draft/manifest.json +1 -10
  389. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Component.js +1 -0
  390. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/FieldGroups.view.xml +0 -1
  391. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/Opa.qunit.html +0 -1
  392. package/test/sap/ui/core/demokit/sample/odata/v4/FieldGroups/manifest.json +3 -11
  393. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/Component.js +1 -0
  394. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.controller.js +46 -43
  395. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.view.xml +12 -10
  396. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/manifest.json +3 -11
  397. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Component.js +1 -0
  398. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Main.controller.js +21 -18
  399. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/Opa.qunit.html +0 -1
  400. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/manifest.json +4 -7
  401. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/Component.js +1 -0
  402. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/SandboxModel.js +6 -6
  403. package/test/sap/ui/core/demokit/sample/odata/v4/GridTable/manifest.json +1 -10
  404. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Component.js +1 -0
  405. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +130 -38
  406. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +35 -43
  407. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/manifest.json +1 -10
  408. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Component.js +1 -0
  409. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Main.controller.js +25 -22
  410. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.html +0 -1
  411. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.OptimisticBatch.qunit.js +5 -4
  412. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Opa.qunit.html +0 -1
  413. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/manifest.json +3 -7
  414. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Component.js +1 -0
  415. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/Opa.qunit.html +0 -1
  416. package/test/sap/ui/core/demokit/sample/odata/v4/ListBinding/manifest.json +3 -11
  417. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Component.js +1 -0
  418. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Opa.qunit.html +0 -1
  419. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/manifest.json +2 -10
  420. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Component.js +1 -0
  421. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +60 -57
  422. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Opa.qunit.html +0 -1
  423. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/manifest.json +4 -6
  424. package/test/sap/ui/core/demokit/sample/odata/v4/MusicArtists/Component.js +1 -0
  425. package/test/sap/ui/core/demokit/sample/odata/v4/MusicArtists/manifest.json +3 -11
  426. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Component.js +1 -0
  427. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Main.view.xml +0 -1
  428. package/test/sap/ui/core/demokit/sample/odata/v4/Products/Opa.qunit.html +0 -1
  429. package/test/sap/ui/core/demokit/sample/odata/v4/Products/manifest.json +3 -10
  430. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/Component.js +1 -0
  431. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/Opa.qunit.html +0 -1
  432. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +194 -90
  433. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +102 -58
  434. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +135 -39
  435. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/data/metadata.xml +14 -0
  436. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/manifest.json +1 -10
  437. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/pages/Main.js +4 -3
  438. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Component.js +1 -0
  439. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/Opa.qunit.html +0 -1
  440. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V2/manifest.json +2 -11
  441. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Component.js +1 -0
  442. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/Opa.qunit.html +0 -1
  443. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrderTP100_V4/manifest.json +2 -11
  444. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Component.js +19 -2
  445. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Opa.qunit.html +0 -1
  446. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/manifest.json +3 -10
  447. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/tests/CreateRelative.js +1 -8
  448. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Component.js +1 -0
  449. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Main.controller.js +1 -2
  450. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/Opa.qunit.html +0 -1
  451. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersRTATest/manifest.json +6 -5
  452. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Component.js +1 -0
  453. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Opa.qunit.html +0 -1
  454. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/manifest.json +2 -10
  455. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Component.js +1 -0
  456. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Opa.qunit.html +0 -1
  457. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/manifest.json +3 -10
  458. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/Opa.qunit.html +0 -1
  459. package/test/sap/ui/core/demokit/sample/odata/v4/Sticky/manifest.json +3 -11
  460. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  461. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  462. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  463. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  464. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  465. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  466. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  467. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  468. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  469. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  470. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  471. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  472. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  473. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  474. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  475. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  476. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  477. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  478. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  479. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  480. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  481. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  482. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  483. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  484. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  485. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  486. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  487. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  488. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  489. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  490. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  491. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  492. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  493. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  494. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  495. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  496. package/test/sap/ui/core/demokit/tutorial/odatav4/01/Component.js +1 -0
  497. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  498. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/Component.js +1 -0
  499. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/index.html +0 -1
  500. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/localService/mockserver.js +4 -4
  501. package/test/sap/ui/core/demokit/tutorial/odatav4/01/webapp/manifest.json +2 -13
  502. package/test/sap/ui/core/demokit/tutorial/odatav4/02/Component.js +1 -0
  503. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  504. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/Component.js +1 -0
  505. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/index.html +0 -1
  506. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/localService/mockserver.js +4 -4
  507. package/test/sap/ui/core/demokit/tutorial/odatav4/02/webapp/manifest.json +2 -13
  508. package/test/sap/ui/core/demokit/tutorial/odatav4/03/Component.js +1 -0
  509. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  510. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/Component.js +1 -0
  511. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/index.html +0 -1
  512. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/localService/mockserver.js +4 -4
  513. package/test/sap/ui/core/demokit/tutorial/odatav4/03/webapp/manifest.json +2 -13
  514. package/test/sap/ui/core/demokit/tutorial/odatav4/04/Component.js +1 -0
  515. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  516. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/Component.js +1 -0
  517. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/index.html +0 -1
  518. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/localService/mockserver.js +4 -4
  519. package/test/sap/ui/core/demokit/tutorial/odatav4/04/webapp/manifest.json +2 -13
  520. package/test/sap/ui/core/demokit/tutorial/odatav4/05/Component.js +1 -0
  521. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  522. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/Component.js +1 -0
  523. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/index.html +0 -1
  524. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/localService/mockserver.js +4 -4
  525. package/test/sap/ui/core/demokit/tutorial/odatav4/05/webapp/manifest.json +2 -13
  526. package/test/sap/ui/core/demokit/tutorial/odatav4/06/Component.js +1 -0
  527. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  528. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/Component.js +1 -0
  529. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/index.html +0 -1
  530. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/localService/mockserver.js +4 -4
  531. package/test/sap/ui/core/demokit/tutorial/odatav4/06/webapp/manifest.json +2 -13
  532. package/test/sap/ui/core/demokit/tutorial/odatav4/07/Component.js +1 -0
  533. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  534. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/Component.js +1 -0
  535. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/index.html +0 -1
  536. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/localService/mockserver.js +4 -4
  537. package/test/sap/ui/core/demokit/tutorial/odatav4/07/webapp/manifest.json +2 -13
  538. package/test/sap/ui/core/demokit/tutorial/odatav4/08/Component.js +1 -0
  539. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  540. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/Component.js +1 -0
  541. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/index.html +0 -1
  542. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/localService/mockserver.js +4 -4
  543. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/manifest.json +2 -13
  544. package/test/sap/ui/core/demokit/tutorial/odatav4/08/webapp/test/integration/opaTests.qunit.html +0 -1
  545. package/test/sap/ui/core/demokit/tutorial/odatav4/09/Component.js +1 -0
  546. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  547. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/Component.js +1 -0
  548. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/index.html +0 -1
  549. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/localService/mockserver.js +4 -4
  550. package/test/sap/ui/core/demokit/tutorial/odatav4/09/webapp/manifest.json +2 -11
  551. package/test/sap/ui/core/demokit/tutorial/odatav4/10/Component.js +1 -0
  552. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  553. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/Component.js +1 -0
  554. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/index.html +0 -1
  555. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/localService/mockserver.js +4 -4
  556. package/test/sap/ui/core/demokit/tutorial/odatav4/10/webapp/manifest.json +2 -11
  557. package/test/sap/ui/core/demokit/tutorial/odatav4/11/Component.js +1 -0
  558. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  559. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/Component.js +1 -0
  560. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/index.html +0 -1
  561. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/localService/mockserver.js +4 -4
  562. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/manifest.json +2 -11
  563. package/test/sap/ui/core/demokit/tutorial/odatav4/11/webapp/test/integration/opaTests.qunit.html +0 -1
  564. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  565. package/test/sap/ui/core/getComputedStyle.html +2 -1
  566. package/test/sap/ui/core/getComputedStyleFF.html +1 -1
  567. package/test/sap/ui/core/internal/samples/client/MusicCollection/Component.js +5 -8
  568. package/test/sap/ui/core/internal/samples/client/MusicCollection/Main.controller.js +6 -2
  569. package/test/sap/ui/core/internal/samples/client/MusicCollection/Main.view.xml +7 -3
  570. package/test/sap/ui/core/internal/samples/client/MusicCollection/index.html +1 -3
  571. package/test/sap/ui/core/internal/samples/client/MusicCollection/manifest.json +1 -13
  572. package/test/sap/ui/core/internal/samples/odata/twoFields/Component.js +3 -45
  573. package/test/sap/ui/core/internal/samples/odata/twoFields/Main.controller.js +37 -1
  574. package/test/sap/ui/core/internal/samples/odata/twoFields/Main.view.xml +5 -5
  575. package/test/sap/ui/core/internal/samples/odata/twoFields/Opa.qunit.html +1 -3
  576. package/test/sap/ui/core/internal/samples/odata/twoFields/index.html +1 -3
  577. package/test/sap/ui/core/internal/samples/odata/twoFields/manifest.json +1 -11
  578. package/test/sap/ui/core/internal/samples/odata/v2/Products/Component.js +3 -22
  579. package/test/sap/ui/core/internal/samples/odata/v2/Products/Main.controller.js +16 -22
  580. package/test/sap/ui/core/internal/samples/odata/v2/Products/Main.view.xml +3 -2
  581. package/test/sap/ui/core/internal/samples/odata/v2/Products/SandboxModel.js +1 -1
  582. package/test/sap/ui/core/internal/samples/odata/v2/Products/index.html +1 -3
  583. package/test/sap/ui/core/internal/samples/odata/v2/Products/manifest.json +2 -13
  584. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Component.js +1 -0
  585. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.controller.js +49 -41
  586. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.view.xml +6 -4
  587. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/manifest.json +3 -12
  588. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Component.js +1 -0
  589. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.controller.js +2 -2
  590. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/Main.view.xml +7 -6
  591. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/index.html +1 -3
  592. package/test/sap/ui/core/internal/samples/odata/v2/TreeTable/manifest.json +1 -11
  593. package/test/sap/ui/core/qunit/CommandExecution.qunit.js +96 -92
  594. package/test/sap/ui/core/qunit/Fragment.qunit.js +20 -20
  595. package/test/sap/ui/core/qunit/Fragment_legacyAPIs.qunit.js +4 -4
  596. package/test/sap/ui/core/qunit/Icon.qunit.js +217 -1
  597. package/test/sap/ui/core/qunit/ManagedObjectModel.qunit.js +24 -0
  598. package/test/sap/ui/core/qunit/RenderManager.qunit.js +18 -5
  599. package/test/sap/ui/core/qunit/ScrollBar.qunit.js +15 -18
  600. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +80 -0
  601. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +1 -0
  602. package/test/sap/ui/core/qunit/analytics/AnalyticalBinding.qunit.js +6 -14
  603. package/test/sap/ui/core/qunit/app/testsuite.app.qunit.js +2 -1
  604. package/test/sap/ui/core/qunit/base/Config.qunit.js +117 -114
  605. package/test/sap/ui/core/qunit/base/Config_bootstrap.qunit.html +3 -3
  606. package/test/sap/ui/core/qunit/base/Config_bootstrap.qunit.js +98 -95
  607. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +20 -45
  608. package/test/sap/ui/core/qunit/base/Config_global.qunit.html +2 -2
  609. package/test/sap/ui/core/qunit/base/Config_meta.qunit.html +2 -2
  610. package/test/sap/ui/core/qunit/base/Config_noUrl.qunit.html +2 -2
  611. package/test/sap/ui/core/qunit/base/Config_noUrl.qunit.js +17 -16
  612. package/test/sap/ui/core/qunit/base/Config_url.qunit.html +2 -2
  613. package/test/sap/ui/core/qunit/bootstrap/BootstrapMainModule.beforeBootstrap.js +6 -0
  614. package/test/sap/ui/core/qunit/bootstrap/BootstrapMainModule.qunit.js +4 -4
  615. package/test/sap/ui/core/qunit/bootstrap/BootstrapMinimal.qunit.js +30 -10
  616. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +5 -1
  617. package/test/sap/ui/core/qunit/component/Customizing.qunit.js +2 -2
  618. package/test/sap/ui/core/qunit/component/Customizing_async.qunit.js +36 -1
  619. package/test/sap/ui/core/qunit/component/ExtensionPoint.qunit.js +475 -290
  620. package/test/sap/ui/core/qunit/component/Models.qunit.js +0 -70
  621. package/test/sap/ui/core/qunit/component/Models_unavoidablySync.qunit.js +86 -0
  622. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +86 -1
  623. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/EP_In_Product_Table_Cell_Found.fragment.xml +5 -0
  624. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/EP_In_Product_Table_Column.fragment.xml +5 -0
  625. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/EPinNestedView.view.xml +51 -0
  626. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/ExtensionPointProvider.js +27 -4
  627. package/test/sap/ui/core/qunit/component/testdata/customizing/customer/ext/Main.view.xml +5 -0
  628. package/test/sap/ui/core/qunit/component/testdata/customizing/sap/Main.view.xml +0 -1
  629. package/test/sap/ui/core/qunit/component/testdata/customizing/sap/Sub2.view.xml +1 -3
  630. package/test/sap/ui/core/qunit/dnd/DragAndDrop.qunit.js +231 -5
  631. package/test/sap/ui/core/qunit/dnd/DropInfo.qunit.js +14 -2
  632. package/test/sap/ui/core/qunit/fieldhelp/FieldHelp.qunit.js +1146 -0
  633. package/test/sap/ui/core/qunit/fieldhelp/FieldHelpUtil.qunit.js +55 -0
  634. package/test/sap/ui/core/qunit/fieldhelp/testsuite.fieldhelp.qunit.html +12 -0
  635. package/test/sap/ui/core/qunit/fieldhelp/testsuite.fieldhelp.qunit.js +50 -0
  636. package/test/sap/ui/core/qunit/generic/ControlRenderer.qunit.js +4 -1
  637. package/test/sap/ui/core/qunit/generic/legacy/ControlRenderer.qunit.js +4 -0
  638. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.html +1 -1
  639. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +6 -0
  640. package/test/sap/ui/core/qunit/internal/testsuite.feature-odata-v4.qunit.js +1 -1
  641. package/test/sap/ui/core/qunit/jquery-mobile-custom.beforeBootstrap.js +11 -0
  642. package/test/sap/ui/core/qunit/jquery-mobile-custom.qunit.js +3 -3
  643. package/test/sap/ui/core/qunit/loader/amd/base_tag/_launchTest.js +2 -4
  644. package/test/sap/ui/core/qunit/loader/amd/config_paths/_launchTest.js +2 -4
  645. package/test/sap/ui/core/qunit/loader/amd/config_paths_relative/_launchTest.js +2 -4
  646. package/test/sap/ui/core/qunit/loader/amdAPIs.qunit.js +3 -0
  647. package/test/sap/ui/core/qunit/loader/asyncMode.qunit.js +2 -6
  648. package/test/sap/ui/core/qunit/loader/config.qunit.js +41 -2
  649. package/test/sap/ui/core/qunit/model/Binding.qunit.js +13 -0
  650. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +2 -2
  651. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorAsync.qunit.js +8 -6
  652. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +7 -7
  653. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +131 -22
  654. package/test/sap/ui/core/qunit/mvc/testdata/Async.view.xml +1 -2
  655. package/test/sap/ui/core/qunit/mvc/testdata/asyncHooks.view.xml +1 -3
  656. package/test/sap/ui/core/qunit/mvc/testdata/cache.view.xml +1 -1
  657. package/test/sap/ui/core/qunit/mvc/testdata/legacy/test.view.xml +32 -0
  658. package/test/sap/ui/core/qunit/mvc/testdata/test.view.xml +2 -15
  659. package/test/sap/ui/core/qunit/mvc/testsuite.mvc.qunit.js +9 -4
  660. package/test/sap/ui/core/qunit/odata/ODataUtils.qunit.js +5 -12
  661. package/test/sap/ui/core/qunit/odata/type/testsuite.odata.types.qunit.js +1 -0
  662. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +285 -12
  663. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +55 -6
  664. package/test/sap/ui/core/qunit/odata/v2/data/ZUI5_GWSAMPLE_BASIC.metadata.xml +18 -0
  665. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +118 -61
  666. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +17 -17
  667. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +559 -74
  668. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +42 -42
  669. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +2695 -97
  670. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +125 -12
  671. package/test/sap/ui/core/qunit/odata/v4/ODataModel.realOData.qunit.js +7 -6
  672. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +12 -13
  673. package/test/sap/ui/core/qunit/odata/v4/_AnnotationHelperExpression.qunit.js +3 -3
  674. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +796 -110
  675. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +102 -2
  676. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +48 -57
  677. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +141 -33
  678. package/test/sap/ui/core/qunit/odata/v4/lib/_MetadataRequestor.qunit.js +2 -2
  679. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +175 -69
  680. package/test/sap/ui/core/qunit/odata/v4/lib/_V2Requestor.qunit.js +3 -3
  681. package/test/sap/ui/core/qunit/odata/v4/testsuite.odatav4.qunit.js +1 -1
  682. package/test/sap/ui/core/qunit/resource/ResourceBinding.qunit.js +17 -14
  683. package/test/sap/ui/core/qunit/routing/async/Views.qunit.js +3 -0
  684. package/test/sap/ui/core/qunit/rule/testsuite.rule.qunit.js +6 -1
  685. package/test/sap/ui/core/qunit/test/starter/find/main.js +6 -4
  686. package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib4/themes/sap_horizon_hcb/library.css +2 -0
  687. package/test/sap/ui/core/qunit/testdata/routing/HistoryIFrame.html +2 -1
  688. package/test/sap/ui/core/qunit/testsuite.qunit.js +1 -0
  689. package/test/sap/ui/core/qunit/testsuites/testsuite.browser.runtime.qunit.js +5 -1
  690. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +4 -1
  691. package/test/sap/ui/core/qunit/ui/Device.qunit.js +92 -25
  692. package/test/sap/ui/core/qunit/ui5classes/ManagedObjectMetadata.qunit.js +3 -0
  693. package/test/sap/ui/core/qunit/util/LabelEnablement.qunit.js +47 -1
  694. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +20 -20
  695. package/test/sap/ui/core/relnotes/changes-1.124.json +1 -66
  696. package/test/sap/ui/core/relnotes/changes-1.125.json +32 -0
  697. package/test/sap/ui/core/relnotes/changes-1.126.json +47 -0
  698. package/test/sap/ui/core/samples/ResponsiveDemo.html +97 -103
  699. package/test/sap/ui/core/samples/databinding/UnitTable/ui5.yaml +1 -1
  700. package/test/sap/ui/core/samples/draganddrop/DragAndDrop.html +2 -2
  701. package/test/sap/ui/core/samples/mvc/Product.html +1 -7
  702. package/test/sap/ui/core/samples/mvc/ViewPreprocessor.html +20 -12
  703. package/test/sap/ui/core/samples/mvc/XMLView.html +77 -24
  704. package/test/sap/ui/core/samples/mvc/XMLViewAsync.html +13 -19
  705. package/test/sap/ui/core/samples/mvc/controller/Async.controller.js +0 -1
  706. package/test/sap/ui/core/samples/mvc/controller/Product.controller.js +0 -1
  707. package/test/sap/ui/core/samples/mvc/views/Async.view.xml +16 -57
  708. package/test/sap/ui/core/samples/mvc/views/Dummy.fragment.xml +2 -2
  709. package/test/sap/ui/core/samples/mvc/views/Dummy.view.xml +2 -2
  710. package/test/sap/ui/core/samples/mvc/views/Product.view.xml +16 -57
  711. package/test/sap/ui/core/util/PasteHelper.html +148 -147
  712. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/firstItem-contextMenu.ref.lnk +1 -1
  713. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/initial.ref.lnk +1 -1
  714. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/lastItem-contextMenu.ref.lnk +1 -1
  715. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/leftDownBtn-contextMenu.ref.lnk +1 -1
  716. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/myButtonSample-contextMenu.ref.lnk +1 -1
  717. package/test/sap/ui/core/visual/images/ContextMenuSupport/windows/1600x1200/chrome/horizon/ltr/cozy/rightDownBtn-contextMenu.ref.lnk +1 -1
  718. package/test/testsuite/js/settings.js +5 -4
  719. package/test/testsuite/styles/main.css +5 -0
  720. package/test/sap/ui/core/ResourceRoots.html +0 -28
  721. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/component.json +0 -17
  722. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/component.json +0 -18
  723. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/component.json +0 -30
  724. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/AutoExpand.view.xml +0 -52
  725. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/Component.js +0 -30
  726. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/Sandbox.js +0 -51
  727. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L0_top5.json +0 -32
  728. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_A_skip8.json +0 -138
  729. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_B.json +0 -17
  730. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_C.json +0 -17
  731. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/Items_L1_top8.json +0 -93
  732. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/data/metadata.xml +0 -2322
  733. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/i18n/i18n.properties +0 -3
  734. package/test/sap/ui/core/demokit/sample/odata/v2/AutoExpand/manifest.json +0 -69
@@ -2467,7 +2467,7 @@ sap.ui.define([
2467
2467
  this.mock(this.oModel).expects("resolve").exactly(oFixture.newContext ? 1 : 0)
2468
2468
  .withExactArgs(oBinding.sPath, sinon.match.same(oContext))
2469
2469
  .returns("/bar/Suppliers");
2470
- this.mock(oOldHeaderContext).expects("setSelected").exactly(oFixture.newContext ? 1 : 0)
2470
+ this.mock(oOldHeaderContext).expects("doSetSelected").exactly(oFixture.newContext ? 1 : 0)
2471
2471
  .withExactArgs(false);
2472
2472
  this.mock(Context).expects("create").exactly(oFixture.newContext ? 1 : 0)
2473
2473
  .withExactArgs(sinon.match.same(this.oModel), sinon.match.same(oBinding),
@@ -2508,7 +2508,7 @@ sap.ui.define([
2508
2508
  oContext = {
2509
2509
  getBinding : function () {}
2510
2510
  },
2511
- oParentBinding = {
2511
+ oParentBinding0 = {
2512
2512
  isRootBindingSuspended : function () {}
2513
2513
  };
2514
2514
 
@@ -2524,8 +2524,8 @@ sap.ui.define([
2524
2524
  .withExactArgs(sinon.match.same(this.oModel), sinon.match.same(oBinding),
2525
2525
  "/resolved/path")
2526
2526
  .returns("~headerContext~");
2527
- this.mock(oContext).expects("getBinding").withExactArgs().returns(oParentBinding);
2528
- this.mock(oParentBinding).expects("isRootBindingSuspended").withExactArgs().returns(true);
2527
+ this.mock(oContext).expects("getBinding").withExactArgs().returns(oParentBinding0);
2528
+ this.mock(oParentBinding0).expects("isRootBindingSuspended").withExactArgs().returns(true);
2529
2529
  this.mock(Binding.prototype).expects("setContext").never();
2530
2530
  this.mock(oBinding).expects("setResumeChangeReason").withExactArgs(ChangeReason.Context);
2531
2531
 
@@ -2745,8 +2745,7 @@ sap.ui.define([
2745
2745
  aCreatedContexts,
2746
2746
  aPromises = [],
2747
2747
  oReadPromise = Promise.reject(oError),
2748
- that = this,
2749
- i;
2748
+ that = this;
2750
2749
 
2751
2750
  function getPath(i) {
2752
2751
  return "/EMPLOYEES/" + i;
@@ -2759,7 +2758,7 @@ sap.ui.define([
2759
2758
  oBinding.mPreviousContextsByPath = {
2760
2759
  "/EMPLOYEES/99" : 99 // not parked by #reset
2761
2760
  };
2762
- for (i = 0; i < oBinding.iCreatedContexts; i += 1) {
2761
+ for (let i = 0; i < oBinding.iCreatedContexts; i += 1) {
2763
2762
  oBinding.aContexts[i] = { // dummy for a created context
2764
2763
  // for simplicity, ignore bRelative here
2765
2764
  getPath : getPath.bind(null, i)
@@ -2830,7 +2829,7 @@ sap.ui.define([
2830
2829
  oBinding.iCreatedContexts = 0;
2831
2830
  oBinding.aContexts = ["a", "b", "c"];
2832
2831
  if (bKeepCacheOnError) {
2833
- for (i = 0; i < oBinding.iCreatedContexts; i += 1) {
2832
+ for (let i = 0; i < oBinding.iCreatedContexts; i += 1) {
2834
2833
  oBinding.mPreviousContextsByPath[getPath(i)] = i;
2835
2834
  }
2836
2835
  }
@@ -3160,7 +3159,7 @@ sap.ui.define([
3160
3159
  };
3161
3160
  this.mock(oBinding).expects("lockGroup").withExactArgs("myGroup").returns("~groupLock~");
3162
3161
  oRefreshKeptElementsCall = this.mock(oNewCache).expects("refreshKeptElements")
3163
- .withExactArgs("~groupLock~", sinon.match.func, false, "~bIgnorePendingChanges~")
3162
+ .withExactArgs("~groupLock~", sinon.match.func, "~bIgnorePendingChanges~")
3164
3163
  .returns(bFail
3165
3164
  ? SyncPromise.reject(oError)
3166
3165
  : SyncPromise.resolve("~result~"));
@@ -3398,7 +3397,8 @@ sap.ui.define([
3398
3397
  "DataStateChange",
3399
3398
  "patchCompleted",
3400
3399
  "patchSent",
3401
- "refresh"
3400
+ "refresh",
3401
+ "selectionChanged"
3402
3402
  ].forEach(function (sEvent) {
3403
3403
  oBindingMock.expects("attachEvent")
3404
3404
  .withExactArgs(sEvent, sinon.match.same(mEventParameters)).returns(oReturn);
@@ -4146,17 +4146,16 @@ sap.ui.define([
4146
4146
  QUnit.test(sTitle, function (assert) {
4147
4147
  var oBinding = this.bindList("/EMPLOYEES", {/*oContext*/}),
4148
4148
  aContexts = [
4149
- {setSelected : mustBeMocked},
4150
- {setSelected : mustBeMocked},
4151
- {setSelected : mustBeMocked}
4149
+ {doSetSelected : mustBeMocked},
4150
+ {doSetSelected : mustBeMocked},
4151
+ {doSetSelected : mustBeMocked}
4152
4152
  ],
4153
4153
  oContextMock = this.mock(Context),
4154
- i,
4155
4154
  sPath,
4156
4155
  aResults = [
4157
- {setSelected : mustBeMocked},
4158
- {setSelected : mustBeMocked},
4159
- {setSelected : mustBeMocked}
4156
+ {doSetSelected : mustBeMocked},
4157
+ {doSetSelected : mustBeMocked},
4158
+ {doSetSelected : mustBeMocked}
4160
4159
  ],
4161
4160
  iServerIndex,
4162
4161
  iStart = 2;
@@ -4172,7 +4171,7 @@ sap.ui.define([
4172
4171
  }
4173
4172
  this.mock(oBinding).expects("getResolvedPath").twice().withExactArgs()
4174
4173
  .returns("~resolved~");
4175
- for (i = iStart; i < iStart + aResults.length; i += 1) {
4174
+ for (let i = iStart; i < iStart + aResults.length; i += 1) {
4176
4175
  iServerIndex = bCreated ? i - 1 : i;
4177
4176
  sPath = "~resolved~" + (bUsePredicates
4178
4177
  ? _Helper.getPrivateAnnotation(aResults[i - iStart], "predicate")
@@ -4181,7 +4180,7 @@ sap.ui.define([
4181
4180
  .withExactArgs(sinon.match.same(this.oModel), sinon.match.same(oBinding),
4182
4181
  sPath, iServerIndex)
4183
4182
  .returns(aContexts[i - iStart]);
4184
- this.mock(aContexts[i - iStart]).expects("setSelected")
4183
+ this.mock(aContexts[i - iStart]).expects("doSetSelected")
4185
4184
  .withExactArgs("~selected~");
4186
4185
  }
4187
4186
  this.mock(oBinding.oHeaderContext).expects("isSelected").exactly(aContexts.length)
@@ -4190,7 +4189,7 @@ sap.ui.define([
4190
4189
  // code under test
4191
4190
  assert.strictEqual(oBinding.createContexts(iStart, aResults), true);
4192
4191
 
4193
- for (i = iStart; i < iStart + aResults.length; i += 1) {
4192
+ for (let i = iStart; i < iStart + aResults.length; i += 1) {
4194
4193
  assert.strictEqual(oBinding.aContexts[i], aContexts[i - iStart]);
4195
4194
  }
4196
4195
 
@@ -4341,7 +4340,7 @@ sap.ui.define([
4341
4340
  var oBinding = this.bindList("/EMPLOYEES", {/*oContext*/}),
4342
4341
  oContext1 = Context.create(this.oModel, oBinding, "/EMPLOYEES/1", 1),
4343
4342
  oContext2 = Context.create(this.oModel, oBinding, "/EMPLOYEES/2", 2),
4344
- oContext3 = {setSelected : mustBeMocked},
4343
+ oContext3 = {doSetSelected : mustBeMocked},
4345
4344
  oContextMock = this.mock(Context);
4346
4345
 
4347
4346
  oBinding.mPreviousContextsByPath = {
@@ -4357,7 +4356,7 @@ sap.ui.define([
4357
4356
  .returns(oContext3);
4358
4357
  this.mock(oBinding.oHeaderContext).expects("isSelected")
4359
4358
  .withExactArgs().returns("~selected~");
4360
- this.mock(oContext3).expects("setSelected").withExactArgs("~selected~");
4359
+ this.mock(oContext3).expects("doSetSelected").withExactArgs("~selected~");
4361
4360
  this.mock(this.oModel).expects("addPrerenderingTask")
4362
4361
  .withExactArgs(sinon.match.func).callsArg(0);
4363
4362
  this.mock(oBinding).expects("destroyPreviousContexts").withExactArgs(["/EMPLOYEES/0"]);
@@ -4448,7 +4447,7 @@ sap.ui.define([
4448
4447
  var oBinding = this.bindList("/EMPLOYEES"),
4449
4448
  oCreatedContext = Context.create(this.oModel, oBinding, "/EMPLOYEES('1')", -1,
4450
4449
  SyncPromise.resolve()),
4451
- oNewContext = {setSelected : mustBeMocked};
4450
+ oNewContext = {doSetSelected : mustBeMocked};
4452
4451
 
4453
4452
  oBinding.mPreviousContextsByPath = {
4454
4453
  "/EMPLOYEES('1')" : oCreatedContext
@@ -4460,11 +4459,12 @@ sap.ui.define([
4460
4459
  .returns(oNewContext);
4461
4460
  this.mock(oBinding.oHeaderContext).expects("isSelected")
4462
4461
  .withExactArgs().returns("~selected~");
4463
- this.mock(oNewContext).expects("setSelected").withExactArgs("~selected~");
4462
+ this.mock(oNewContext).expects("doSetSelected").withExactArgs("~selected~");
4464
4463
  this.mock(this.oModel).expects("addPrerenderingTask")
4465
4464
  .withExactArgs(sinon.match.func).callsArg(0);
4466
4465
  this.mock(oCreatedContext).expects("destroy").withExactArgs();
4467
4466
 
4467
+ // code under test
4468
4468
  oBinding.createContexts(0, [{
4469
4469
  "@$ui5._" : {predicate : "('1')"}
4470
4470
  }]);
@@ -4967,7 +4967,7 @@ sap.ui.define([
4967
4967
  oCreateInCacheExpectation.args[0][6](oError);
4968
4968
 
4969
4969
  oSetSelectedExpectation = this.mock(oContext0).expects("doSetSelected")
4970
- .withExactArgs(false);
4970
+ .withExactArgs(false, true);
4971
4971
  oRemoveCreatedExpectation = oBindingMock.expects("removeCreated")
4972
4972
  .withExactArgs(sinon.match.same(oContext0));
4973
4973
 
@@ -5487,14 +5487,14 @@ sap.ui.define([
5487
5487
  created : function () {},
5488
5488
  fetchValue : function () {},
5489
5489
  getPath : function () {},
5490
- setSelected : mustBeMocked,
5490
+ doSetSelected : mustBeMocked,
5491
5491
  updateAfterCreate : function () {}
5492
5492
  },
5493
5493
  oNewContext1 = {
5494
5494
  created : function () {},
5495
5495
  fetchValue : function () {},
5496
5496
  getPath : function () {},
5497
- setSelected : mustBeMocked,
5497
+ doSetSelected : mustBeMocked,
5498
5498
  updateAfterCreate : function () {}
5499
5499
  },
5500
5500
  bNotAllowed = aAtEnd[0] && !aAtEnd[1],
@@ -5529,7 +5529,7 @@ sap.ui.define([
5529
5529
  });
5530
5530
  this.mock(oBinding.oHeaderContext).expects("isSelected").exactly(bNotAllowed ? 1 : 2)
5531
5531
  .withExactArgs().returns("~selected~");
5532
- this.mock(oNewContext0).expects("setSelected").withExactArgs("~selected~");
5532
+ this.mock(oNewContext0).expects("doSetSelected").withExactArgs("~selected~");
5533
5533
  this.mock(oNewContext0).expects("created").exactly(bTransient ? 1 : 0)
5534
5534
  .withExactArgs()
5535
5535
  .callsFake(function () {
@@ -5582,7 +5582,7 @@ sap.ui.define([
5582
5582
  oNewContext1.oCreatedPromise = Promise.resolve(arguments[4]);
5583
5583
  return oNewContext1;
5584
5584
  });
5585
- this.mock(oNewContext1).expects("setSelected").withExactArgs("~selected~");
5585
+ this.mock(oNewContext1).expects("doSetSelected").withExactArgs("~selected~");
5586
5586
  this.mock(oNewContext1).expects("created").exactly(bTransient ? 1 : 0)
5587
5587
  .withExactArgs()
5588
5588
  .callsFake(function () {
@@ -5650,7 +5650,7 @@ sap.ui.define([
5650
5650
  created : function () {},
5651
5651
  fetchValue : function () {},
5652
5652
  getPath : function () { return ""; },
5653
- setSelected : mustBeMocked,
5653
+ doSetSelected : mustBeMocked,
5654
5654
  refreshDependentBindings : function () {}
5655
5655
  };
5656
5656
 
@@ -5670,7 +5670,7 @@ sap.ui.define([
5670
5670
  .returns(oNewContext);
5671
5671
  this.mock(oBinding.oHeaderContext).expects("isSelected")
5672
5672
  .withExactArgs().returns("~selected~");
5673
- this.mock(oNewContext).expects("setSelected").withExactArgs("~selected~");
5673
+ this.mock(oNewContext).expects("doSetSelected").withExactArgs("~selected~");
5674
5674
  this.mock(oNewContext).expects("fetchValue").withExactArgs().resolves(undefined);
5675
5675
  this.mock(_Helper).expects("setPrivateAnnotation").never();
5676
5676
 
@@ -5805,7 +5805,7 @@ sap.ui.define([
5805
5805
  // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
5806
5806
  // too far :-(
5807
5807
  oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
5808
- oBinding.iMaxLength = 42;
5808
+ oBinding.oCache = {isRefreshNeededAfterCreate : mustBeMocked};
5809
5809
  this.mock(oBinding).expects("fetchResourcePath").withExactArgs()
5810
5810
  .returns("~oCreatePathPromise~");
5811
5811
  this.mock(oBinding).expects("getUpdateGroupId").withExactArgs()
@@ -5821,9 +5821,10 @@ sap.ui.define([
5821
5821
  this.mock(oBinding).expects("isRelative").never();
5822
5822
  const oParentContext = {
5823
5823
  getCanonicalPath : mustBeMocked,
5824
- isExpanded : mustBeMocked
5824
+ isExpanded : mustBeMocked,
5825
+ iIndex : "~parentIndex~"
5825
5826
  };
5826
- oBinding.aContexts.push("0", "1", oParentContext, {iIndex : 3}, undefined, {iIndex : 5});
5827
+ oBinding.aContexts[2] = oParentContext;
5827
5828
  const oInitialData = {"@$ui5.node.parent" : oParentContext};
5828
5829
  const oEntityData = {};
5829
5830
  this.mock(_Helper).expects("publicClone")
@@ -5831,6 +5832,9 @@ sap.ui.define([
5831
5832
  this.mock(oParentContext).expects("getCanonicalPath").withExactArgs()
5832
5833
  .returns("/canonical/path");
5833
5834
  this.mock(oParentContext).expects("isExpanded").withExactArgs().returns(bExpanded);
5835
+ this.mock(oBinding.oCache).expects("isRefreshNeededAfterCreate")
5836
+ .withExactArgs("~parentIndex~")
5837
+ .returns(false);
5834
5838
  this.mock(oBinding).expects("lockGroup")
5835
5839
  .withExactArgs("~sGroupId~", true, true, sinon.match.func).returns("~oGroupLock~");
5836
5840
  this.mock(oBinding).expects("createInCache")
@@ -5840,7 +5844,7 @@ sap.ui.define([
5840
5844
  .and(sinon.match({"@$ui5.node.parent" : "canonical/path"})),
5841
5845
  false, sinon.match.func, sinon.match.func)
5842
5846
  .returns(SyncPromise.resolve(Promise.resolve("~oCreatedEntity~")));
5843
- const oContext = {fetchValue : mustBeMocked, setSelected : mustBeMocked};
5847
+ const oContext = {fetchValue : mustBeMocked, doSetSelected : mustBeMocked};
5844
5848
  this.mock(Context).expects("create")
5845
5849
  .withExactArgs(sinon.match.same(this.oModel), sinon.match.same(oBinding),
5846
5850
  "~sResolvedPath~($uid=id-1-23)", /*iChildIndex*/3,
@@ -5848,11 +5852,11 @@ sap.ui.define([
5848
5852
  .returns(oContext);
5849
5853
  this.mock(oBinding.oHeaderContext).expects("isSelected")
5850
5854
  .withExactArgs().returns("~selected~");
5851
- this.mock(oContext).expects("setSelected").withExactArgs("~selected~");
5855
+ this.mock(oContext).expects("doSetSelected").withExactArgs("~selected~");
5852
5856
  this.mock(oContext).expects("fetchValue").withExactArgs()
5853
5857
  .returns(SyncPromise.resolve()); //TODO
5854
- this.mock(oBinding).expects("_fireChange")
5855
- .withExactArgs({reason : ChangeReason.Add});
5858
+ this.mock(oBinding).expects("insertContext")
5859
+ .withExactArgs(sinon.match.same(oContext), 3, false);
5856
5860
 
5857
5861
  // code under test
5858
5862
  assert.strictEqual(oBinding.create(oInitialData, true), oContext);
@@ -5860,9 +5864,6 @@ sap.ui.define([
5860
5864
  assert.strictEqual(oBinding.iActiveContexts, 0, "unchanged");
5861
5865
  assert.strictEqual(oBinding.iCreatedContexts, 0, "unchanged");
5862
5866
  assert.strictEqual(oBinding.bFirstCreateAtEnd, false);
5863
- assert.strictEqual(oBinding.iMaxLength, 43);
5864
- assert.deepEqual(oBinding.aContexts,
5865
- ["0", "1", oParentContext, oContext, {iIndex : 4}, undefined, {iIndex : 6}]);
5866
5867
  });
5867
5868
  });
5868
5869
 
@@ -5873,7 +5874,6 @@ sap.ui.define([
5873
5874
  // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
5874
5875
  // too far :-(
5875
5876
  oBinding.mParameters.$$aggregation = {expandTo : 2, hierarchyQualifier : "X"};
5876
- oBinding.iMaxLength = 42;
5877
5877
  this.mock(oBinding).expects("fetchResourcePath").withExactArgs()
5878
5878
  .returns("~oCreatePathPromise~");
5879
5879
  this.mock(oBinding).expects("getUpdateGroupId").withExactArgs()
@@ -5887,7 +5887,6 @@ sap.ui.define([
5887
5887
  this.mock(oBinding).expects("isTransient").twice().withExactArgs().returns(false);
5888
5888
  this.mock(oBinding).expects("checkDeepCreate").never();
5889
5889
  this.mock(oBinding).expects("isRelative").never();
5890
- oBinding.aContexts.push({iIndex : 0}, undefined, {iIndex : 2});
5891
5890
  this.mock(_Helper).expects("publicClone")
5892
5891
  .withExactArgs(sinon.match.same(oInitialData), true).returns("~oEntityData~");
5893
5892
  this.mock(oBinding).expects("lockGroup")
@@ -5897,7 +5896,7 @@ sap.ui.define([
5897
5896
  sinon.match(rTransientPredicate), "~oEntityData~",
5898
5897
  false, sinon.match.func, sinon.match.func)
5899
5898
  .returns(SyncPromise.resolve(Promise.resolve("~oCreatedEntity~")));
5900
- const oContext = {fetchValue : mustBeMocked, setSelected : mustBeMocked};
5899
+ const oContext = {fetchValue : mustBeMocked, doSetSelected : mustBeMocked};
5901
5900
  this.mock(Context).expects("create")
5902
5901
  .withExactArgs(sinon.match.same(this.oModel), sinon.match.same(oBinding),
5903
5902
  "~sResolvedPath~($uid=id-1-23)", /*iChildIndex*/0,
@@ -5905,11 +5904,11 @@ sap.ui.define([
5905
5904
  .returns(oContext);
5906
5905
  this.mock(oBinding.oHeaderContext).expects("isSelected")
5907
5906
  .withExactArgs().returns("~selected~");
5908
- this.mock(oContext).expects("setSelected").withExactArgs("~selected~");
5907
+ this.mock(oContext).expects("doSetSelected").withExactArgs("~selected~");
5909
5908
  this.mock(oContext).expects("fetchValue").withExactArgs()
5910
5909
  .returns(SyncPromise.resolve()); //TODO
5911
- this.mock(oBinding).expects("_fireChange")
5912
- .withExactArgs({reason : ChangeReason.Add});
5910
+ this.mock(oBinding).expects("insertContext")
5911
+ .withExactArgs(sinon.match.same(oContext), 0, false);
5913
5912
 
5914
5913
  // code under test
5915
5914
  assert.strictEqual(oBinding.create(oInitialData, true), oContext);
@@ -5917,9 +5916,125 @@ sap.ui.define([
5917
5916
  assert.strictEqual(oBinding.iActiveContexts, 0, "unchanged");
5918
5917
  assert.strictEqual(oBinding.iCreatedContexts, 0, "unchanged");
5919
5918
  assert.strictEqual(oBinding.bFirstCreateAtEnd, false);
5920
- assert.strictEqual(oBinding.iMaxLength, 43);
5921
- assert.deepEqual(oBinding.aContexts,
5922
- [oContext, {iIndex : 1}, undefined, {iIndex : 3}]);
5919
+ });
5920
+ });
5921
+
5922
+ //*********************************************************************************************
5923
+ [undefined, 42].forEach(function (iRank) {
5924
+ [false, true].forEach(function (bRefresh) {
5925
+ const sTitle = "create: recursive hierarchy, createInPlace, rank=" + iRank
5926
+ + ", refresh=" + bRefresh;
5927
+
5928
+ QUnit.test(sTitle, function (assert) {
5929
+ const oBinding = this.bindList("/EMPLOYEES");
5930
+ // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
5931
+ // too far :-(
5932
+ oBinding.mParameters.$$aggregation = {createInPlace : true, hierarchyQualifier : "X"};
5933
+ oBinding.oCache = {isRefreshNeededAfterCreate : mustBeMocked};
5934
+ this.mock(oBinding).expects("fetchResourcePath").withExactArgs()
5935
+ .returns("~oCreatePathPromise~");
5936
+ this.mock(oBinding).expects("getUpdateGroupId").withExactArgs()
5937
+ .returns("~sGroupId~");
5938
+ this.mock(oBinding).expects("getResolvedPath").withExactArgs()
5939
+ .returns("~sResolvedPath~");
5940
+ const oHelperMock = this.mock(_Helper);
5941
+ oHelperMock.expects("uid").withExactArgs().returns("id-1-23");
5942
+ this.mock(oBinding).expects("checkSuspended").withExactArgs();
5943
+ oHelperMock.expects("isDataAggregation")
5944
+ .withExactArgs(sinon.match.same(oBinding.mParameters)).returns(false);
5945
+ this.mock(oBinding).expects("isTransient").twice().withExactArgs().returns(false);
5946
+ this.mock(oBinding).expects("checkDeepCreate").never();
5947
+ this.mock(oBinding).expects("isRelative").never();
5948
+ const oParentContext = {
5949
+ getCanonicalPath : mustBeMocked,
5950
+ isExpanded : mustBeMocked,
5951
+ iIndex : "~parentIndex~"
5952
+ };
5953
+ oBinding.aContexts[2] = oParentContext;
5954
+ const oInitialData = {"@$ui5.node.parent" : oParentContext};
5955
+ const oEntityData = {};
5956
+ oHelperMock.expects("publicClone").withExactArgs(sinon.match.same(oInitialData), true)
5957
+ .returns(oEntityData);
5958
+ this.mock(oParentContext).expects("getCanonicalPath").withExactArgs()
5959
+ .returns("/canonical/path");
5960
+ this.mock(oParentContext).expects("isExpanded").withExactArgs().returns(undefined);
5961
+ this.mock(oBinding.oCache).expects("isRefreshNeededAfterCreate")
5962
+ .withExactArgs("~parentIndex~")
5963
+ .returns(bRefresh);
5964
+ this.mock(oBinding).expects("lockGroup")
5965
+ .withExactArgs("~sGroupId~", true, true, sinon.match.func).returns("~oGroupLock~");
5966
+ const oContext = {
5967
+ destroy : mustBeMocked,
5968
+ fetchValue : mustBeMocked,
5969
+ doSetSelected : mustBeMocked,
5970
+ updateAfterCreate : mustBeMocked
5971
+ };
5972
+ const oCreatePromise = new SyncPromise((resolve) => {
5973
+ setTimeout(() => {
5974
+ oHelperMock.expects("getPrivateAnnotation")
5975
+ .withExactArgs("~oCreatedEntity~", "predicate")
5976
+ .returns("~sPredicate~");
5977
+ this.mock(oBinding).expects("adjustPredicate")
5978
+ .withExactArgs("($uid=id-1-23)", "~sPredicate~", sinon.match.same(oContext));
5979
+ this.mock(oBinding).expects("fireEvent")
5980
+ .withExactArgs("createCompleted",
5981
+ {context : sinon.match.same(oContext), success : true});
5982
+ oHelperMock.expects("getPrivateAnnotation")
5983
+ .withExactArgs("~oCreatedEntity~", "rank")
5984
+ .returns(iRank);
5985
+ const bUseContext = iRank && !bRefresh;
5986
+ this.mock(oContext).expects("destroy").exactly(bUseContext ? 0 : 1).withExactArgs();
5987
+ this.mock(oBinding).expects("insertContext").exactly(bUseContext ? 1 : 0)
5988
+ .withExactArgs(sinon.match.same(oContext), 42);
5989
+ oHelperMock.expects("getPrivateAnnotation").exactly(bUseContext ? 1 : 0)
5990
+ .withExactArgs("~oCreatedEntity~", "deepCreate").returns(false);
5991
+ oHelperMock.expects("deletePrivateAnnotation").exactly(bUseContext ? 1 : 0)
5992
+ .withExactArgs("~oCreatedEntity~", "deepCreate");
5993
+ this.mock(oBinding).expects("getGroupId").exactly(bUseContext ? 1 : 0)
5994
+ .withExactArgs().returns("~sGroupId~");
5995
+ this.mock(this.oModel).expects("isApiGroup").exactly(bUseContext ? 1 : 0)
5996
+ .withExactArgs("~sGroupId~").returns(false);
5997
+ this.mock(oContext).expects("updateAfterCreate").exactly(bUseContext ? 1 : 0)
5998
+ .withExactArgs(true, "~sGroupId~");
5999
+
6000
+ resolve("~oCreatedEntity~");
6001
+ }, 0);
6002
+ });
6003
+ this.mock(oBinding).expects("createInCache")
6004
+ .withExactArgs("~oGroupLock~", "~oCreatePathPromise~", "~sResolvedPath~",
6005
+ sinon.match(rTransientPredicate), sinon.match.same(oEntityData),
6006
+ false, sinon.match.func, sinon.match.func)
6007
+ .returns(oCreatePromise);
6008
+ this.mock(oBinding).expects("requestSideEffects").exactly(bRefresh ? 1 : 0)
6009
+ .withExactArgs("~sGroupId~", [""])
6010
+ .resolves("~refreshResult~");
6011
+ this.mock(Context).expects("create")
6012
+ .withExactArgs(sinon.match.same(this.oModel), sinon.match.same(oBinding),
6013
+ "~sResolvedPath~($uid=id-1-23)", /*iIndex*/undefined,
6014
+ sinon.match(function (oCreatePromise0) {
6015
+ oCreatePromise0.then(function (vResult) {
6016
+ assert.deepEqual(vResult,
6017
+ // createInCache's oCreatePromise resolves with no defined result
6018
+ bRefresh ? [undefined, "~refreshResult~"] : undefined);
6019
+ });
6020
+ return oCreatePromise0 instanceof SyncPromise;
6021
+ }), undefined)
6022
+ .returns(oContext);
6023
+ this.mock(oBinding.oHeaderContext).expects("isSelected")
6024
+ .withExactArgs().returns("~selected~");
6025
+ this.mock(oContext).expects("doSetSelected").withExactArgs("~selected~");
6026
+ this.mock(oContext).expects("fetchValue").never();
6027
+ this.mock(oBinding).expects("_fireChange").never();
6028
+
6029
+ // code under test
6030
+ assert.strictEqual(oBinding.create(oInitialData, true), oContext);
6031
+
6032
+ assert.strictEqual(oBinding.iActiveContexts, 0, "unchanged");
6033
+ assert.strictEqual(oBinding.iCreatedContexts, 0, "unchanged");
6034
+ assert.strictEqual(oBinding.bFirstCreateAtEnd, false);
6035
+
6036
+ return oCreatePromise;
6037
+ });
5923
6038
  });
5924
6039
  });
5925
6040
 
@@ -6055,7 +6170,7 @@ sap.ui.define([
6055
6170
  oContext.created().catch(function (oError) {
6056
6171
  assert.ok(oError.canceled, "create promise rejected with 'canceled'");
6057
6172
  });
6058
- this.mock(oContext).expects("doSetSelected").withExactArgs(false);
6173
+ this.mock(oContext).expects("doSetSelected").withExactArgs(false, true);
6059
6174
  this.mock(oBinding).expects("removeCreated").withExactArgs(sinon.match.same(oContext))
6060
6175
  .callThrough();
6061
6176
  oBindingMock.expects("deleteFromCache").callsFake(function () {
@@ -8485,11 +8600,11 @@ sap.ui.define([
8485
8600
  function expectVisitAndRefresh(aPromises) {
8486
8601
  that.mock(oBinding).expects("visitSideEffects").withExactArgs(sGroupId,
8487
8602
  sinon.match.same(aPaths), bHeader ? undefined : oContext, aPromises)
8488
- .callsFake(function (_sGroupId, _aPaths, _oContext, aPromises) {
8489
- aPromises.push(Promise.resolve());
8490
- aPromises.push(Promise.reject(oCanceledError));
8603
+ .callsFake(function (_sGroupId, _aPaths, _oContext, aPromises0) {
8604
+ aPromises0.push(Promise.resolve());
8605
+ aPromises0.push(Promise.reject(oCanceledError));
8491
8606
  if (bRecursionRejects) {
8492
- aPromises.push(Promise.reject(oError));
8607
+ aPromises0.push(Promise.reject(oError));
8493
8608
  }
8494
8609
  });
8495
8610
  that.mock(oBinding).expects("refreshDependentListBindingsWithoutCache")
@@ -9563,12 +9678,13 @@ sap.ui.define([
9563
9678
  + ", count=" + iCount + ", silent=" + bSilent;
9564
9679
 
9565
9680
  if (!bSuccess && iCount === 0 || bDataRequested && iCount < 0) {
9566
- return; // ignore useless combinations
9681
+ return; // skip useless combinations
9567
9682
  }
9568
9683
 
9569
9684
  QUnit.test(sTitle, function (assert) {
9570
9685
  var oBinding = this.bindList("/EMPLOYEES"),
9571
9686
  oContext = {
9687
+ iIndex : "~iIndex~",
9572
9688
  getModelIndex : function () {},
9573
9689
  getPath : function () {},
9574
9690
  toString : function () { return "~context~"; }
@@ -9585,6 +9701,7 @@ sap.ui.define([
9585
9701
  oBinding.oCache = { // simulate an aggregation cache
9586
9702
  expand : function () {}
9587
9703
  };
9704
+ oBinding.aContexts["~iIndex~"] = oContext;
9588
9705
 
9589
9706
  this.mock(oBinding).expects("checkSuspended").withExactArgs();
9590
9707
  this.mock(oBinding).expects("lockGroup").withExactArgs().returns(oGroupLock);
@@ -9654,6 +9771,22 @@ sap.ui.define([
9654
9771
  });
9655
9772
  });
9656
9773
 
9774
+ //*********************************************************************************************
9775
+ QUnit.test("expand: Not currently part of the hierarchy", function (assert) {
9776
+ const oBinding = this.bindList("/EMPLOYEES");
9777
+ const oContext = {
9778
+ iIndex : 0,
9779
+ toString : () => "~oContext~"
9780
+ };
9781
+
9782
+ oBinding.aContexts = [, oContext];
9783
+
9784
+ assert.throws(function () {
9785
+ // code under test
9786
+ oBinding.expand(oContext);
9787
+ }, new Error("Not currently part of the hierarchy: ~oContext~"));
9788
+ });
9789
+
9657
9790
  //*********************************************************************************************
9658
9791
  QUnit.test("insertGap", function (assert) {
9659
9792
  const _ = undefined;
@@ -9710,12 +9843,12 @@ sap.ui.define([
9710
9843
  var oBinding = this.bindList("/EMPLOYEES"),
9711
9844
  oCollapseExpectation,
9712
9845
  oContext = {
9846
+ iIndex : "~iIndex~",
9713
9847
  getModelIndex : function () {},
9714
9848
  getPath : function () {}
9715
9849
  },
9716
9850
  aContextsBefore,
9717
- oFireChangeExpectation,
9718
- i;
9851
+ oFireChangeExpectation;
9719
9852
 
9720
9853
  // create a context dummy object with index i
9721
9854
  function createContextDummy(i) {
@@ -9733,10 +9866,11 @@ sap.ui.define([
9733
9866
  oBinding.oCache = { // simulate an aggregation cache
9734
9867
  collapse : function () {}
9735
9868
  };
9736
- for (i = 0; i < 8; i += 1) {
9869
+ for (let i = 0; i < 8; i += 1) {
9737
9870
  // with gap at 6
9738
9871
  oBinding.aContexts.push(i === 6 ? undefined : createContextDummy(i));
9739
9872
  }
9873
+ oBinding.aContexts["~iIndex~"] = oContext;
9740
9874
  oBinding.iMaxLength = 8;
9741
9875
  aContextsBefore = oBinding.aContexts.slice();
9742
9876
  assert.deepEqual(oBinding.mPreviousContextsByPath, {});
@@ -9767,9 +9901,9 @@ sap.ui.define([
9767
9901
  assert.strictEqual(oBinding.aContexts[4], aContextsBefore[7], "4");
9768
9902
  assert.strictEqual(oBinding.aContexts.length, 5);
9769
9903
  assert.strictEqual(oBinding.iMaxLength, 5);
9770
- oBinding.aContexts.forEach(function (oContext, iIndex) {
9904
+ oBinding.aContexts.forEach(function (oContext0, iIndex) {
9771
9905
  if (iIndex !== 3) { // 6 - iCount
9772
- assert.strictEqual(oContext.iIndex, iIndex);
9906
+ assert.strictEqual(oContext0.iIndex, iIndex);
9773
9907
  }
9774
9908
  });
9775
9909
  assert.deepEqual(oBinding.mPreviousContextsByPath, {
@@ -9780,10 +9914,10 @@ sap.ui.define([
9780
9914
  } else {
9781
9915
  assert.strictEqual(oBinding.iMaxLength, 8);
9782
9916
  assert.strictEqual(oBinding.aContexts.length, 8);
9783
- oBinding.aContexts.forEach(function (oContext, iIndex) {
9917
+ oBinding.aContexts.forEach(function (oContext0, iIndex) {
9784
9918
  if (iIndex !== 6) {
9785
- assert.strictEqual(oContext.iIndex, iIndex);
9786
- assert.strictEqual(oContext.getPath(), "/EMPLOYEES/" + iIndex);
9919
+ assert.strictEqual(oContext0.iIndex, iIndex);
9920
+ assert.strictEqual(oContext0.getPath(), "/EMPLOYEES/" + iIndex);
9787
9921
  }
9788
9922
  });
9789
9923
  assert.deepEqual(oBinding.mPreviousContextsByPath, {});
@@ -9793,6 +9927,22 @@ sap.ui.define([
9793
9927
  });
9794
9928
  });
9795
9929
 
9930
+ //*********************************************************************************************
9931
+ QUnit.test("collapse: Not currently part of the hierarchy", function (assert) {
9932
+ const oBinding = this.bindList("/EMPLOYEES");
9933
+ const oContext = {
9934
+ iIndex : 0,
9935
+ toString : () => "~oContext~"
9936
+ };
9937
+
9938
+ oBinding.aContexts = [, oContext];
9939
+
9940
+ assert.throws(function () {
9941
+ // code under test
9942
+ oBinding.collapse(oContext);
9943
+ }, new Error("Not currently part of the hierarchy: ~oContext~"));
9944
+ });
9945
+
9796
9946
  //*********************************************************************************************
9797
9947
  QUnit.test("resetKeepAlive", function () {
9798
9948
  var oBinding = this.bindList("/EMPLOYEES"),
@@ -10427,6 +10577,17 @@ sap.ui.define([
10427
10577
  assert.strictEqual(oBinding.iActiveContexts, 41);
10428
10578
  });
10429
10579
 
10580
+ //*********************************************************************************************
10581
+ QUnit.test("fireSelectionChanged", function () {
10582
+ const oBinding = this.bindList("/EMPLOYEES");
10583
+
10584
+ this.mock(oBinding).expects("fireEvent")
10585
+ .withExactArgs("selectionChanged", {context : "~oContext~"});
10586
+
10587
+ // code under test
10588
+ oBinding.fireSelectionChanged("~oContext~");
10589
+ });
10590
+
10430
10591
  //*********************************************************************************************
10431
10592
  [false, true].forEach(function (bFireChange) {
10432
10593
  QUnit.test("getAllCurrentContexts: bFireChange = " + bFireChange, function (assert) {
@@ -11078,7 +11239,7 @@ sap.ui.define([
11078
11239
  [false, true].forEach((bIsExpanded) => {
11079
11240
  [1, 4].forEach((iCount) => {
11080
11241
  [false, true].forEach((bMakeRoot) => {
11081
- [23, 42, 101, 999].forEach((iNewIndex) => {
11242
+ [23, 42].forEach((iNewIndex) => {
11082
11243
  const sTitle = `move: expanded=${bIsExpanded}, child nodes added=${iCount},
11083
11244
  make root=${bMakeRoot}, new index=${iNewIndex}`;
11084
11245
 
@@ -11104,6 +11265,7 @@ sap.ui.define([
11104
11265
  // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
11105
11266
  // too far :-(
11106
11267
  oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
11268
+ this.mock(oBinding).expects("checkSuspended").withExactArgs();
11107
11269
  this.mock(oBinding).expects("getUpdateGroupId").withExactArgs().returns("~group~");
11108
11270
  this.mock(oBinding).expects("lockGroup").withExactArgs("~group~", true, true)
11109
11271
  .returns("~oGroupLock~");
@@ -11112,7 +11274,7 @@ sap.ui.define([
11112
11274
  };
11113
11275
  oBinding.oCache = oCache;
11114
11276
  this.mock(oCache).expects("move").withExactArgs("~oGroupLock~", "~child~",
11115
- bMakeRoot ? null : "~parent~", undefined, undefined)
11277
+ bMakeRoot ? null : "~parent~", undefined, undefined, undefined)
11116
11278
  .returns({promise : new SyncPromise((resolve) => {
11117
11279
  setTimeout(() => {
11118
11280
  if (oParentContext) {
@@ -11132,6 +11294,10 @@ sap.ui.define([
11132
11294
  this.mock(oChildContext).expects("getModelIndex").withExactArgs()
11133
11295
  .returns(iOldIndex);
11134
11296
  oBinding.aContexts[iOldIndex] = oChildContext;
11297
+ this.mock(_Helper).expects("insert")
11298
+ .withExactArgs(sinon.match.same(oBinding.aContexts), iNewIndex,
11299
+ sinon.match.same(oChildContext))
11300
+ .callThrough(); // needed for "setIndices"
11135
11301
  this.mock(oBinding).expects("expand").exactly(bIsExpanded ? 1 : 0)
11136
11302
  .withExactArgs(sinon.match.same(oChildContext))
11137
11303
  .returns(SyncPromise.resolve());
@@ -11166,7 +11332,13 @@ sap.ui.define([
11166
11332
  //*********************************************************************************************
11167
11333
  [false, true].forEach((bMakeRoot) => {
11168
11334
  [undefined, null, {}].forEach((oSiblingContext) => {
11169
- const sTitle = `move: refresh; make root=${bMakeRoot}, with sibling=${oSiblingContext}`;
11335
+ [false, true].forEach((bUpdateSiblingIndex) => {
11336
+ const sTitle = `move: refresh; make root=${bMakeRoot}, with sibling=${oSiblingContext}`
11337
+ + `, update sibling's index=${bUpdateSiblingIndex}`;
11338
+
11339
+ if (bUpdateSiblingIndex && !oSiblingContext) {
11340
+ return;
11341
+ }
11170
11342
 
11171
11343
  QUnit.test(sTitle, async function (assert) {
11172
11344
  const oChildContext = {
@@ -11187,9 +11359,13 @@ sap.ui.define([
11187
11359
  let sSiblingPath = oSiblingContext;
11188
11360
  if (oSiblingContext) {
11189
11361
  sSiblingPath = "~sibling~";
11362
+ oSiblingContext.iIndex = "~old~";
11190
11363
  oSiblingContext.getCanonicalPath = mustBeMocked;
11364
+ oSiblingContext.isEffectivelyKeptAlive = mustBeMocked;
11191
11365
  this.mock(oSiblingContext).expects("getCanonicalPath").withExactArgs()
11192
11366
  .returns("/~sibling~");
11367
+ this.mock(oSiblingContext).expects("isEffectivelyKeptAlive").withExactArgs()
11368
+ .returns(bUpdateSiblingIndex);
11193
11369
  }
11194
11370
  const oBinding = this.bindList("/EMPLOYEES");
11195
11371
  // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
@@ -11197,6 +11373,7 @@ sap.ui.define([
11197
11373
  oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
11198
11374
  this.mock(oBinding).expects("collapse").never();
11199
11375
  this.mock(oBinding).expects("expand").never();
11376
+ this.mock(oBinding).expects("checkSuspended").withExactArgs();
11200
11377
  this.mock(oBinding).expects("getUpdateGroupId").withExactArgs().returns("~group~");
11201
11378
  this.mock(oBinding).expects("lockGroup").withExactArgs("~group~", true, true)
11202
11379
  .returns("~oGroupLock~");
@@ -11204,15 +11381,16 @@ sap.ui.define([
11204
11381
  move : mustBeMocked
11205
11382
  };
11206
11383
  oBinding.oCache = oCache;
11207
- const fnGetIndex = sinon.stub().returns("~index~");
11384
+ const fnGetIndices = sinon.stub().returns(["~childIndex~", "~siblingIndex~"]);
11208
11385
  this.mock(oCache).expects("move")
11209
11386
  .withExactArgs("~oGroupLock~", "~child~", bMakeRoot ? null : "~parent~", sSiblingPath,
11210
- bHasSibling ? "~childNonCanonical~" : undefined)
11387
+ bHasSibling ? "~childNonCanonical~" : undefined,
11388
+ oSiblingContext ? bUpdateSiblingIndex : undefined)
11211
11389
  .returns({promise : "A", refresh : true});
11212
11390
  this.mock(oBinding).expects("requestSideEffects").withExactArgs("~group~", [""])
11213
11391
  .returns("B");
11214
11392
  this.mock(SyncPromise).expects("all").withExactArgs(["A", "B"])
11215
- .returns(SyncPromise.resolve(Promise.resolve([fnGetIndex])));
11393
+ .returns(SyncPromise.resolve(Promise.resolve([fnGetIndices])));
11216
11394
  this.mock(oBinding).expects("insertGap").never();
11217
11395
  this.mock(oBinding).expects("_fireChange").never();
11218
11396
 
@@ -11221,12 +11399,17 @@ sap.ui.define([
11221
11399
  oSiblingContext);
11222
11400
 
11223
11401
  assert.strictEqual(oSyncPromise.isPending(), true);
11224
- assert.notOk(fnGetIndex.called);
11402
+ assert.notOk(fnGetIndices.called);
11225
11403
 
11226
11404
  await oSyncPromise;
11227
11405
 
11228
- assert.strictEqual(oChildContext.iIndex, "~index~");
11406
+ assert.strictEqual(oChildContext.iIndex, "~childIndex~");
11407
+ if (oSiblingContext) {
11408
+ assert.strictEqual(oSiblingContext.iIndex,
11409
+ bUpdateSiblingIndex ? "~siblingIndex~" : "~old~");
11410
+ }
11229
11411
  });
11412
+ });
11230
11413
  });
11231
11414
  });
11232
11415
 
@@ -11245,6 +11428,7 @@ sap.ui.define([
11245
11428
  // too far :-(
11246
11429
  oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
11247
11430
  this.mock(oBinding).expects("collapse").never();
11431
+ this.mock(oBinding).expects("checkSuspended").withExactArgs();
11248
11432
  this.mock(oBinding).expects("getUpdateGroupId").withExactArgs().returns("~group~");
11249
11433
  this.mock(oBinding).expects("lockGroup").withExactArgs("~group~", true, true)
11250
11434
  .returns("~oGroupLock~");
@@ -11253,7 +11437,7 @@ sap.ui.define([
11253
11437
  };
11254
11438
  oBinding.oCache = oCache;
11255
11439
  this.mock(oCache).expects("move")
11256
- .withExactArgs("~oGroupLock~", "~child~", "~parent~", undefined, undefined)
11440
+ .withExactArgs("~oGroupLock~", "~child~", "~parent~", undefined, undefined, undefined)
11257
11441
  .returns({promise : SyncPromise.reject("~error~"), refresh : false});
11258
11442
  this.mock(oBinding).expects("expand").never();
11259
11443
 
@@ -11277,6 +11461,7 @@ sap.ui.define([
11277
11461
  // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
11278
11462
  // too far :-(
11279
11463
  oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
11464
+ this.mock(oBinding).expects("checkSuspended").withExactArgs();
11280
11465
  this.mock(oBinding).expects("getUpdateGroupId").withExactArgs().returns("~group~");
11281
11466
  this.mock(oBinding).expects("lockGroup").withExactArgs("~group~", true, true)
11282
11467
  .returns("~oGroupLock~");
@@ -11286,13 +11471,16 @@ sap.ui.define([
11286
11471
  };
11287
11472
  oBinding.oCache = oCache;
11288
11473
  this.mock(oCache).expects("move")
11289
- .withExactArgs("~oGroupLock~", "~child~", null, undefined, undefined)
11474
+ .withExactArgs("~oGroupLock~", "~child~", null, undefined, undefined, undefined)
11290
11475
  .returns({promise : SyncPromise.resolve([1, 43, "~iCollapseCount~"]), refresh : false});
11291
11476
  this.mock(oBinding).expects("requestSideEffects").never();
11292
11477
  this.mock(oBinding).expects("insertGap").never();
11293
11478
  this.mock(oBinding).expects("collapse")
11294
11479
  .withExactArgs(sinon.match.same(oChildContext), true, "~iCollapseCount~");
11295
11480
  this.mock(oChildContext).expects("getModelIndex").withExactArgs().returns(43);
11481
+ this.mock(_Helper).expects("insert")
11482
+ .withExactArgs(sinon.match.same(oBinding.aContexts), 43,
11483
+ sinon.match.same(oChildContext));
11296
11484
  this.mock(oBinding).expects("expand")
11297
11485
  .withExactArgs(sinon.match.same(oChildContext))
11298
11486
  .returns(SyncPromise.reject("~error~"));
@@ -11880,6 +12068,220 @@ sap.ui.define([
11880
12068
  assert.strictEqual(ODataListBinding.isBelowAggregation(oContext), true);
11881
12069
  });
11882
12070
 
12071
+ //*********************************************************************************************
12072
+ QUnit.test("fetchOrGetSibling: Missing recursive hierarchy", function (assert) {
12073
+ const oBinding = this.bindList("/EMPLOYEES");
12074
+ this.mock(oBinding).expects("checkSuspended").never();
12075
+
12076
+ assert.throws(function () {
12077
+ // code under test
12078
+ oBinding.fetchOrGetSibling();
12079
+ }, new Error("Missing recursive hierarchy"));
12080
+
12081
+ oBinding.mParameters = {$$aggregation : {}};
12082
+
12083
+ assert.throws(function () {
12084
+ // code under test
12085
+ oBinding.fetchOrGetSibling();
12086
+ }, new Error("Missing recursive hierarchy"));
12087
+ });
12088
+
12089
+ //*********************************************************************************************
12090
+ [-2, +2, -3, +3, 0].forEach((iOffset) => {
12091
+ QUnit.test(`fetchOrGetSibling: unsupported offset ${iOffset}`, function (assert) {
12092
+ const oBinding = this.bindList("/EMPLOYEES");
12093
+ // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
12094
+ // too far :-(
12095
+ oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
12096
+ this.mock(oBinding).expects("checkSuspended").never();
12097
+
12098
+ assert.throws(function () {
12099
+ // code under test
12100
+ oBinding.fetchOrGetSibling(/*oNode*/null, iOffset);
12101
+ }, new Error("Unsupported offset: " + iOffset));
12102
+ });
12103
+ });
12104
+
12105
+ //*********************************************************************************************
12106
+ QUnit.test("fetchOrGetSibling: Unsupported context (deleted)", function (assert) {
12107
+ const oBinding = this.bindList("/EMPLOYEES");
12108
+ // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
12109
+ // too far :-(
12110
+ oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
12111
+ const oNode = {
12112
+ iIndex : "~iIndex~",
12113
+ isDeleted : mustBeMocked
12114
+ // NO: isTransient
12115
+ };
12116
+ this.mock(oNode).expects("isDeleted").withExactArgs().returns(true);
12117
+ oBinding.aContexts["~iIndex~"] = oNode;
12118
+ this.mock(oBinding).expects("checkSuspended").never();
12119
+
12120
+ assert.throws(function () {
12121
+ // code under test
12122
+ oBinding.fetchOrGetSibling(oNode, -1);
12123
+ }, new Error("Unsupported context: " + oNode));
12124
+ });
12125
+
12126
+ //*********************************************************************************************
12127
+ QUnit.test("fetchOrGetSibling: Unsupported context (transient)", function (assert) {
12128
+ const oBinding = this.bindList("/EMPLOYEES");
12129
+ // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
12130
+ // too far :-(
12131
+ oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
12132
+ const oNode = {
12133
+ iIndex : "~iIndex~",
12134
+ isDeleted : mustBeMocked,
12135
+ isTransient : mustBeMocked
12136
+ };
12137
+ this.mock(oNode).expects("isDeleted").withExactArgs().returns(false);
12138
+ this.mock(oNode).expects("isTransient").withExactArgs().returns(true);
12139
+ oBinding.aContexts["~iIndex~"] = oNode;
12140
+ this.mock(oBinding).expects("checkSuspended").never();
12141
+
12142
+ assert.throws(function () {
12143
+ // code under test
12144
+ oBinding.fetchOrGetSibling(oNode, -1);
12145
+ }, new Error("Unsupported context: " + oNode));
12146
+ });
12147
+
12148
+ //*********************************************************************************************
12149
+ QUnit.test("fetchOrGetSibling: Unsupported context (index)", function (assert) {
12150
+ const oBinding = this.bindList("/EMPLOYEES");
12151
+ // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
12152
+ // too far :-(
12153
+ oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
12154
+ const oNode = {
12155
+ iIndex : "~iIndex~",
12156
+ isDeleted : mustBeMocked,
12157
+ isTransient : mustBeMocked
12158
+ };
12159
+ this.mock(oNode).expects("isDeleted").withExactArgs().returns(false);
12160
+ this.mock(oNode).expects("isTransient").withExactArgs().returns(false);
12161
+ oBinding.aContexts["wrong index"] = oNode;
12162
+ this.mock(oBinding).expects("checkSuspended").never();
12163
+
12164
+ assert.throws(function () {
12165
+ // code under test
12166
+ oBinding.fetchOrGetSibling(oNode, -1);
12167
+ }, new Error("Unsupported context: " + oNode));
12168
+ });
12169
+
12170
+ //*********************************************************************************************
12171
+ [{in : undefined, out : +1}, {in : +1, out : +1}, {in : -1, out : -1}].forEach((oOffset, i) => {
12172
+ [{in : -1, out : null}, {in : undefined, out : undefined}].forEach((oResult, j) => {
12173
+ QUnit.test(`fetchOrGetSibling: null/undefined #${i},${j}`, function (assert) {
12174
+ const oBinding = this.bindList("/EMPLOYEES");
12175
+ // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
12176
+ // too far :-(
12177
+ oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
12178
+ const oNode = {
12179
+ iIndex : "~iIndex~",
12180
+ isDeleted : mustBeMocked,
12181
+ isTransient : mustBeMocked
12182
+ };
12183
+ this.mock(oNode).expects("isDeleted").withExactArgs().returns(false);
12184
+ this.mock(oNode).expects("isTransient").withExactArgs().returns(false);
12185
+ oBinding.aContexts["~iIndex~"] = oNode;
12186
+ const oCheckSuspendedExpectation
12187
+ = this.mock(oBinding).expects("checkSuspended").withExactArgs();
12188
+ this.mock(oBinding).expects("lockGroup").never();
12189
+ const oCache = {
12190
+ getSiblingIndex : mustBeMocked
12191
+ };
12192
+ oBinding.oCache = oCache;
12193
+ const oGetSiblingIndexExpectation = this.mock(oCache).expects("getSiblingIndex")
12194
+ .withExactArgs("~iIndex~", oOffset.out).returns(oResult.in);
12195
+ this.mock(oBinding).expects("fetchContexts").never();
12196
+ this.mock(oBinding).expects("requestContexts").never();
12197
+
12198
+ // code under test
12199
+ assert.strictEqual(oBinding.fetchOrGetSibling(oNode, oOffset.in), oResult.out);
12200
+
12201
+ sinon.assert.callOrder(oCheckSuspendedExpectation, oGetSiblingIndexExpectation);
12202
+ });
12203
+ });
12204
+ });
12205
+
12206
+ //*********************************************************************************************
12207
+ [0, 1, 42].forEach((iIndex) => {
12208
+ QUnit.test(`fetchOrGetSibling: no request, index = ${iIndex}`, function (assert) {
12209
+ const oBinding = this.bindList("/EMPLOYEES");
12210
+ // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
12211
+ // too far :-(
12212
+ oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
12213
+ const oNode = {
12214
+ iIndex : "~iIndex~",
12215
+ isDeleted : mustBeMocked,
12216
+ isTransient : mustBeMocked
12217
+ };
12218
+ this.mock(oNode).expects("isDeleted").withExactArgs().returns(false);
12219
+ this.mock(oNode).expects("isTransient").withExactArgs().returns(false);
12220
+ oBinding.aContexts["~iIndex~"] = oNode;
12221
+ const oCheckSuspendedExpectation
12222
+ = this.mock(oBinding).expects("checkSuspended").withExactArgs();
12223
+ this.mock(oBinding).expects("lockGroup").never();
12224
+ const oCache = {
12225
+ getSiblingIndex : mustBeMocked
12226
+ };
12227
+ oBinding.oCache = oCache;
12228
+ const oGetSiblingIndexExpectation = this.mock(oCache).expects("getSiblingIndex")
12229
+ .withExactArgs("~iIndex~", +1).returns(iIndex);
12230
+ this.mock(oBinding).expects("fetchContexts")
12231
+ .withExactArgs(iIndex, 1, 0, sinon.match.same(_GroupLock.$cached))
12232
+ .callsFake(function () {
12233
+ oBinding.aContexts[iIndex] = "~oSiblingContext~";
12234
+ return "n/a";
12235
+ });
12236
+ this.mock(oBinding).expects("requestContexts").never();
12237
+
12238
+ // code under test
12239
+ assert.strictEqual(oBinding.fetchOrGetSibling(oNode), "~oSiblingContext~");
12240
+
12241
+ sinon.assert.callOrder(oCheckSuspendedExpectation, oGetSiblingIndexExpectation);
12242
+ });
12243
+ });
12244
+
12245
+ //*********************************************************************************************
12246
+ [false, true].forEach((bNull) => {
12247
+ QUnit.test(`fetchOrGetSibling: request, null=${bNull}`, async function (assert) {
12248
+ const oBinding = this.bindList("/EMPLOYEES");
12249
+ // Note: autoExpandSelect at model would be required for hierarchyQualifier, but that leads
12250
+ // too far :-(
12251
+ oBinding.mParameters.$$aggregation = {hierarchyQualifier : "X"};
12252
+ const oNode = {
12253
+ iIndex : "~iIndex~",
12254
+ isDeleted : mustBeMocked,
12255
+ isTransient : mustBeMocked
12256
+ };
12257
+ this.mock(oNode).expects("isDeleted").withExactArgs().returns(false);
12258
+ this.mock(oNode).expects("isTransient").withExactArgs().returns(false);
12259
+ oBinding.aContexts["~iIndex~"] = oNode;
12260
+ const oCheckSuspendedExpectation
12261
+ = this.mock(oBinding).expects("checkSuspended").withExactArgs();
12262
+ this.mock(oBinding).expects("lockGroup").withExactArgs().returns("~oGroupLock~");
12263
+ const oCache = {
12264
+ getSiblingIndex : mustBeMocked,
12265
+ requestSiblingIndex : mustBeMocked
12266
+ };
12267
+ oBinding.oCache = oCache;
12268
+ const oGetSiblingIndexExpectation = this.mock(oCache).expects("getSiblingIndex")
12269
+ .withExactArgs("~iIndex~", -1).returns(undefined);
12270
+ this.mock(oBinding).expects("fetchContexts").never();
12271
+ this.mock(oCache).expects("requestSiblingIndex")
12272
+ .withExactArgs("~iIndex~", -1, "~oGroupLock~").resolves(bNull ? -1 : 42);
12273
+ this.mock(oBinding).expects("requestContexts").exactly(bNull ? 0 : 1)
12274
+ .withExactArgs(42, 1).resolves(["~oSiblingContext~"]);
12275
+
12276
+ // code under test
12277
+ const oPromise = oBinding.fetchOrGetSibling(oNode, -1, true);
12278
+
12279
+ sinon.assert.callOrder(oCheckSuspendedExpectation, oGetSiblingIndexExpectation);
12280
+ assert.ok(oPromise instanceof Promise);
12281
+ assert.strictEqual(await oPromise, bNull ? null : "~oSiblingContext~");
12282
+ });
12283
+ });
12284
+
11883
12285
  //*********************************************************************************************
11884
12286
  QUnit.test("setResetViaSideEffects ", function (assert) {
11885
12287
  const oBinding = this.bindList("/SalesOrderList");
@@ -11898,6 +12300,89 @@ sap.ui.define([
11898
12300
  oBinding.setResetViaSideEffects(true);
11899
12301
  assert.strictEqual(oBinding.bResetViaSideEffects, false, "true must not win over false");
11900
12302
  });
12303
+
12304
+ //*********************************************************************************************
12305
+ QUnit.test("insertContext: use index", function (assert) {
12306
+ const oBinding = this.bindList("/EMPLOYEES");
12307
+ oBinding.aContexts = [
12308
+ {iIndex : 0, sName : "foo"},
12309
+ {iIndex : 1, sName : "bar"},
12310
+ undefined,
12311
+ {iIndex : 2, sName : "baz"}
12312
+ ];
12313
+ oBinding.iMaxLength = 42;
12314
+
12315
+ this.mock(oBinding).expects("_fireChange").twice()
12316
+ .withExactArgs({reason : ChangeReason.Add});
12317
+
12318
+ // code under test
12319
+ oBinding.insertContext({sName : "created0"}, 1);
12320
+
12321
+ assert.strictEqual(oBinding.iMaxLength, 43);
12322
+ assert.deepEqual(oBinding.aContexts, [
12323
+ {iIndex : 0, sName : "foo"},
12324
+ {sName : "created0"},
12325
+ {iIndex : 2, sName : "bar"},
12326
+ undefined,
12327
+ {iIndex : 3, sName : "baz"}
12328
+ ]);
12329
+
12330
+ // code under test
12331
+ oBinding.insertContext({sName : "created1"}, 6);
12332
+
12333
+ assert.strictEqual(oBinding.iMaxLength, 44);
12334
+ assert.deepEqual(oBinding.aContexts, [
12335
+ {iIndex : 0, sName : "foo"},
12336
+ {sName : "created0"},
12337
+ {iIndex : 2, sName : "bar"},
12338
+ undefined,
12339
+ {iIndex : 3, sName : "baz"},
12340
+ undefined,
12341
+ {sName : "created1"}
12342
+ ]);
12343
+ });
12344
+
12345
+ //*********************************************************************************************
12346
+ [false, true].forEach(function (bAtEnd, i) {
12347
+ QUnit.test("insertContext: add to creation area #" + i, function (assert) {
12348
+ const oBinding = this.bindList("/EMPLOYEES");
12349
+ oBinding.aContexts = [
12350
+ {iIndex : -1, sName : "created0"},
12351
+ {iIndex : 0, sName : "foo"},
12352
+ {iIndex : 1, sName : "bar"}
12353
+ ];
12354
+ oBinding.bFirstCreateAtEnd = bAtEnd;
12355
+ oBinding.iMaxLength = 23;
12356
+
12357
+ this.mock(oBinding).expects("_fireChange").twice()
12358
+ .withExactArgs({reason : ChangeReason.Add});
12359
+
12360
+ // code under test: insert at beginning of aContexts
12361
+ oBinding.insertContext({iIndex : -2, sName : "created1"}, /*iIndex*/undefined, bAtEnd);
12362
+
12363
+ assert.strictEqual(oBinding.iMaxLength, 23, "unchanged");
12364
+ assert.deepEqual(oBinding.aContexts, [
12365
+ {iIndex : -2, sName : "created1"},
12366
+ {iIndex : -1, sName : "created0"},
12367
+ {iIndex : 0, sName : "foo"},
12368
+ {iIndex : 1, sName : "bar"}
12369
+ ]);
12370
+
12371
+ oBinding.iCreatedContexts = 3; // creation area increases to a third item
12372
+
12373
+ // code under test: insert at end of creation area; adjusting indices
12374
+ oBinding.insertContext({iIndex : -3, sName : "created2"}, /*iIndex*/undefined, !bAtEnd);
12375
+
12376
+ assert.strictEqual(oBinding.iMaxLength, 23, "unchanged");
12377
+ assert.deepEqual(oBinding.aContexts, [
12378
+ {iIndex : -3, sName : "created1"},
12379
+ {iIndex : -2, sName : "created0"},
12380
+ {iIndex : -1, sName : "created2"},
12381
+ {iIndex : 0, sName : "foo"},
12382
+ {iIndex : 1, sName : "bar"}
12383
+ ]);
12384
+ });
12385
+ });
11901
12386
  });
11902
12387
 
11903
12388
  //TODO integration: 2 entity sets with same $expand, but different $select