@openui5/sap.ui.core 1.126.1 → 1.127.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 (647) hide show
  1. package/THIRDPARTY.txt +1 -1
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +1 -1
  4. package/src/jquery.sap.properties.js +1 -1
  5. package/src/jquery.sap.resources.js +1 -1
  6. package/src/jquery.sap.script.js +1 -1
  7. package/src/jquery.sap.storage.js +3 -3
  8. package/src/sap/base/Event.js +1 -1
  9. package/src/sap/base/Eventing.js +1 -1
  10. package/src/sap/base/config.js +1 -1
  11. package/src/sap/base/i18n/LanguageTag.js +1 -1
  12. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  13. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  14. package/src/sap/base/util/restricted/_castArray.js +1 -1
  15. package/src/sap/base/util/restricted/_compact.js +1 -1
  16. package/src/sap/base/util/restricted/_curry.js +1 -1
  17. package/src/sap/base/util/restricted/_debounce.js +1 -1
  18. package/src/sap/base/util/restricted/_difference.js +1 -1
  19. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  20. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  21. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  22. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  23. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  24. package/src/sap/base/util/restricted/_flatten.js +1 -1
  25. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  26. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  27. package/src/sap/base/util/restricted/_intersection.js +1 -1
  28. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  29. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  30. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  31. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  32. package/src/sap/base/util/restricted/_isNil.js +1 -1
  33. package/src/sap/base/util/restricted/_max.js +1 -1
  34. package/src/sap/base/util/restricted/_merge.js +1 -1
  35. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  36. package/src/sap/base/util/restricted/_min.js +1 -1
  37. package/src/sap/base/util/restricted/_omit.js +1 -1
  38. package/src/sap/base/util/restricted/_pick.js +1 -1
  39. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  40. package/src/sap/base/util/restricted/_throttle.js +1 -1
  41. package/src/sap/base/util/restricted/_toArray.js +1 -1
  42. package/src/sap/base/util/restricted/_union.js +1 -1
  43. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  44. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  45. package/src/sap/base/util/restricted/_uniq.js +1 -1
  46. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  47. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  48. package/src/sap/base/util/restricted/_without.js +1 -1
  49. package/src/sap/base/util/restricted/_xor.js +1 -1
  50. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  51. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  52. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  53. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  54. package/src/sap/ui/Device.js +3 -3
  55. package/src/sap/ui/Global.js +5 -15
  56. package/src/sap/ui/base/BindingInfo.js +45 -24
  57. package/src/sap/ui/base/DataType.js +19 -0
  58. package/src/sap/ui/base/Event.js +1 -1
  59. package/src/sap/ui/base/EventProvider.js +1 -1
  60. package/src/sap/ui/base/Interface.js +31 -1
  61. package/src/sap/ui/base/ManagedObject.js +3 -4
  62. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  63. package/src/sap/ui/base/Metadata.js +1 -1
  64. package/src/sap/ui/base/Object.js +1 -1
  65. package/src/sap/ui/base/ObjectPool.js +1 -1
  66. package/src/sap/ui/core/.library +1 -1
  67. package/src/sap/ui/core/.theming +8 -0
  68. package/src/sap/ui/core/BusyIndicator.js +1 -1
  69. package/src/sap/ui/core/Component.js +1 -1
  70. package/src/sap/ui/core/ComponentContainer.js +1 -1
  71. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  72. package/src/sap/ui/core/ComponentSupport.js +1 -1
  73. package/src/sap/ui/core/Configuration.js +1 -1
  74. package/src/sap/ui/core/Control.js +2 -2
  75. package/src/sap/ui/core/Core.js +57 -2
  76. package/src/sap/ui/core/CustomData.js +1 -1
  77. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  78. package/src/sap/ui/core/Element.js +166 -16
  79. package/src/sap/ui/core/ElementMetadata.js +1 -1
  80. package/src/sap/ui/core/EnabledPropagator.js +17 -31
  81. package/src/sap/ui/core/EventBus.js +1 -1
  82. package/src/sap/ui/core/Fragment.js +1 -1
  83. package/src/sap/ui/core/HTML.js +1 -1
  84. package/src/sap/ui/core/History.js +1 -1
  85. package/src/sap/ui/core/Icon.js +1 -1
  86. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  87. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  88. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  89. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  90. package/src/sap/ui/core/InvisibleText.js +1 -1
  91. package/src/sap/ui/core/Item.js +2 -2
  92. package/src/sap/ui/core/LabelEnablement.js +1 -1
  93. package/src/sap/ui/core/LayoutData.js +1 -1
  94. package/src/sap/ui/core/ListItem.js +1 -1
  95. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  96. package/src/sap/ui/core/Locale.js +1 -1
  97. package/src/sap/ui/core/LocaleData.js +118 -55
  98. package/src/sap/ui/core/Manifest.js +1 -1
  99. package/src/sap/ui/core/Message.js +1 -1
  100. package/src/sap/ui/core/Popup.js +8 -0
  101. package/src/sap/ui/core/RenderManager.js +1 -1
  102. package/src/sap/ui/core/Renderer.js +1 -1
  103. package/src/sap/ui/core/ResizeHandler.js +1 -1
  104. package/src/sap/ui/core/ScrollBar.js +1 -1
  105. package/src/sap/ui/core/SeparatorItem.js +1 -1
  106. package/src/sap/ui/core/Theming.js +4 -4
  107. package/src/sap/ui/core/Title.js +2 -2
  108. package/src/sap/ui/core/TooltipBase.js +2 -2
  109. package/src/sap/ui/core/UIArea.js +1 -1
  110. package/src/sap/ui/core/UIComponent.js +1 -1
  111. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  112. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  113. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  114. package/src/sap/ui/core/XMLComposite.js +1 -1
  115. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  116. package/src/sap/ui/core/cache/CacheManagerNOP.js +3 -0
  117. package/src/sap/ui/core/cache/LRUPersistentCache.js +13 -4
  118. package/src/sap/ui/core/date/UI5Date.js +1 -1
  119. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  120. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  121. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  122. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  123. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  124. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  125. package/src/sap/ui/core/fieldhelp/FieldHelp.js +53 -11
  126. package/src/sap/ui/core/fieldhelp/FieldHelpUtil.js +4 -0
  127. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  128. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  129. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  130. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  131. package/src/sap/ui/core/library.js +37 -21
  132. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  133. package/src/sap/ui/core/message/Message.js +1 -1
  134. package/src/sap/ui/core/message/MessageManager.js +1 -1
  135. package/src/sap/ui/core/message/MessageParser.js +1 -1
  136. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  137. package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +30 -18
  138. package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +294 -282
  139. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  140. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  141. package/src/sap/ui/core/mvc/JSView.js +1 -1
  142. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  143. package/src/sap/ui/core/mvc/View.js +1 -1
  144. package/src/sap/ui/core/mvc/XMLView.js +4 -4
  145. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  146. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  147. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  148. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  149. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  150. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  151. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  152. package/src/sap/ui/core/service/Service.js +1 -1
  153. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  154. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  155. package/src/sap/ui/core/support/Plugin.js +1 -1
  156. package/src/sap/ui/core/support/Support.js +1 -1
  157. package/src/sap/ui/core/support/ToolsAPI.js +5 -5
  158. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  159. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  160. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  161. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  162. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  163. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  164. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  165. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  166. package/src/sap/ui/core/themes/base/base.less +119 -49
  167. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  168. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  169. package/src/sap/ui/core/themes/base/library.source.less +2 -0
  170. package/src/sap/ui/core/themes/base/skeleton.less +958 -0
  171. package/src/sap/ui/core/theming/ThemeManager.js +56 -73
  172. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  173. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  174. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  175. package/src/sap/ui/core/tmpl/Template.js +1 -1
  176. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  177. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  178. package/src/sap/ui/core/util/Export.js +1 -1
  179. package/src/sap/ui/core/util/ExportCell.js +1 -1
  180. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  181. package/src/sap/ui/core/util/ExportRow.js +1 -1
  182. package/src/sap/ui/core/util/ExportType.js +1 -1
  183. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  184. package/src/sap/ui/core/util/File.js +1 -1
  185. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  186. package/src/sap/ui/core/util/MockServer.js +1 -1
  187. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  188. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  189. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  190. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  191. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  192. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  193. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  194. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  195. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  196. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  197. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  198. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  199. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  200. package/src/sap/ui/debug/ControlTree.js +1 -1
  201. package/src/sap/ui/debug/DebugEnv.js +1 -1
  202. package/src/sap/ui/debug/PropertyList.js +1 -1
  203. package/src/sap/ui/dom/findTabbable.js +244 -0
  204. package/src/sap/ui/dom/isElementCovered.js +51 -0
  205. package/src/sap/ui/events/F6Navigation.js +10 -164
  206. package/src/sap/ui/model/ClientModel.js +1 -1
  207. package/src/sap/ui/model/CompositeDataState.js +1 -1
  208. package/src/sap/ui/model/CompositeType.js +1 -1
  209. package/src/sap/ui/model/DataState.js +1 -1
  210. package/src/sap/ui/model/MetaModel.js +1 -1
  211. package/src/sap/ui/model/Model.js +1 -1
  212. package/src/sap/ui/model/SelectionModel.js +1 -1
  213. package/src/sap/ui/model/SimpleType.js +1 -1
  214. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  215. package/src/sap/ui/model/Type.js +1 -1
  216. package/src/sap/ui/model/json/JSONModel.js +1 -1
  217. package/src/sap/ui/model/message/MessageModel.js +1 -1
  218. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  219. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  220. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  221. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  222. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  223. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  224. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  225. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  226. package/src/sap/ui/model/odata/type/Date.js +1 -1
  227. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  228. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  229. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  230. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  231. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  232. package/src/sap/ui/model/odata/type/Double.js +1 -1
  233. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  234. package/src/sap/ui/model/odata/type/Int.js +1 -1
  235. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  236. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  237. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  238. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  239. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  240. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  241. package/src/sap/ui/model/odata/type/Single.js +1 -1
  242. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  243. package/src/sap/ui/model/odata/type/String.js +1 -1
  244. package/src/sap/ui/model/odata/type/Time.js +1 -1
  245. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  246. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  247. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  248. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  249. package/src/sap/ui/model/odata/v2/ODataModel.js +144 -14
  250. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  251. package/src/sap/ui/model/odata/v4/Context.js +18 -8
  252. package/src/sap/ui/model/odata/v4/ODataBinding.js +1 -1
  253. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +12 -9
  254. package/src/sap/ui/model/odata/v4/ODataListBinding.js +30 -14
  255. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +254 -189
  256. package/src/sap/ui/model/odata/v4/ODataModel.js +51 -13
  257. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +4 -1
  258. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +68 -32
  259. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +9 -6
  260. package/src/sap/ui/model/odata/v4/lib/_Cache.js +7 -7
  261. package/src/sap/ui/model/odata/v4/lib/_Helper.js +17 -11
  262. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +11 -3
  263. package/src/sap/ui/model/odata/v4/lib/_TreeState.js +10 -4
  264. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  265. package/src/sap/ui/model/type/Boolean.js +1 -1
  266. package/src/sap/ui/model/type/Currency.js +1 -1
  267. package/src/sap/ui/model/type/Date.js +1 -1
  268. package/src/sap/ui/model/type/DateInterval.js +1 -1
  269. package/src/sap/ui/model/type/DateTime.js +1 -1
  270. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  271. package/src/sap/ui/model/type/FileSize.js +1 -1
  272. package/src/sap/ui/model/type/Float.js +1 -1
  273. package/src/sap/ui/model/type/Integer.js +1 -1
  274. package/src/sap/ui/model/type/String.js +1 -1
  275. package/src/sap/ui/model/type/Time.js +1 -1
  276. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  277. package/src/sap/ui/model/type/Unit.js +1 -1
  278. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  279. package/src/sap/ui/performance/trace/FESR.js +3 -0
  280. package/src/sap/ui/performance/trace/Interaction.js +4 -2
  281. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  282. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  283. package/src/sap/ui/qunit/utils/nextUIUpdate.js +7 -53
  284. package/src/sap/ui/qunit/utils/waitForThemeApplied.js +6 -42
  285. package/src/sap/ui/test/ModuleTracking.js +1 -1
  286. package/src/sap/ui/test/generic/TestBase.js +1 -1
  287. package/src/sap/ui/test/generic/Utils.js +3 -7
  288. package/src/sap/ui/test/opaQunit.js +3 -3
  289. package/src/sap/ui/test/utils/nextUIUpdate.js +64 -0
  290. package/src/sap/ui/test/utils/waitForThemeApplied.js +58 -0
  291. package/src/sap/ui/util/Storage.js +1 -1
  292. package/src/ui5loader.js +9 -0
  293. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/ui5.yaml +1 -1
  294. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  295. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  296. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  297. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  298. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/SandboxModel.js +1 -1
  299. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/data/SalesOrderList('0500000000')-requestSideEffects.json +14 -14
  300. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +32 -2
  301. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +22 -0
  302. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Component.js +69 -0
  303. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/MIT.ListBindingTemplate.AnnotationChanges.html +63 -0
  304. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Main.view.xml +19 -7
  305. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/SandboxModel.js +1 -4
  306. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/data/equipments.json +37 -22
  307. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/data/localAnnotations.xml +10 -2
  308. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +5 -5
  309. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +32 -2
  310. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +30 -0
  311. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +12 -6
  312. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.controller.js +7 -0
  313. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.view.xml +2 -0
  314. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/SandboxModel.js +14 -14
  315. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/pages/Main.js +1 -1
  316. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  317. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  318. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  319. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  320. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  321. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  322. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  323. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  324. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  325. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  326. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  327. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  328. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  329. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  330. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  331. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  332. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  333. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  334. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  335. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  336. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  337. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  338. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  339. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  340. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  341. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  342. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  343. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  344. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  345. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  346. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  347. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  348. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  349. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  350. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  351. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  352. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  353. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  354. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  355. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  356. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  357. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  358. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  359. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  360. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  361. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  362. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  363. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/package.json +3 -0
  364. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  365. package/test/sap/ui/core/qunit/BlockLayerUtils.qunit.js +1 -1
  366. package/test/sap/ui/core/qunit/CalculatedFields.qunit.js +1 -1
  367. package/test/sap/ui/core/qunit/ContextMenuSupport.qunit.js +1 -1
  368. package/test/sap/ui/core/qunit/ControlDefinition.qunit.js +2 -2
  369. package/test/sap/ui/core/qunit/ControlRenderer.qunit.js +1 -1
  370. package/test/sap/ui/core/qunit/Core.qunit.js +1 -1
  371. package/test/sap/ui/core/qunit/CustomStyleClassSupport.qunit.js +1 -1
  372. package/test/sap/ui/core/qunit/CustomThemeFallback.qunit.js +1 -1
  373. package/test/sap/ui/core/qunit/CustomThemeFallback_unavoidablySync.qunit.js +1 -1
  374. package/test/sap/ui/core/qunit/Element_data.qunit.js +1 -1
  375. package/test/sap/ui/core/qunit/Element_destroy.qunit.js +1 -1
  376. package/test/sap/ui/core/qunit/Element_focus.qunit.js +196 -3
  377. package/test/sap/ui/core/qunit/Element_metadata_selector.qunit.js +1 -1
  378. package/test/sap/ui/core/qunit/EnabledPropagator.qunit.js +2 -3
  379. package/test/sap/ui/core/qunit/FastNavigationWithWebComponents.qunit.js +1 -1
  380. package/test/sap/ui/core/qunit/FieldGroup.qunit.js +1 -1
  381. package/test/sap/ui/core/qunit/FocusHandler.qunit.js +1 -1
  382. package/test/sap/ui/core/qunit/Fragment.qunit.js +1 -1
  383. package/test/sap/ui/core/qunit/Fragment_legacyAPIs.qunit.js +1 -1
  384. package/test/sap/ui/core/qunit/HTML.qunit.js +1 -1
  385. package/test/sap/ui/core/qunit/Icon.qunit.js +1 -1
  386. package/test/sap/ui/core/qunit/InvisibleText.qunit.js +1 -1
  387. package/test/sap/ui/core/qunit/LRUPersistentCache.qunit.js +8 -4
  388. package/test/sap/ui/core/qunit/LocalBusyIndicator.qunit.js +1 -1
  389. package/test/sap/ui/core/qunit/RenderManager.qunit.js +1 -1
  390. package/test/sap/ui/core/qunit/Rendering.qunit.js +1 -1
  391. package/test/sap/ui/core/qunit/ResizeHandler.qunit.js +1 -1
  392. package/test/sap/ui/core/qunit/ScrollBar.qunit.js +1 -1
  393. package/test/sap/ui/core/qunit/ShortcutHints.qunit.js +1 -1
  394. package/test/sap/ui/core/qunit/StashedControlSupport.qunit.js +1 -1
  395. package/test/sap/ui/core/qunit/StashedControlSupport_unavoidablySync.qunit.js +1 -1
  396. package/test/sap/ui/core/qunit/ThemeManager.qunit.js +1 -1
  397. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +1 -1
  398. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +1 -1
  399. package/test/sap/ui/core/qunit/Theming.qunit.js +1 -1
  400. package/test/sap/ui/core/qunit/Theming_default_and_fallback.qunit.js +1 -1
  401. package/test/sap/ui/core/qunit/TooltipBase.qunit.js +1 -1
  402. package/test/sap/ui/core/qunit/UIArea.qunit.js +1 -1
  403. package/test/sap/ui/core/qunit/bootstrap/ThemeVersion.qunit.js +1 -1
  404. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +1 -8
  405. package/test/sap/ui/core/qunit/component/Component.qunit.js +36 -36
  406. package/test/sap/ui/core/qunit/component/ComponentContainer.qunit.js +2 -10
  407. package/test/sap/ui/core/qunit/component/ComponentContainer_unavoidablySync.qunit.js +2 -10
  408. package/test/sap/ui/core/qunit/component/ComponentSupport.qunit.js +5 -5
  409. package/test/sap/ui/core/qunit/component/Component_containedInLibrary.qunit.js +10 -10
  410. package/test/sap/ui/core/qunit/component/Component_dependencyLoading.qunit.js +7 -7
  411. package/test/sap/ui/core/qunit/component/Component_dependencyLoading_unavoidablySync.qunit.js +6 -6
  412. package/test/sap/ui/core/qunit/component/Component_unavoidablySync.qunit.js +8 -8
  413. package/test/sap/ui/core/qunit/component/Customizing.qunit.js +1 -1
  414. package/test/sap/ui/core/qunit/component/Customizing_async.qunit.js +3 -3
  415. package/test/sap/ui/core/qunit/component/Customizing_disabled.qunit.js +1 -1
  416. package/test/sap/ui/core/qunit/component/Customizing_legacyAPIs.qunit.js +2 -2
  417. package/test/sap/ui/core/qunit/component/Customizing_multi.qunit.js +1 -1
  418. package/test/sap/ui/core/qunit/component/Customizing_unavoidablySync.qunit.js +1 -1
  419. package/test/sap/ui/core/qunit/component/ExtensionPoint.qunit.js +3 -3
  420. package/test/sap/ui/core/qunit/component/ExtensionPoint_unavoidablySync.qunit.js +1 -1
  421. package/test/sap/ui/core/qunit/component/Manifest.qunit.js +10 -10
  422. package/test/sap/ui/core/qunit/component/Manifest_unavoidablySync.qunit.js +1 -1
  423. package/test/sap/ui/core/qunit/component/Metadata.qunit.js +47 -47
  424. package/test/sap/ui/core/qunit/component/Metadata_unavoidablySync.qunit.js +33 -33
  425. package/test/sap/ui/core/qunit/component/Models.qunit.js +57 -57
  426. package/test/sap/ui/core/qunit/component/Models_unavoidablySync.qunit.js +12 -12
  427. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +2 -2
  428. package/test/sap/ui/core/qunit/component/UIComponent_unavoidablySync.qunit.js +1 -1
  429. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component1/Component.js +2 -2
  430. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component1/manifest.json +3 -3
  431. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component2/Component.js +2 -2
  432. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component2/manifest.json +1 -1
  433. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component3/Component.js +2 -2
  434. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component3/manifest.json +2 -2
  435. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component4/Component.js +2 -2
  436. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component4/manifest.json +2 -2
  437. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component5/Component.js +2 -2
  438. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component5/manifest.json +2 -2
  439. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component6/Component.js +2 -2
  440. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component6/manifest.json +2 -2
  441. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/componentVariant/manifest.json +2 -2
  442. package/test/sap/ui/core/qunit/component/testdata/embedded/Component.js +2 -2
  443. package/test/sap/ui/core/qunit/component/testdata/embedded/manifest.json +2 -2
  444. package/test/sap/ui/core/qunit/component/testdata/inherit/Component.js +2 -2
  445. package/test/sap/ui/core/qunit/component/testdata/inherit/component.json +1 -1
  446. package/test/sap/ui/core/qunit/component/testdata/inherit/manifest.json +9 -9
  447. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/Component.js +2 -2
  448. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/component.json +1 -1
  449. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/manifest.json +9 -9
  450. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/Component.js +2 -2
  451. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/manifest.json +3 -3
  452. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentA/Component.js +2 -2
  453. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentA/manifest.json +2 -2
  454. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentB/Component.js +2 -2
  455. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentB/manifest.json +3 -3
  456. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/Component.js +2 -2
  457. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/manifest.json +3 -3
  458. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentA/Component.js +2 -2
  459. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentA/manifest.json +2 -2
  460. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentB/Component.js +2 -2
  461. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentB/manifest.json +3 -3
  462. package/test/sap/ui/core/qunit/component/testdata/manifestload/manifest.json +2 -2
  463. package/test/sap/ui/core/qunit/component/testdata/minUI5Version/Component.js +1 -1
  464. package/test/sap/ui/core/qunit/component/testdata/minUI5Version/manifest.json +1 -1
  465. package/test/sap/ui/core/qunit/component/testdata/mixed/Component.js +1 -1
  466. package/test/sap/ui/core/qunit/component/testdata/mixed/manifest.json +9 -9
  467. package/test/sap/ui/core/qunit/component/testdata/mixed_legacyAPIs/Component.js +1 -1
  468. package/test/sap/ui/core/qunit/component/testdata/mixed_legacyAPIs/component.json +8 -8
  469. package/test/sap/ui/core/qunit/component/testdata/mixed_legacyAPIs/manifest.json +9 -9
  470. package/test/sap/ui/core/qunit/component/testdata/modelsMisc/Component.js +1 -1
  471. package/test/sap/ui/core/qunit/component/testdata/modelsMisc/manifest.json +1 -1
  472. package/test/sap/ui/core/qunit/component/testdata/other/Component.js +2 -2
  473. package/test/sap/ui/core/qunit/component/testdata/routerClass/Component.js +1 -1
  474. package/test/sap/ui/core/qunit/component/testdata/routerClass/manifest.json +2 -2
  475. package/test/sap/ui/core/qunit/component/testdata/routerPreloading/Component.js +1 -1
  476. package/test/sap/ui/core/qunit/component/testdata/routerPreloading/manifest.json +2 -2
  477. package/test/sap/ui/core/qunit/component/testdata/routing/Component.js +2 -2
  478. package/test/sap/ui/core/qunit/component/testdata/routing/RouterExtension.js +1 -1
  479. package/test/sap/ui/core/qunit/component/testdata/routing/TestView.js +1 -8
  480. package/test/sap/ui/core/qunit/component/testdata/routing/targets/Component.js +2 -2
  481. package/test/sap/ui/core/qunit/component/testdata/routing_legacyAPIs/Component.js +5 -5
  482. package/test/sap/ui/core/qunit/component/testdata/routing_legacyAPIs/targets/Component.js +5 -5
  483. package/test/sap/ui/core/qunit/component/testdata/targetsPreloading/Component.js +1 -1
  484. package/test/sap/ui/core/qunit/component/testdata/targetsPreloading/manifest.json +2 -2
  485. package/test/sap/ui/core/qunit/component/testdata/terminologies/Component.js +1 -1
  486. package/test/sap/ui/core/qunit/component/testdata/terminologies/Main.controller.js +1 -1
  487. package/test/sap/ui/core/qunit/component/testdata/terminologies/component1/Component.js +1 -1
  488. package/test/sap/ui/core/qunit/component/testdata/terminologies/component1/Main.controller.js +1 -1
  489. package/test/sap/ui/core/qunit/component/testdata/terminologies/component2/Component.js +1 -1
  490. package/test/sap/ui/core/qunit/component/testdata/terminologies/component2/Main.controller.js +1 -1
  491. package/test/sap/ui/core/qunit/component/testdata/terminologies/component3/Component.js +1 -1
  492. package/test/sap/ui/core/qunit/component/testdata/terminologies/component3/Main.controller.js +1 -1
  493. package/test/sap/ui/core/qunit/component/testdata/terminologies/component4/Component.js +1 -1
  494. package/test/sap/ui/core/qunit/component/testdata/terminologies/component4/Main.controller.js +1 -1
  495. package/test/sap/ui/core/qunit/component/testdata/terminologies/component5/Component.js +1 -1
  496. package/test/sap/ui/core/qunit/component/testdata/terminologies/component5/Main.controller.js +1 -1
  497. package/test/sap/ui/core/qunit/component/testdata/terminologies/reuse/Component.js +1 -1
  498. package/test/sap/ui/core/qunit/component/testdata/terminologies/reuse/Main.controller.js +1 -1
  499. package/test/sap/ui/core/qunit/component/testdata/v1/Component.js +2 -2
  500. package/test/sap/ui/core/qunit/component/testdata/v1/component.json +8 -8
  501. package/test/sap/ui/core/qunit/component/testdata/v1empty/Component.js +2 -2
  502. package/test/sap/ui/core/qunit/component/testdata/v1empty/component.json +1 -1
  503. package/test/sap/ui/core/qunit/component/testdata/v1inline/Component.js +10 -10
  504. package/test/sap/ui/core/qunit/component/testdata/v1missing/Component.js +2 -2
  505. package/test/sap/ui/core/qunit/component/testdata/v2/Component.js +2 -2
  506. package/test/sap/ui/core/qunit/component/testdata/v2/manifest.json +9 -9
  507. package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/Component.js +2 -2
  508. package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/manifest.json +9 -9
  509. package/test/sap/ui/core/qunit/component/testdata/v2empty/Component.js +1 -1
  510. package/test/sap/ui/core/qunit/component/testdata/v2empty/manifest.json +1 -1
  511. package/test/sap/ui/core/qunit/component/testdata/v2inline/Component.js +10 -10
  512. package/test/sap/ui/core/qunit/component/testdata/v2missing/Component.js +1 -1
  513. package/test/sap/ui/core/qunit/component/testdata/v2models/empty/Component.js +3 -3
  514. package/test/sap/ui/core/qunit/component/testdata/v2models/empty/manifest.json +1 -1
  515. package/test/sap/ui/core/qunit/component/testdata/v2models/extension/Component.js +4 -4
  516. package/test/sap/ui/core/qunit/component/testdata/v2models/parent/Component.js +12 -12
  517. package/test/sap/ui/core/qunit/component/testdata/v2models/parent/CustomModel.js +2 -2
  518. package/test/sap/ui/core/qunit/component/testdata/v2models/parent/ModelNotDefined.js +2 -2
  519. package/test/sap/ui/core/qunit/component/testdata/v2models/parentValid/Component.js +11 -11
  520. package/test/sap/ui/core/qunit/component/testdata/v2models/ui5Urls/Component.js +2 -2
  521. package/test/sap/ui/core/qunit/component/testdata/v2models/ui5Urls/manifest.json +2 -2
  522. package/test/sap/ui/core/qunit/component/testdata/v2version/Component.js +2 -2
  523. package/test/sap/ui/core/qunit/component/testdata/v2version/manifest.json +2 -2
  524. package/test/sap/ui/core/qunit/component/testdata/v4models/Component.js +3 -3
  525. package/test/sap/ui/core/qunit/component/testdata/v4models/cacheTokens/Component.js +3 -3
  526. package/test/sap/ui/core/qunit/component/testdata/v4models/sapSystem/Component.js +2 -2
  527. package/test/sap/ui/core/qunit/component/testdata/v4models/sapSystem/manifest.json +1 -1
  528. package/test/sap/ui/core/qunit/component/testdata/v4models/unsupportedVersion/Component.js +3 -3
  529. package/test/sap/ui/core/qunit/component/testdata/verticalLayout/Component.js +1 -1
  530. package/test/sap/ui/core/qunit/component/testdata/verticalLayout_legacyAPIs/Component.js +1 -1
  531. package/test/sap/ui/core/qunit/component/testdata/view/Main.controller.js +2 -2
  532. package/test/sap/ui/core/qunit/component/testdata/view/Main.view.xml +1 -1
  533. package/test/sap/ui/core/qunit/component/testdata/view/MainAsync.view.xml +1 -1
  534. package/test/sap/ui/core/qunit/component/testdata/view/MainAsyncWithWrongNesting.view.xml +1 -1
  535. package/test/sap/ui/core/qunit/component/testdata/view/Nested.view.xml +1 -1
  536. package/test/sap/ui/core/qunit/component/testsuite.component.qunit.js +2 -8
  537. package/test/sap/ui/core/qunit/composite/XMLComposite.qunit.js +1 -1
  538. package/test/sap/ui/core/qunit/dnd/DragAndDrop.qunit.js +1 -1
  539. package/test/sap/ui/core/qunit/dnd/DragInfo.qunit.js +1 -1
  540. package/test/sap/ui/core/qunit/dnd/DropInfo.qunit.js +1 -1
  541. package/test/sap/ui/core/qunit/fieldhelp/FieldHelp.qunit.js +184 -51
  542. package/test/sap/ui/core/qunit/fieldhelp/FieldHelpUtil.qunit.js +2 -0
  543. package/test/sap/ui/core/qunit/generic/ControlMemoryLeaks.qunit.js +1 -1
  544. package/test/sap/ui/core/qunit/generic/DuplicateIdCheck.qunit.js +1 -1
  545. package/test/sap/ui/core/qunit/generic/legacy/ControlIterator.qunit.js +1 -1
  546. package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaks.qunit.js +1 -1
  547. package/test/sap/ui/core/qunit/generic/legacy/DuplicateIdCheck.qunit.js +1 -1
  548. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +188 -61
  549. package/test/sap/ui/core/qunit/isBehindOtherElement.qunit.js +1 -1
  550. package/test/sap/ui/core/qunit/jquery.sap.events.qunit.js +1 -1
  551. package/test/sap/ui/core/qunit/jquery.sap.ui.qunit.js +1 -1
  552. package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +1 -1
  553. package/test/sap/ui/core/qunit/mvc/AnyView.qunit.js +1 -1
  554. package/test/sap/ui/core/qunit/mvc/AnyViewAsync.qunit.js +1 -1
  555. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +1 -1
  556. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorAsync_unavoidablyUsingInlineStyle.qunit.js +1 -1
  557. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +1 -1
  558. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +1 -1
  559. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing.qunit.js +1 -1
  560. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing_legacyAPIs.qunit.js +1 -1
  561. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AnyViewAsync_legacyAPIs.qunit.js +1 -1
  562. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AnyView_legacyAPIs.qunit.js +1 -1
  563. package/test/sap/ui/core/qunit/mvc_legacyAPIs/HTMLView_legacyAPIs.qunit.js +1 -1
  564. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLTemplateProcessorRequireXML_legacyAPIs.qunit.js +1 -1
  565. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLView_legacyAPIs.qunit.js +1 -1
  566. package/test/sap/ui/core/qunit/odata/ODataAnnotations.qunit.js +1 -1
  567. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +511 -21
  568. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +382 -3
  569. package/test/sap/ui/core/qunit/odata/v2/V2ODataModel.qunit.js +1 -1
  570. package/test/sap/ui/core/qunit/odata/v2/V2ODataModelB.qunit.js +1 -1
  571. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +28 -4
  572. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +34 -20
  573. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +80 -15
  574. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +90 -6
  575. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1201 -202
  576. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +34 -0
  577. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +38 -0
  578. package/test/sap/ui/core/qunit/odata/v4/data/annotations_tea_busi.xml +14 -0
  579. package/test/sap/ui/core/qunit/odata/v4/data/metadata_tea_busi_supplier.xml +36 -0
  580. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +319 -38
  581. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +22 -9
  582. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +2 -2
  583. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +53 -10
  584. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +6 -0
  585. package/test/sap/ui/core/qunit/odata/v4/lib/_TreeState.qunit.js +30 -1
  586. package/test/sap/ui/core/qunit/opa/Opa5PageObject.qunit.js +1 -1
  587. package/test/sap/ui/core/qunit/opa/OpaPlugin.qunit.js +1 -1
  588. package/test/sap/ui/core/qunit/opa/RecordReplay.qunit.js +1 -1
  589. package/test/sap/ui/core/qunit/opa/_ControlFinder.qunit.js +1 -1
  590. package/test/sap/ui/core/qunit/opa/actions/Action.qunit.js +1 -1
  591. package/test/sap/ui/core/qunit/opa/actions/EnterText.qunit.js +1 -1
  592. package/test/sap/ui/core/qunit/opa/actions/Press.qunit.js +1 -1
  593. package/test/sap/ui/core/qunit/opa/autowaiter/_cssAnimationWaiter.js +1 -1
  594. package/test/sap/ui/core/qunit/opa/autowaiter/_cssTransitionWaiter.js +1 -1
  595. package/test/sap/ui/core/qunit/opa/autowaiter/_jsAnimationWaiter.js +1 -1
  596. package/test/sap/ui/core/qunit/opa/autowaiter/_navigationContainerWaiter.js +1 -1
  597. package/test/sap/ui/core/qunit/opa/autowaiter/_resourceWaiter.js +1 -1
  598. package/test/sap/ui/core/qunit/opa/fixture/bindingPath.js +1 -1
  599. package/test/sap/ui/core/qunit/opa/matchers/Interactable.qunit.js +1 -1
  600. package/test/sap/ui/core/qunit/opa/matchers/LabelFor.qunit.js +1 -1
  601. package/test/sap/ui/core/qunit/opa/matchers/Sibling.qunit.js +1 -1
  602. package/test/sap/ui/core/qunit/opa/matchers/Visible.qunit.js +1 -1
  603. package/test/sap/ui/core/qunit/opa/matchers/_Busy.qunit.js +1 -1
  604. package/test/sap/ui/core/qunit/opa/matchers/_Editable.qunit.js +1 -1
  605. package/test/sap/ui/core/qunit/opa/matchers/_Enabled.qunit.js +1 -1
  606. package/test/sap/ui/core/qunit/opa/matchers/_Visitor.qunit.js +1 -1
  607. package/test/sap/ui/core/qunit/opa/opa5/actions.qunit.js +1 -1
  608. package/test/sap/ui/core/qunit/opa/opa5/basics.qunit.js +1 -1
  609. package/test/sap/ui/core/qunit/opa/opa5/logging.qunit.js +1 -1
  610. package/test/sap/ui/core/qunit/opa/opa5/matchers.qunit.js +1 -1
  611. package/test/sap/ui/core/qunit/opa/selectors/_BindingPath.js +1 -1
  612. package/test/sap/ui/core/qunit/opa/selectors/_ControlSelectorGenerator.js +1 -1
  613. package/test/sap/ui/core/qunit/opa/selectors/_ControlSelectorValidator.js +1 -1
  614. package/test/sap/ui/core/qunit/opa/selectors/_DropdownItem.js +1 -1
  615. package/test/sap/ui/core/qunit/opa/selectors/_GlobalID.js +1 -1
  616. package/test/sap/ui/core/qunit/opa/selectors/_LabelFor.js +1 -1
  617. package/test/sap/ui/core/qunit/opa/selectors/_Properties.js +1 -1
  618. package/test/sap/ui/core/qunit/opa/selectors/_Selector.js +1 -1
  619. package/test/sap/ui/core/qunit/opa/selectors/_TableRowItem.js +1 -1
  620. package/test/sap/ui/core/qunit/opa/selectors/_ViewID.js +1 -1
  621. package/test/sap/ui/core/qunit/opa/testsuite.opa.qunit.js +448 -426
  622. package/test/sap/ui/core/qunit/performance/trace/FESR.qunit.js +8 -4
  623. package/test/sap/ui/core/qunit/performance/trace/Interaction.qunit.js +1 -1
  624. package/test/sap/ui/core/qunit/routing/Placeholder.qunit.js +1 -1
  625. package/test/sap/ui/core/qunit/routing/PlaceholderOptOut.qunit.js +1 -1
  626. package/test/sap/ui/core/qunit/tmpl/Template.qunit.js +1 -1
  627. package/test/sap/ui/core/qunit/ui5classes/ManagedObject.qunit.js +62 -1
  628. package/test/sap/ui/core/qunit/util/InvisibleMessage.qunit.js +1 -1
  629. package/test/sap/ui/core/qunit/util/LabelEnablement.qunit.js +1 -1
  630. package/test/sap/ui/core/qunit/util/Popup.qunit.js +1 -1
  631. package/test/sap/ui/core/qunit/util/ResponsivePaddingsEnablement.qunit.js +1 -1
  632. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +1 -1
  633. package/test/sap/ui/core/qunit/util/jquery.sap.dom.qunit.js +1 -1
  634. package/test/sap/ui/core/qunit/util/reflection/BaseTreeModifier.qunit.js +3 -3
  635. package/test/sap/ui/core/qunit/util/reflection/JsControlTreeModifier.qunit.js +3 -3
  636. package/test/sap/ui/core/qunit/util/reflection/XmlTreeModifier.qunit.js +3 -3
  637. package/test/sap/ui/core/qunit/util/reflection/testdata/comp/Component.js +10 -0
  638. package/test/sap/ui/core/qunit/util/reflection/testsuite.reflection.qunit.html +14 -0
  639. package/test/sap/ui/core/qunit/util/reflection/testsuite.reflection.qunit.js +30 -0
  640. package/test/sap/ui/core/qunit/util/testsuite.util.qunit.js +3 -56
  641. package/test/sap/ui/core/relnotes/changes-1.126.json +1 -17
  642. package/test/sap/ui/core/relnotes/changes-1.127.json +52 -0
  643. package/test/sap/ui/core/samples/databinding/UnitTable/ui5.yaml +1 -1
  644. package/test/sap/ui/qunit/TestRunner.js +721 -521
  645. package/test/sap/ui/qunit/testrunner.css +123 -20
  646. package/test/sap/ui/qunit/testrunner.html +57 -287
  647. /package/test/sap/ui/core/qunit/{component/testdata/other → util/reflection/testdata/comp}/fragment-withTemplating.fragment.xml +0 -0
@@ -2674,7 +2674,7 @@ sap.ui.define([
2674
2674
  sinon.match.same(oGroupNode), sinon.match.same(oExpanded))
2675
2675
  .callThrough(); // "@$ui5.node.isExpanded" is checked once read has finished
2676
2676
  this.mock(oCache.oTreeState).expects("expand").exactly(vHasCache === "expanding" ? 0 : 1)
2677
- .withExactArgs(sinon.match.same(oGroupNode));
2677
+ .withExactArgs(sinon.match.same(oGroupNode), "~iLevels~");
2678
2678
  oCacheMock.expects("createGroupLevelCache").exactly(vHasCache ? 0 : 1)
2679
2679
  .withExactArgs(sinon.match.same(oGroupNode)).returns(oGroupLevelCache);
2680
2680
  oHelperMock.expects("setPrivateAnnotation").exactly(vHasCache ? 0 : 1)
@@ -2718,7 +2718,7 @@ sap.ui.define([
2718
2718
 
2719
2719
  // code under test
2720
2720
  oPromise = oCache.expand(
2721
- oGroupLock, vGroupNodeOrPath, "~fnDataRequested~"
2721
+ oGroupLock, vGroupNodeOrPath, "~iLevels~", "~fnDataRequested~"
2722
2722
  ).then(function (iResult) {
2723
2723
  var iExpectedCount = bSubtotalsAtBottom ? 8 : 7;
2724
2724
 
@@ -2812,7 +2812,8 @@ sap.ui.define([
2812
2812
  .withExactArgs(sinon.match.same(oCache.mChangeListeners), "~path~",
2813
2813
  sinon.match.same(oGroupNode), sinon.match.same(oExpanded))
2814
2814
  .callThrough(); // "@$ui5.node.isExpanded" is checked once read has finished
2815
- this.mock(oCache.oTreeState).expects("expand").withExactArgs(sinon.match.same(oGroupNode));
2815
+ this.mock(oCache.oTreeState).expects("expand")
2816
+ .withExactArgs(sinon.match.same(oGroupNode), "~iLevels~");
2816
2817
  this.mock(oCache).expects("createGroupLevelCache")
2817
2818
  .withExactArgs(sinon.match.same(oGroupNode)).returns(oGroupLevelCache);
2818
2819
  this.mock(oGroupLevelCache).expects("read")
@@ -2833,7 +2834,7 @@ sap.ui.define([
2833
2834
 
2834
2835
  // code under test
2835
2836
  oPromise = oCache.expand(
2836
- oGroupLock, "~path~", "~fnDataRequested~"
2837
+ oGroupLock, "~path~", "~iLevels~", "~fnDataRequested~"
2837
2838
  ).then(function (iResult) {
2838
2839
  assert.strictEqual(iResult, 7);
2839
2840
 
@@ -2913,6 +2914,12 @@ sap.ui.define([
2913
2914
  rank : 27
2914
2915
  },
2915
2916
  "@$ui5.node.level" : 10
2917
+ }, {
2918
+ "@$ui5._" : {
2919
+ predicate : "('selected')"
2920
+ },
2921
+ "@$ui5.context.isSelected" : true,
2922
+ "@$ui5.node.level" : 12
2916
2923
  }],
2917
2924
  rank : 42
2918
2925
  },
@@ -2943,12 +2950,14 @@ sap.ui.define([
2943
2950
  .withExactArgs(sinon.match.same(oCache.mChangeListeners), "~path~",
2944
2951
  sinon.match.same(oGroupNode), {"@$ui5.node.isExpanded" : true})
2945
2952
  .callThrough(); // "@$ui5.node.isExpanded" is checked once read has finished
2946
- this.mock(oCache.oTreeState).expects("expand").withExactArgs(sinon.match.same(oGroupNode));
2953
+ this.mock(oCache.oTreeState).expects("expand")
2954
+ .withExactArgs(sinon.match.same(oGroupNode), "~iLevels~");
2947
2955
  oCacheMock.expects("createGroupLevelCache").never();
2948
2956
  this.mock(oGroupLevelCache).expects("read").never();
2949
2957
  oCacheMock.expects("addElements").never();
2950
2958
  this.mock(_AggregationHelper).expects("createPlaceholder").never();
2951
- oCacheMock.expects("expand").withExactArgs(sinon.match.same(oGroupLock), "~path~")
2959
+ oCacheMock.expects("expand")
2960
+ .withExactArgs(sinon.match.same(oGroupLock), "~path~", "~iLevels~")
2952
2961
  .callThrough(); // for code under test
2953
2962
  oCacheMock.expects("expand").exactly(bStale ? 0 : 1)
2954
2963
  .withExactArgs(sinon.match.same(_GroupLock.$cached), sinon.match.same(aSpliced[2]))
@@ -2967,7 +2976,7 @@ sap.ui.define([
2967
2976
  }
2968
2977
 
2969
2978
  // code under test
2970
- oPromise = oCache.expand(oGroupLock, "~path~").then(function (iResult) {
2979
+ oPromise = oCache.expand(oGroupLock, "~path~", "~iLevels~").then(function (iResult) {
2971
2980
  assert.strictEqual(iResult, (bStale ? 0 : 100) + 200001);
2972
2981
 
2973
2982
  assert.strictEqual(oCache.aElements.length, 200005, ".length");
@@ -2980,8 +2989,8 @@ sap.ui.define([
2980
2989
 
2981
2990
  // check expanded nodes
2982
2991
  assert.deepEqual(Object.keys(oCache.aElements),
2983
- ["0", "1", "2", "3", "4", "5", "6", "200002", "200003", "200004", "$byPredicate",
2984
- "$count"]);
2992
+ ["0", "1", "2", "3", "4", "5", "6", "7", "200002", "200003", "200004",
2993
+ "$byPredicate", "$count"]);
2985
2994
  assert.strictEqual(oCache.aElements[2], aSpliced[0]);
2986
2995
  assert.strictEqual(aSpliced[0]["@$ui5.node.level"], 0, "unchanged");
2987
2996
  assert.strictEqual(oCache.aElements[3], aSpliced[1]);
@@ -3003,11 +3012,14 @@ sap.ui.define([
3003
3012
  assert.strictEqual(oCache.aElements[200003], aElements[2]);
3004
3013
  assert.strictEqual(oCache.aElements[200004], aElements[3]);
3005
3014
 
3006
- assert.deepEqual(oCache.aElements.$byPredicate, bStale ? {} : {
3015
+ assert.deepEqual(oCache.aElements.$byPredicate, bStale ? {
3016
+ "('selected')" : aSpliced[5]
3017
+ } : {
3007
3018
  "('C')" : aSpliced[2],
3008
3019
  "('created')" : aSpliced[3],
3009
3020
  "($uid=1-23)" : aSpliced[3],
3010
3021
  "('A')" : aSpliced[4],
3022
+ "('selected')" : aSpliced[5],
3011
3023
  "('D')" : aSpliced[200000]
3012
3024
  });
3013
3025
  });
@@ -3033,17 +3045,48 @@ sap.ui.define([
3033
3045
  this.mock(_Helper).expects("updateAll")
3034
3046
  .withExactArgs(sinon.match.same(oCache.mChangeListeners), "~path~",
3035
3047
  sinon.match.same(oGroupNode), {"@$ui5.node.isExpanded" : true});
3036
- this.mock(oCache.oTreeState).expects("expand").withExactArgs(sinon.match.same(oGroupNode));
3048
+ this.mock(oCache.oTreeState).expects("expand")
3049
+ .withExactArgs(sinon.match.same(oGroupNode), "~iLevels~");
3037
3050
  this.mock(oCache).expects("createGroupLevelCache").never();
3038
3051
 
3039
3052
  // code under test
3040
- return oCache.expand("~oGroupLock~", "~path~", "~fnDataRequested~").then(function (iCount) {
3053
+ return oCache.expand(
3054
+ "~oGroupLock~", "~path~", "~iLevels~", "~fnDataRequested~")
3055
+ .then(function (iCount) {
3041
3056
  assert.strictEqual(iCount, -1);
3042
3057
  });
3043
3058
  });
3044
3059
 
3060
+ //*********************************************************************************************
3061
+ [2, 42].forEach(function (iLevels) {
3062
+ QUnit.test("expand: refresh needed", function (assert) {
3063
+ const oCache = _AggregationCache.create(this.oRequestor, "~", "", {}, {
3064
+ hierarchyQualifier : "X"
3065
+ });
3066
+ const oGroupNode = {};
3067
+
3068
+ // ensure the collection cache cannot read data
3069
+ _Helper.setPrivateAnnotation(oGroupNode, "cache", "~oGroupLevelCache~");
3070
+ this.mock(oCache).expects("getValue").withExactArgs("~path~").returns(oGroupNode);
3071
+ this.mock(_Helper).expects("updateAll")
3072
+ .withExactArgs(sinon.match.same(oCache.mChangeListeners), "~path~",
3073
+ sinon.match.same(oGroupNode), {"@$ui5.node.isExpanded" : true});
3074
+ this.mock(oCache.oTreeState).expects("expand")
3075
+ .withExactArgs(sinon.match.same(oGroupNode), iLevels);
3076
+ this.mock(oCache).expects("createGroupLevelCache").never();
3077
+
3078
+ // code under test
3079
+ return oCache.expand(
3080
+ "~oGroupLock~", "~path~", iLevels, "~fnDataRequested~")
3081
+ .then(function (iCount) {
3082
+ assert.strictEqual(iCount, -1);
3083
+ });
3084
+ });
3085
+ });
3086
+
3045
3087
  //*********************************************************************************************
3046
3088
  [false, true].forEach(function (bSelf) {
3089
+ [1, undefined].forEach(function (iLevels) {
3047
3090
  var sTitle = "expand: collapse " + (bSelf ? "self" : "parent") + " before expand has finished";
3048
3091
 
3049
3092
  QUnit.test(sTitle, function (assert) {
@@ -3081,7 +3124,8 @@ sap.ui.define([
3081
3124
  .withExactArgs(sinon.match.same(oCache.mChangeListeners), "~path~",
3082
3125
  sinon.match.same(oGroupNode), {"@$ui5.node.isExpanded" : true})
3083
3126
  .callThrough(); // "@$ui5.node.isExpanded" is checked once read has finished
3084
- this.mock(oCache.oTreeState).expects("expand").withExactArgs(sinon.match.same(oGroupNode));
3127
+ this.mock(oCache.oTreeState).expects("expand")
3128
+ .withExactArgs(sinon.match.same(oGroupNode), iLevels);
3085
3129
  this.mock(oCache).expects("createGroupLevelCache")
3086
3130
  .withExactArgs(sinon.match.same(oGroupNode)).returns(oGroupLevelCache);
3087
3131
  this.mock(oGroupLevelCache).expects("read")
@@ -3093,7 +3137,7 @@ sap.ui.define([
3093
3137
 
3094
3138
  // code under test
3095
3139
  oPromise = oCache.expand(
3096
- oGroupLock, "~path~", "~fnDataRequested~"
3140
+ oGroupLock, "~path~", iLevels, "~fnDataRequested~"
3097
3141
  ).then(function (iResult) {
3098
3142
  assert.strictEqual(iResult, 0);
3099
3143
  if (bSelf) {
@@ -3118,6 +3162,7 @@ sap.ui.define([
3118
3162
 
3119
3163
  return oPromise;
3120
3164
  });
3165
+ });
3121
3166
  });
3122
3167
 
3123
3168
  //*********************************************************************************************
@@ -3141,7 +3186,8 @@ sap.ui.define([
3141
3186
  this.mock(oCache).expects("getValue").withExactArgs("~path~").returns(oGroupNode);
3142
3187
  this.mock(oCache).expects("createGroupLevelCache")
3143
3188
  .withExactArgs(sinon.match.same(oGroupNode)).returns(oGroupLevelCache);
3144
- this.mock(oCache.oTreeState).expects("expand").withExactArgs(sinon.match.same(oGroupNode));
3189
+ this.mock(oCache.oTreeState).expects("expand")
3190
+ .withExactArgs(sinon.match.same(oGroupNode), "~iLevels~");
3145
3191
  this.mock(oGroupLevelCache).expects("read")
3146
3192
  .withExactArgs(0, oCache.iReadLength, 0, "~oGroupLock~", "~fnDataRequested~")
3147
3193
  .returns(SyncPromise.resolve(Promise.resolve().then(function () {
@@ -3157,7 +3203,9 @@ sap.ui.define([
3157
3203
  })));
3158
3204
 
3159
3205
  // code under test
3160
- return oCache.expand("~oGroupLock~", "~path~", "~fnDataRequested~").then(function () {
3206
+ return oCache.expand(
3207
+ "~oGroupLock~", "~path~", "~iLevels~", "~fnDataRequested~")
3208
+ .then(function () {
3161
3209
  assert.ok(false);
3162
3210
  }, function (oResult) {
3163
3211
  assert.strictEqual(oResult, oError);
@@ -3192,7 +3240,9 @@ sap.ui.define([
3192
3240
  .resolves({value : {$count : 42}}); // simplified ;-)
3193
3241
 
3194
3242
  // code under test
3195
- return oCache.expand("~oGroupLock~", oGroupNode, "~fnDataRequested~").then(function () {
3243
+ return oCache.expand(
3244
+ "~oGroupLock~", oGroupNode, "~iLevels~", "~fnDataRequested~")
3245
+ .then(function () {
3196
3246
  assert.ok(false);
3197
3247
  }, function (oError) {
3198
3248
  assert.strictEqual(oError.message, "Unexpected structural change: groupLevelCount");
@@ -3351,7 +3401,6 @@ sap.ui.define([
3351
3401
  oCache.aElements = [{
3352
3402
  // "@$ui5.node.level" : ignored
3353
3403
  }, {
3354
- "@$ui5.node.isExpanded" : true,
3355
3404
  "@$ui5.node.level" : 5
3356
3405
  }, {
3357
3406
  "@$ui5.node.level" : 6 // child
@@ -3371,7 +3420,6 @@ sap.ui.define([
3371
3420
  oCache.aElements = [{
3372
3421
  // "@$ui5.node.level" : ignored
3373
3422
  }, {
3374
- "@$ui5.node.isExpanded" : true,
3375
3423
  "@$ui5.node.level" : 5
3376
3424
  }, {
3377
3425
  "@$ui5.node.level" : 6 // child
@@ -3387,8 +3435,95 @@ sap.ui.define([
3387
3435
  assert.strictEqual(oCache.countDescendants(oCache.aElements[1], 1), 3,
3388
3436
  "number of removed elements");
3389
3437
  });
3438
+
3439
+ QUnit.test("countDescendants: sibling on level 1, hierarchy=${bHierarchy}", function (assert) {
3440
+ const oCache = _AggregationCache.create(this.oRequestor, "~", "", {}, oAggregation);
3441
+ oCache.aElements = [{
3442
+ // "@$ui5.node.level" : ignored
3443
+ }, {
3444
+ "@$ui5.node.level" : 1
3445
+ }, {
3446
+ "@$ui5.node.level" : 2 // child
3447
+ }, {
3448
+ "@$ui5.node.level" : 3 // grandchild
3449
+ }, {
3450
+ "@$ui5.node.level" : 2 // child
3451
+ }, {
3452
+ // no rank
3453
+ "@$ui5.node.level" : 1 // sibling
3454
+ }]; // simulate a read
3455
+
3456
+ // code under test
3457
+ assert.strictEqual(oCache.countDescendants(oCache.aElements[1], 1), 3,
3458
+ "number of removed elements");
3459
+ });
3390
3460
  });
3391
3461
 
3462
+ //*********************************************************************************************
3463
+ QUnit.test("countDescendants: do not collapse grand total", function (assert) {
3464
+ const oCache = _AggregationCache.create(this.oRequestor, "~", "", {},
3465
+ {aggregate : {}, group : {}, groupLevels : ["foo"]});
3466
+ oCache.aElements = [{
3467
+ // "@$ui5.node.level" : ignored
3468
+ }, {
3469
+ "@$ui5.node.level" : 5
3470
+ }, {
3471
+ "@$ui5.node.level" : 6 // child
3472
+ }, {
3473
+ "@$ui5.node.level" : 7 // grandchild
3474
+ }, {
3475
+ "@$ui5.node.level" : 6 // child
3476
+ }, {
3477
+ "@$ui5.node.level" : 0 // grand total
3478
+ }]; // simulate a read
3479
+
3480
+ // code under test
3481
+ assert.strictEqual(oCache.countDescendants(oCache.aElements[1], 1), 3,
3482
+ "number of removed elements");
3483
+ });
3484
+
3485
+ //*********************************************************************************************
3486
+ QUnit.test("countDescendants: level 0 placeholder as sibling", function (assert) {
3487
+ const oCache = _AggregationCache.create(this.oRequestor, "~", "", {},
3488
+ {expandTo : 2, hierarchyQualifier : "X"});
3489
+ oCache.aElements = [{
3490
+ // "@$ui5.node.level" : ignored
3491
+ }, {
3492
+ "@$ui5._" : {
3493
+ descendants : 2
3494
+ },
3495
+ "@$ui5.node.level" : 1
3496
+ }, {
3497
+ // no rank
3498
+ "@$ui5.node.level" : 2 // created child, filtered out
3499
+ }, {
3500
+ "@$ui5._" : {
3501
+ placeholder : 1,
3502
+ rank : "~" // the actual rank does not matter
3503
+ },
3504
+ "@$ui5.node.level" : 0 // child
3505
+ }, {
3506
+ // rank does not matter at all
3507
+ "@$ui5.node.level" : 3 // grandchild
3508
+ }, {
3509
+ "@$ui5._" : {
3510
+ placeholder : true,
3511
+ rank : "~" // the actual rank does not matter
3512
+ },
3513
+ "@$ui5.node.level" : 0 // child
3514
+ }, {
3515
+ "@$ui5._" : {
3516
+ placeholder : true,
3517
+ rank : "~" // the actual rank does not matter
3518
+ },
3519
+ "@$ui5.node.level" : 0 // sibling
3520
+ }]; // simulate a read
3521
+
3522
+ // code under test
3523
+ assert.strictEqual(oCache.countDescendants(oCache.aElements[1], 1), 4,
3524
+ "number of removed elements");
3525
+ });
3526
+
3392
3527
  //*********************************************************************************************
3393
3528
  [false, true].forEach(function (bUnifiedCache) {
3394
3529
  const sTitle = "countDescendants: skip descendants, unified cache: "
@@ -4478,31 +4613,37 @@ sap.ui.define([
4478
4613
  },
4479
4614
  oAggregationHelperMock = this.mock(_AggregationHelper),
4480
4615
  oCache = _AggregationCache.create(this.oRequestor, "~", "", {}, oAggregation),
4481
- aElements = [{
4482
- "@$ui5._" : {predicate : "('A')"}
4483
- }, {
4616
+ oElementA = {
4617
+ "@$ui5._" : {predicate : "('A')", transientPredicate : "($uid=4-56)"}
4618
+ },
4619
+ aElements = [],
4620
+ aResult;
4621
+
4622
+ aElements.$byPredicate = {
4623
+ "('A')" : oElementA,
4624
+ "('B')" : {
4484
4625
  "@$ui5._" : {predicate : "('B')"}
4485
- }, {
4626
+ }, "('C')" : {
4486
4627
  "@$ui5._" : {predicate : "('C')"}
4487
- }, {
4628
+ }, "($uid=1-23)" : {
4488
4629
  "@$ui5._" : {transientPredicate : "($uid=1-23)"} // must be ignored
4489
- }],
4490
- aResult;
4630
+ }, "($uid=4-56)" : oElementA
4631
+ };
4491
4632
 
4492
- oCache.aElements = aElements.slice();
4633
+ oCache.aElements.$byPredicate = aElements.$byPredicate;
4493
4634
  oAggregationHelperMock.expects("markSplicedStale")
4494
- .withExactArgs(sinon.match.same(aElements[0]));
4635
+ .withExactArgs(sinon.match.same(aElements.$byPredicate["('A')"]));
4495
4636
  this.mock(oCache).expects("turnIntoPlaceholder")
4496
- .withExactArgs(sinon.match.same(aElements[1]), "('B')");
4637
+ .withExactArgs(sinon.match.same(aElements.$byPredicate["('B')"]), "('B')");
4497
4638
  oAggregationHelperMock.expects("markSplicedStale")
4498
- .withExactArgs(sinon.match.same(aElements[2]));
4639
+ .withExactArgs(sinon.match.same(aElements.$byPredicate["('C')"]));
4499
4640
 
4500
4641
  // code under test
4501
4642
  aResult = oCache.keepOnlyGivenElements(["('A')", "('C')"]);
4502
4643
 
4503
4644
  assert.strictEqual(aResult.length, 2);
4504
- assert.strictEqual(aResult[0], aElements[0]);
4505
- assert.strictEqual(aResult[1], aElements[2]);
4645
+ assert.strictEqual(aResult[0], aElements.$byPredicate["('A')"]);
4646
+ assert.strictEqual(aResult[1], aElements.$byPredicate["('C')"]);
4506
4647
  });
4507
4648
 
4508
4649
  //*********************************************************************************************
@@ -4552,16 +4693,20 @@ sap.ui.define([
4552
4693
 
4553
4694
  [undefined, "~iRank~"].forEach((vRank, i) => {
4554
4695
  //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4555
- function test(self, assert, oCache, sParent = null) {
4556
- oCache.aElements.$byPredicate["('23')"] = "~oChildNode~";
4696
+ function test(self, assert, oCache, sParent = null, fnAssert = () => {}) {
4697
+ const oChildNode = {
4698
+ "@$ui5.context.isTransient" : "n/a"
4699
+ };
4700
+ oCache.aElements.$byPredicate["('23')"] = oChildNode;
4557
4701
  self.mock(self.oRequestor).expects("request")
4558
4702
  .withExactArgs("PATCH", "Foo('23')", "~oGroupLock~", {
4559
- "If-Match" : "~oChildNode~",
4703
+ "If-Match" : sinon.match.same(oChildNode),
4560
4704
  Prefer : "return=minimal"
4561
4705
  }, {"myParent@odata.bind" : sParent},
4562
4706
  /*fnSubmit*/null, /*fnCancel*/sinon.match.func)
4563
4707
  .returns("A");
4564
- self.mock(oCache).expects("requestRank").withExactArgs("~oChildNode~", "~oGroupLock~", true)
4708
+ self.mock(oCache).expects("requestRank")
4709
+ .withExactArgs(sinon.match.same(oChildNode), "~oGroupLock~", true)
4565
4710
  .returns("C");
4566
4711
  self.mock(SyncPromise).expects("all").withExactArgs(["A", undefined, "C", undefined])
4567
4712
  .returns(SyncPromise.resolve([,, vRank]));
@@ -4582,6 +4727,8 @@ sap.ui.define([
4582
4727
  vRank ? "~findIndex~" : undefined,
4583
4728
  undefined
4584
4729
  ]);
4730
+
4731
+ fnAssert(oChildNode);
4585
4732
  }
4586
4733
 
4587
4734
  //*********************************************************************************************
@@ -4617,7 +4764,9 @@ sap.ui.define([
4617
4764
  oTreeStateMock.expects("expand").never();
4618
4765
  this.mock(_Helper).expects("hasPrivateAnnotation").never();
4619
4766
 
4620
- test(this, assert, oCache);
4767
+ test(this, assert, oCache, null, (oChildNode) => {
4768
+ assert.notOk("@$ui5.context.isTransient" in oChildNode);
4769
+ });
4621
4770
  });
4622
4771
 
4623
4772
  //*********************************************************************************************
@@ -5163,6 +5312,7 @@ sap.ui.define([
5163
5312
  return new SyncPromise(function (resolve) {
5164
5313
  setTimeout(function () {
5165
5314
  _Helper.setPrivateAnnotation(oEntityData, "predicate", "('ABC')");
5315
+ oEntityData["@$ui5.context.isTransient"] = "~isTransient~";
5166
5316
  oHelperMock.expects("removeByPath")
5167
5317
  .withExactArgs(sinon.match.same(oCache.mPostRequests),
5168
5318
  "~sTransientPredicate~", sinon.match.same(oEntityData));
@@ -6154,6 +6304,7 @@ sap.ui.define([
6154
6304
  //*********************************************************************************************
6155
6305
  QUnit.test("getSiblingIndex: group level", function (assert) {
6156
6306
  const oCache = _AggregationCache.create(this.oRequestor, "Foo", "", {}, {
6307
+ // expandTo : 1, // @see _AggregationHelper.buildApply4Hierarchy
6157
6308
  hierarchyQualifier : "X"
6158
6309
  });
6159
6310
  const oCacheMock = this.mock(oCache);
@@ -6218,12 +6369,70 @@ sap.ui.define([
6218
6369
 
6219
6370
  // code under test
6220
6371
  assert.strictEqual(oCache.getSiblingIndex(5, -1), "D");
6372
+
6373
+ oCacheMock.expects("findIndex").withExactArgs(1, sinon.match.same(oGroupLevel))
6374
+ .returns("E");
6375
+ oCache.aElements.E = {
6376
+ "@$ui5._" : {parent : oGroupLevel},
6377
+ "@$ui5.context.isTransient" : false // OOP
6378
+ };
6379
+ oCacheMock.expects("getSiblingIndex").withExactArgs(2, +1, "~bAllowPlaceholder~")
6380
+ .callThrough(); // c.u.t.
6381
+ oCacheMock.expects("getSiblingIndex").withExactArgs("E", +1, "~bAllowPlaceholder~")
6382
+ .returns("E++");
6383
+
6384
+ // code under test ("sibling is out of place, skip it!")
6385
+ assert.strictEqual(oCache.getSiblingIndex(2, +1, "~bAllowPlaceholder~"), "E++");
6386
+
6387
+ oCacheMock.expects("findIndex").withExactArgs(0, sinon.match.same(oGroupLevel))
6388
+ .returns("F");
6389
+ oCache.aElements.F = {
6390
+ "@$ui5._" : {parent : oGroupLevel},
6391
+ "@$ui5.context.isTransient" : false // OOP
6392
+ };
6393
+ oCacheMock.expects("getSiblingIndex").withExactArgs(4, -1, "~bAllowPlaceholder~")
6394
+ .callThrough(); // c.u.t.
6395
+ oCacheMock.expects("getSiblingIndex").withExactArgs("F", -1, "~bAllowPlaceholder~")
6396
+ .returns("F--");
6397
+
6398
+ // code under test ("sibling is out of place, skip it!")
6399
+ assert.strictEqual(oCache.getSiblingIndex(4, -1, "~bAllowPlaceholder~"), "F--");
6400
+ });
6401
+
6402
+ //*********************************************************************************************
6403
+ QUnit.test("getSiblingIndex: group level, index not found", function (assert) {
6404
+ const oCache = _AggregationCache.create(this.oRequestor, "Foo", "", {}, {
6405
+ // expandTo : 1, // @see _AggregationHelper.buildApply4Hierarchy
6406
+ hierarchyQualifier : "X"
6407
+ });
6408
+ const oCacheMock = this.mock(oCache);
6409
+ const oGroupLevel = {};
6410
+ oCache.aElements = [/*first level*/, {
6411
+ "@$ui5._" : {
6412
+ parent : oGroupLevel,
6413
+ rank : undefined // OOP
6414
+ },
6415
+ "@$ui5.node.level" : 2
6416
+ }, {
6417
+ "@$ui5._" : {
6418
+ parent : oGroupLevel,
6419
+ rank : 0
6420
+ },
6421
+ "@$ui5.node.level" : 2
6422
+ }];
6423
+ oGroupLevel.aElements = [oCache.aElements[1], oCache.aElements[2]];
6424
+ oGroupLevel.aElements.$count = 2;
6425
+ oCacheMock.expects("findIndex").withExactArgs(1, sinon.match.same(oGroupLevel))
6426
+ .returns(-1);
6427
+
6428
+ // code under test
6429
+ assert.strictEqual(oCache.getSiblingIndex(2, +1), -1);
6221
6430
  });
6222
6431
 
6223
6432
  //*********************************************************************************************
6224
6433
  QUnit.test("getSiblingIndex: 1st level, expandTo : 1", function (assert) {
6225
6434
  const oCache = _AggregationCache.create(this.oRequestor, "Foo", "", {}, {
6226
- expandTo : 1, // @see _AggregationHlper.buildApply4Hierarchy
6435
+ expandTo : 1, // @see _AggregationHelper.buildApply4Hierarchy
6227
6436
  hierarchyQualifier : "X"
6228
6437
  });
6229
6438
  const oCacheMock = this.mock(oCache);
@@ -6585,6 +6794,78 @@ sap.ui.define([
6585
6794
  oCache.resetOutOfPlace();
6586
6795
  });
6587
6796
 
6797
+ //*********************************************************************************************
6798
+ QUnit.test("get1stInPlaceChildIndex: no first in-place root", function (assert) {
6799
+ const oCache = _AggregationCache.create(this.oRequestor, "Foo", "", {}, {
6800
+ hierarchyQualifier : "X"
6801
+ });
6802
+ oCache.aElements = [{
6803
+ "@$ui5.context.isTransient" : false, // OOP
6804
+ "@$ui5.node.level" : 1
6805
+ }];
6806
+
6807
+ // code under test
6808
+ assert.strictEqual(oCache.get1stInPlaceChildIndex(-1), -1);
6809
+ });
6810
+
6811
+ //*********************************************************************************************
6812
+ QUnit.test("get1stInPlaceChildIndex: first in-place root", function (assert) {
6813
+ const oCache = _AggregationCache.create(this.oRequestor, "Foo", "", {}, {
6814
+ hierarchyQualifier : "X"
6815
+ });
6816
+ oCache.aElements = [{
6817
+ "@$ui5.context.isTransient" : false, // OOP
6818
+ "@$ui5.node.level" : 1
6819
+ }, {
6820
+ "@$ui5.node.level" : 2
6821
+ }, { // first in-place root
6822
+ "@$ui5.node.level" : 1
6823
+ }];
6824
+
6825
+ // code under test
6826
+ assert.strictEqual(oCache.get1stInPlaceChildIndex(-1), 2);
6827
+ });
6828
+
6829
+ //*********************************************************************************************
6830
+ QUnit.test("get1stInPlaceChildIndex: first in-place child", function (assert) {
6831
+ const oCache = _AggregationCache.create(this.oRequestor, "Foo", "", {}, {
6832
+ hierarchyQualifier : "X"
6833
+ });
6834
+ oCache.aElements = [{ // avoid this trap!
6835
+ "@$ui5.node.level" : 2
6836
+ }, { // parent
6837
+ "@$ui5.node.level" : 1
6838
+ }, {
6839
+ "@$ui5.context.isTransient" : false, // OOP
6840
+ "@$ui5.node.level" : 2
6841
+ }, {
6842
+ "@$ui5.node.level" : 3
6843
+ }, { // first in-place child
6844
+ "@$ui5.node.level" : 2
6845
+ }];
6846
+
6847
+ // code under test
6848
+ assert.strictEqual(oCache.get1stInPlaceChildIndex(1), 4);
6849
+ });
6850
+
6851
+ //*********************************************************************************************
6852
+ QUnit.test("get1stInPlaceChildIndex: no first in-place child", function (assert) {
6853
+ const oCache = _AggregationCache.create(this.oRequestor, "Foo", "", {}, {
6854
+ hierarchyQualifier : "X"
6855
+ });
6856
+ oCache.aElements = [{ // avoid this trap!
6857
+ "@$ui5.node.level" : 2
6858
+ }, { // parent
6859
+ "@$ui5.node.level" : 1
6860
+ }, {
6861
+ "@$ui5.context.isTransient" : false, // OOP
6862
+ "@$ui5.node.level" : 2
6863
+ }];
6864
+
6865
+ // code under test
6866
+ assert.strictEqual(oCache.get1stInPlaceChildIndex(1), -1);
6867
+ });
6868
+
6588
6869
  //*********************************************************************************************
6589
6870
  [false, true].forEach(function (bCreateInPlace) {
6590
6871
  [undefined, false, true].forEach(function (bIsExpanded) {
@@ -2634,7 +2634,25 @@ sap.ui.define([
2634
2634
  });
2635
2635
 
2636
2636
  //*********************************************************************************************
2637
- QUnit.test("getQueryOptionsForOutOfPlaceNodesRank", function (assert) {
2637
+ [{
2638
+ limitedDescendantCount : "~$LimitedDescendantCount~",
2639
+ expectedSelect : [
2640
+ "~$DistanceFromRoot~",
2641
+ "~$DrillState~",
2642
+ "~$LimitedRank~",
2643
+ "~$LimitedDescendantCount~",
2644
+ "~key~"
2645
+ ]
2646
+ }, {
2647
+ limitedDescendantCount : undefined,
2648
+ expectedSelect : [
2649
+ "~$DistanceFromRoot~",
2650
+ "~$DrillState~",
2651
+ "~$LimitedRank~",
2652
+ "~key~"
2653
+ ]
2654
+ }].forEach(function (oFixture, i) {
2655
+ QUnit.test(`getQueryOptionsForOutOfPlaceNodesRank #${i}`, function (assert) {
2638
2656
  const aOutOfPlaceByParent = [{
2639
2657
  nodeFilters : ["~node2Filter~", "~node1Filter~"],
2640
2658
  parentFilter : "~parent1Filter~"
@@ -2648,7 +2666,7 @@ sap.ui.define([
2648
2666
  const oAggregation = {
2649
2667
  $DistanceFromRoot : "~$DistanceFromRoot~",
2650
2668
  $DrillState : "~$DrillState~",
2651
- $LimitedDescendantCount : "~$LimitedDescendantCount~",
2669
+ $LimitedDescendantCount : oFixture.limitedDescendantCount,
2652
2670
  $LimitedRank : "~$LimitedRank~",
2653
2671
  $metaPath : "~$metaPath~",
2654
2672
  $fetchMetadata : mustBeMocked
@@ -2679,13 +2697,7 @@ sap.ui.define([
2679
2697
  $apply : "~apply~",
2680
2698
  $filter : "~node1Filter~ or ~node2Filter~ or ~node3Filter~ or ~node4Filter~"
2681
2699
  + " or ~node5Filter~ or ~parent1Filter~",
2682
- $select : [
2683
- "~$DistanceFromRoot~",
2684
- "~$DrillState~",
2685
- "~$LimitedDescendantCount~",
2686
- "~$LimitedRank~",
2687
- "~key~"
2688
- ],
2700
+ $select : oFixture.expectedSelect,
2689
2701
  $top : 6,
2690
2702
  custom : "~custom~"
2691
2703
  });
@@ -2694,3 +2706,4 @@ sap.ui.define([
2694
2706
  assert.strictEqual(JSON.stringify(mQueryOptions), sQueryOptionsJSON, "unchanged");
2695
2707
  });
2696
2708
  });
2709
+ });
@@ -7487,7 +7487,7 @@ sap.ui.define([
7487
7487
  });
7488
7488
 
7489
7489
  //*********************************************************************************************
7490
- QUnit.test("CollectionCache#handleResponse: kept-alive, update conflict", function (assert) {
7490
+ QUnit.test("CollectionCache#handleResponse: kept alive, update conflict", function (assert) {
7491
7491
  var oCache = this.createCache("Employees"),
7492
7492
  oElement = {
7493
7493
  "@odata.etag" : "new"
@@ -9980,7 +9980,7 @@ sap.ui.define([
9980
9980
  sExpectedKeys : "", // aElements remains empty
9981
9981
  iExpectedLength : 0,
9982
9982
  sFilter : "key eq 'a6' or key eq 'a7'",
9983
- aKeptAliveKeys : ["g", "h"],
9983
+ aKeptAliveKeys : ["h", "g"],
9984
9984
  iLength : 0,
9985
9985
  iStart : 24,
9986
9986
  aValues : [{key : "g"}, {key : "h"}]