@openui5/sap.ui.core 1.121.1 → 1.122.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 (604) hide show
  1. package/.eslintrc.json +22 -5
  2. package/THIRDPARTY.txt +1 -1
  3. package/package.json +1 -1
  4. package/src/jquery.sap.global.js +1 -1
  5. package/src/jquery.sap.properties.js +1 -1
  6. package/src/jquery.sap.resources.js +1 -1
  7. package/src/jquery.sap.script.js +1 -1
  8. package/src/jquery.sap.sjax.js +6 -5
  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/config.js +1 -1
  13. package/src/sap/base/i18n/Formatting.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/Deferred.js +4 -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 +3 -3
  59. package/src/sap/ui/Global.js +4 -4
  60. package/src/sap/ui/base/Event.js +1 -1
  61. package/src/sap/ui/base/EventProvider.js +11 -5
  62. package/src/sap/ui/base/Exception.js +1 -1
  63. package/src/sap/ui/base/Interface.js +1 -1
  64. package/src/sap/ui/base/ManagedObject.js +22 -3
  65. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  66. package/src/sap/ui/base/Metadata.js +1 -1
  67. package/src/sap/ui/base/Object.js +1 -1
  68. package/src/sap/ui/base/ObjectPool.js +1 -1
  69. package/src/sap/ui/core/.library +1 -1
  70. package/src/sap/ui/core/BusyIndicator.js +1 -1
  71. package/src/sap/ui/core/Component.js +33 -5
  72. package/src/sap/ui/core/ComponentContainer.js +1 -1
  73. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  74. package/src/sap/ui/core/ComponentSupport.js +1 -1
  75. package/src/sap/ui/core/Configuration.js +1 -1
  76. package/src/sap/ui/core/Control.js +19 -3
  77. package/src/sap/ui/core/Core.js +1 -1
  78. package/src/sap/ui/core/CustomData.js +1 -1
  79. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  80. package/src/sap/ui/core/Element.js +28 -3
  81. package/src/sap/ui/core/ElementMetadata.js +1 -1
  82. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  83. package/src/sap/ui/core/EventBus.js +1 -1
  84. package/src/sap/ui/core/Fragment.js +1 -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 +1 -1
  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 +1 -1
  95. package/src/sap/ui/core/LayoutData.js +1 -1
  96. package/src/sap/ui/core/ListItem.js +1 -1
  97. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  98. package/src/sap/ui/core/Locale.js +1 -1
  99. package/src/sap/ui/core/LocaleData.js +14 -6
  100. package/src/sap/ui/core/Manifest.js +1 -1
  101. package/src/sap/ui/core/Message.js +1 -1
  102. package/src/sap/ui/core/RenderManager.js +1 -1
  103. package/src/sap/ui/core/Renderer.js +1 -1
  104. package/src/sap/ui/core/ResizeHandler.js +1 -1
  105. package/src/sap/ui/core/ScrollBar.js +1 -1
  106. package/src/sap/ui/core/SeparatorItem.js +1 -1
  107. package/src/sap/ui/core/Title.js +1 -1
  108. package/src/sap/ui/core/TooltipBase.js +1 -1
  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/date/UI5Date.js +1 -1
  117. package/src/sap/ui/core/date/UniversalDateUtils.js +52 -52
  118. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  119. package/src/sap/ui/core/delegate/ScrollEnablement.js +4 -4
  120. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  121. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  122. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  123. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  124. package/src/sap/ui/core/format/DateFormat.js +4 -4
  125. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  126. package/src/sap/ui/core/format/NumberFormat.js +32 -13
  127. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  128. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  129. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  130. package/src/sap/ui/core/library.js +3 -3
  131. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  132. package/src/sap/ui/core/message/Message.js +1 -1
  133. package/src/sap/ui/core/message/MessageManager.js +1 -1
  134. package/src/sap/ui/core/message/MessageParser.js +1 -1
  135. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  136. package/src/sap/ui/core/messagebundle_ar.properties +1 -1
  137. package/src/sap/ui/core/messagebundle_mk.properties +1 -1
  138. package/src/sap/ui/core/mvc/Controller.js +42 -7
  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 +1 -1
  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/routing/Router.js +1 -1
  151. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  152. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  153. package/src/sap/ui/core/service/Service.js +1 -1
  154. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  155. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  156. package/src/sap/ui/core/support/Plugin.js +1 -1
  157. package/src/sap/ui/core/support/Support.js +1 -1
  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 +239 -8
  167. package/src/sap/ui/core/themes/base/global.less +20 -0
  168. package/src/sap/ui/core/themes/sap_hcb/global.less +20 -0
  169. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  170. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  171. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  172. package/src/sap/ui/core/tmpl/Template.js +1 -1
  173. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  174. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  175. package/src/sap/ui/core/util/Export.js +1 -1
  176. package/src/sap/ui/core/util/ExportCell.js +1 -1
  177. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  178. package/src/sap/ui/core/util/ExportRow.js +1 -1
  179. package/src/sap/ui/core/util/ExportType.js +1 -1
  180. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  181. package/src/sap/ui/core/util/File.js +1 -1
  182. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  183. package/src/sap/ui/core/util/MockServer.js +1 -1
  184. package/src/sap/ui/core/util/PasteHelper.js +2 -2
  185. package/src/sap/ui/core/util/ShortcutHelper.js +6 -0
  186. package/src/sap/ui/core/util/XMLPreprocessor.js +54 -30
  187. package/src/sap/ui/core/util/_LocalizationHelper.js +2 -1
  188. package/src/sap/ui/core/util/reflection/BaseTreeModifier.js +0 -29
  189. package/src/sap/ui/core/util/reflection/JsControlTreeModifier.js +0 -26
  190. package/src/sap/ui/core/util/reflection/XmlTreeModifier.js +0 -56
  191. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  192. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  193. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  194. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  195. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  196. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  197. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  198. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  199. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  200. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  201. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  202. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  203. package/src/sap/ui/debug/ControlTree.js +1 -1
  204. package/src/sap/ui/debug/DebugEnv.js +1 -1
  205. package/src/sap/ui/debug/PropertyList.js +1 -1
  206. package/src/sap/ui/model/ClientListBinding.js +13 -6
  207. package/src/sap/ui/model/ClientModel.js +1 -1
  208. package/src/sap/ui/model/ClientTreeBinding.js +16 -7
  209. package/src/sap/ui/model/CompositeBinding.js +11 -4
  210. package/src/sap/ui/model/CompositeDataState.js +1 -1
  211. package/src/sap/ui/model/CompositeType.js +17 -3
  212. package/src/sap/ui/model/DataState.js +1 -1
  213. package/src/sap/ui/model/ListBinding.js +14 -11
  214. package/src/sap/ui/model/MetaModel.js +1 -1
  215. package/src/sap/ui/model/Model.js +11 -9
  216. package/src/sap/ui/model/PropertyBinding.js +21 -4
  217. package/src/sap/ui/model/SelectionModel.js +1 -1
  218. package/src/sap/ui/model/SimpleType.js +1 -1
  219. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  220. package/src/sap/ui/model/TreeBinding.js +14 -7
  221. package/src/sap/ui/model/Type.js +1 -1
  222. package/src/sap/ui/model/analytics/AnalyticalBinding.js +12 -8
  223. package/src/sap/ui/model/analytics/BatchResponseCollector.js +1 -1
  224. package/src/sap/ui/model/analytics/odata4analytics.js +66 -52
  225. package/src/sap/ui/model/controlhelper/TreeBindingProxy.js +1 -4
  226. package/src/sap/ui/model/json/JSONListBinding.js +5 -2
  227. package/src/sap/ui/model/json/JSONModel.js +7 -5
  228. package/src/sap/ui/model/json/JSONTreeBinding.js +5 -2
  229. package/src/sap/ui/model/message/MessageListBinding.js +5 -2
  230. package/src/sap/ui/model/message/MessageModel.js +1 -1
  231. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  232. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  233. package/src/sap/ui/model/odata/ODataMetaModel.js +8 -9
  234. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  235. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  236. package/src/sap/ui/model/odata/ODataUtils.js +1 -1
  237. package/src/sap/ui/model/odata/type/Boolean.js +2 -4
  238. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  239. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  240. package/src/sap/ui/model/odata/type/Date.js +1 -1
  241. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  242. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  243. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  244. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  245. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  246. package/src/sap/ui/model/odata/type/Double.js +1 -1
  247. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  248. package/src/sap/ui/model/odata/type/Int.js +1 -1
  249. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  250. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  251. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  252. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  253. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  254. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  255. package/src/sap/ui/model/odata/type/Single.js +1 -1
  256. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  257. package/src/sap/ui/model/odata/type/String.js +1 -1
  258. package/src/sap/ui/model/odata/type/Time.js +1 -1
  259. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  260. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  261. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  262. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +2 -2
  263. package/src/sap/ui/model/odata/v2/ODataListBinding.js +14 -8
  264. package/src/sap/ui/model/odata/v2/ODataModel.js +25 -28
  265. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +15 -12
  266. package/src/sap/ui/model/odata/v4/Context.js +111 -30
  267. package/src/sap/ui/model/odata/v4/ODataBinding.js +9 -5
  268. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +1 -1
  269. package/src/sap/ui/model/odata/v4/ODataListBinding.js +14 -9
  270. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +4 -3
  271. package/src/sap/ui/model/odata/v4/ODataModel.js +27 -2
  272. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +19 -7
  273. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +240 -41
  274. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +88 -0
  275. package/src/sap/ui/model/odata/v4/lib/_Cache.js +13 -4
  276. package/src/sap/ui/model/odata/v4/lib/_Helper.js +15 -0
  277. package/src/sap/ui/model/odata/v4/lib/_TreeState.js +77 -15
  278. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  279. package/src/sap/ui/model/type/Boolean.js +1 -1
  280. package/src/sap/ui/model/type/Currency.js +1 -1
  281. package/src/sap/ui/model/type/Date.js +1 -1
  282. package/src/sap/ui/model/type/DateInterval.js +1 -1
  283. package/src/sap/ui/model/type/DateTime.js +1 -1
  284. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  285. package/src/sap/ui/model/type/FileSize.js +1 -1
  286. package/src/sap/ui/model/type/Float.js +1 -1
  287. package/src/sap/ui/model/type/Integer.js +1 -1
  288. package/src/sap/ui/model/type/String.js +1 -1
  289. package/src/sap/ui/model/type/Time.js +1 -1
  290. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  291. package/src/sap/ui/model/type/Unit.js +38 -1
  292. package/src/sap/ui/model/xml/XMLListBinding.js +5 -2
  293. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  294. package/src/sap/ui/model/xml/XMLTreeBinding.js +5 -1
  295. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  296. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  297. package/src/sap/ui/test/RecordReplay.js +1 -0
  298. package/src/sap/ui/test/autowaiter/_autoWaiterAsync.js +8 -1
  299. package/src/sap/ui/test/generic/TestBase.js +1 -1
  300. package/src/sap/ui/test/gherkin/opa5TestHarness.js +0 -6
  301. package/src/sap/ui/test/gherkin/qUnitTestHarness.js +0 -6
  302. package/src/sap/ui/test/qunitPause.js +5 -1
  303. package/src/sap/ui/util/Storage.js +1 -1
  304. package/src/sap/ui/util/_enforceNoReturnValue.js +26 -0
  305. package/src/ui5loader.js +25 -2
  306. package/test/sap/ui/core/HyphenationPlayground.html +6 -292
  307. package/test/sap/ui/core/HyphenationPlayground.js +313 -0
  308. package/test/sap/ui/core/demokit/docuindex.json +1 -1
  309. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/ui5.yaml +1 -1
  310. package/test/sap/ui/core/demokit/sample/OpaAutoWaitParams/OpaAutoWaitParams.html +1 -1
  311. package/test/sap/ui/core/demokit/sample/OpaAutoWaitParams/applicationUnderTest/index.html +1 -2
  312. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/README.js +31 -23
  313. package/test/sap/ui/core/demokit/sample/OpaStartup/iStartMyAppInAFrame/iStartMyAppInAFrame.js +103 -94
  314. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithOPA5/GherkinTestRunner.html +3 -0
  315. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithOPA5/GherkinTestRunner.js +1 -5
  316. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithPageObjects/GherkinTestRunner.html +3 -0
  317. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithPageObjects/GherkinTestRunner.js +1 -5
  318. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithQUnit/GherkinTestRunner.html +3 -0
  319. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithQUnit/GherkinTestRunner.js +1 -5
  320. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithQUnit/Steps.js +5 -5
  321. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithUIComponent/GherkinTestRunner.html +3 -0
  322. package/test/sap/ui/core/demokit/sample/gherkin/GherkinWithUIComponent/GherkinTestRunner.js +1 -5
  323. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  324. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  325. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  326. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  327. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +16 -9
  328. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.view.xml +9 -0
  329. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/SandboxModel.js +11 -0
  330. package/test/sap/ui/core/demokit/sample/odata/v4/Products/data/UnitsOfMeasure.json +1 -1
  331. package/test/sap/ui/core/demokit/tutorial/databinding/01/manifest.json +2 -1
  332. package/test/sap/ui/core/demokit/tutorial/databinding/01/package.json +4 -1
  333. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  334. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/Component.js +12 -0
  335. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/index.html +8 -7
  336. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/manifest.json +28 -1
  337. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/view/App.view.xml +5 -0
  338. package/test/sap/ui/core/demokit/tutorial/databinding/02/manifest.json +3 -1
  339. package/test/sap/ui/core/demokit/tutorial/databinding/02/package.json +4 -1
  340. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  341. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/Component.js +12 -0
  342. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/index.html +8 -7
  343. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/manifest.json +34 -1
  344. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/model/data.json +3 -0
  345. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/view/App.view.xml +5 -0
  346. package/test/sap/ui/core/demokit/tutorial/databinding/03/manifest.json +3 -1
  347. package/test/sap/ui/core/demokit/tutorial/databinding/03/package.json +4 -1
  348. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  349. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/Component.js +12 -0
  350. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/index.html +8 -7
  351. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/manifest.json +34 -1
  352. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/model/data.json +3 -0
  353. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/view/App.view.xml +5 -0
  354. package/test/sap/ui/core/demokit/tutorial/databinding/04/manifest.json +3 -2
  355. package/test/sap/ui/core/demokit/tutorial/databinding/04/package.json +4 -1
  356. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  357. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/Component.js +12 -0
  358. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/index.html +8 -10
  359. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/manifest.json +35 -1
  360. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/model/data.json +6 -0
  361. package/test/sap/ui/core/demokit/tutorial/databinding/05/manifest.json +3 -2
  362. package/test/sap/ui/core/demokit/tutorial/databinding/05/package.json +4 -1
  363. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  364. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/Component.js +20 -0
  365. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/index.html +8 -10
  366. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/manifest.json +35 -1
  367. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/model/data.json +6 -0
  368. package/test/sap/ui/core/demokit/tutorial/databinding/06/manifest.json +4 -3
  369. package/test/sap/ui/core/demokit/tutorial/databinding/06/package.json +4 -1
  370. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  371. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/Component.js +12 -0
  372. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/index.html +8 -10
  373. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/manifest.json +46 -1
  374. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/model/data.json +5 -0
  375. package/test/sap/ui/core/demokit/tutorial/databinding/07/manifest.json +4 -3
  376. package/test/sap/ui/core/demokit/tutorial/databinding/07/package.json +3 -0
  377. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  378. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/Component.js +12 -0
  379. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/index.html +8 -10
  380. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/manifest.json +46 -1
  381. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/model/data.json +5 -0
  382. package/test/sap/ui/core/demokit/tutorial/databinding/08/manifest.json +4 -3
  383. package/test/sap/ui/core/demokit/tutorial/databinding/08/package.json +3 -0
  384. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  385. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/Component.js +12 -0
  386. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/index.html +8 -10
  387. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/manifest.json +46 -1
  388. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/model/data.json +11 -0
  389. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/view/App.view.xml +1 -1
  390. package/test/sap/ui/core/demokit/tutorial/databinding/09/manifest.json +4 -3
  391. package/test/sap/ui/core/demokit/tutorial/databinding/09/package.json +3 -0
  392. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  393. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/Component.js +12 -0
  394. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/controller/App.controller.js +8 -7
  395. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/index.html +8 -10
  396. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/manifest.json +46 -1
  397. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/model/data.json +11 -0
  398. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/view/App.view.xml +2 -2
  399. package/test/sap/ui/core/demokit/tutorial/databinding/10/manifest.json +4 -3
  400. package/test/sap/ui/core/demokit/tutorial/databinding/10/package.json +3 -0
  401. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  402. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/Component.js +12 -0
  403. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/controller/App.controller.js +8 -7
  404. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/index.html +8 -10
  405. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/manifest.json +46 -1
  406. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/model/data.json +13 -0
  407. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/view/App.view.xml +3 -3
  408. package/test/sap/ui/core/demokit/tutorial/databinding/11/manifest.json +4 -3
  409. package/test/sap/ui/core/demokit/tutorial/databinding/11/package.json +3 -0
  410. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  411. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/Component.js +12 -0
  412. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/controller/App.controller.js +8 -7
  413. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/index.html +8 -10
  414. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/manifest.json +47 -1
  415. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/model/data.json +13 -0
  416. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/view/App.view.xml +3 -3
  417. package/test/sap/ui/core/demokit/tutorial/databinding/12/manifest.json +4 -3
  418. package/test/sap/ui/core/demokit/tutorial/databinding/12/package.json +3 -0
  419. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  420. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/Component.js +12 -0
  421. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/controller/App.controller.js +10 -11
  422. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/index.html +8 -10
  423. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/manifest.json +51 -1
  424. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/model/Products.json +64 -57
  425. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/model/data.json +13 -0
  426. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/view/App.view.xml +3 -3
  427. package/test/sap/ui/core/demokit/tutorial/databinding/13/manifest.json +4 -3
  428. package/test/sap/ui/core/demokit/tutorial/databinding/13/package.json +3 -0
  429. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  430. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/Component.js +12 -0
  431. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/controller/App.controller.js +16 -16
  432. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/index.html +8 -10
  433. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/manifest.json +51 -1
  434. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/model/Products.json +64 -57
  435. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/model/data.json +13 -0
  436. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/view/App.view.xml +3 -3
  437. package/test/sap/ui/core/demokit/tutorial/databinding/14/manifest.json +4 -3
  438. package/test/sap/ui/core/demokit/tutorial/databinding/14/package.json +3 -0
  439. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  440. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/Component.js +12 -0
  441. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/controller/App.controller.js +16 -16
  442. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/index.html +8 -10
  443. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/manifest.json +51 -1
  444. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/model/Products.json +64 -57
  445. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/model/data.json +14 -0
  446. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/view/App.view.xml +3 -3
  447. package/test/sap/ui/core/demokit/tutorial/databinding/15/manifest.json +4 -3
  448. package/test/sap/ui/core/demokit/tutorial/databinding/15/package.json +3 -0
  449. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  450. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/Component.js +12 -0
  451. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/controller/App.controller.js +19 -22
  452. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/index.html +8 -10
  453. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/manifest.json +51 -1
  454. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/model/Products.json +64 -57
  455. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/model/data.json +14 -0
  456. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/view/App.view.xml +5 -5
  457. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  458. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  459. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  460. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  461. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  462. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  463. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  464. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  465. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  466. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  467. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  468. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  469. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  470. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  471. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  472. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  473. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  474. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  475. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  476. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  477. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  478. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  479. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  480. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  481. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  482. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  483. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  484. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  485. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  486. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  487. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  488. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  489. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  490. package/test/sap/ui/core/qunit/CompositeBinding.qunit.js +67 -0
  491. package/test/sap/ui/core/qunit/EventProvider.qunit.js +30 -2
  492. package/test/sap/ui/core/qunit/{Core_libraryPreloadFiles.qunit.html → Lib_preloadFiles.qunit.html} +1 -1
  493. package/test/sap/ui/core/qunit/{Core_libraryPreloadFiles.qunit.js → Lib_preloadFiles.qunit.js} +5 -10
  494. package/test/sap/ui/core/qunit/ThemeHelper.qunit.js +1 -1
  495. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +4 -4
  496. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +12 -12
  497. package/test/sap/ui/core/qunit/analytics/odata4analytics.qunit.js +262 -12
  498. package/test/sap/ui/core/qunit/app/DesignMode_suppressedDeactivation.qunit.js +8 -4
  499. package/test/sap/ui/core/qunit/app/_createDesignModeTests_legacyAPIs.qunit.js +8 -4
  500. package/test/sap/ui/core/qunit/app/fixture/designmode/test01.controller.js +4 -4
  501. package/test/sap/ui/core/qunit/app/testsuite.app.qunit.js +3 -3
  502. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +11 -0
  503. package/test/sap/ui/core/qunit/component/Component_keepAlive.qunit.js +30 -2
  504. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +82 -19
  505. package/test/sap/ui/core/qunit/component/testdata/keepAlive/child3/App.view.xml +3 -0
  506. package/test/sap/ui/core/qunit/component/testdata/keepAlive/child3/Component.js +20 -0
  507. package/test/sap/ui/core/qunit/component/testdata/keepAlive/child3/Home.view.xml +5 -0
  508. package/test/sap/ui/core/qunit/component/testdata/keepAlive/child3/Other.view.xml +5 -0
  509. package/test/sap/ui/core/qunit/component/testdata/keepAlive/child3/manifest.json +54 -0
  510. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessAmbiguous.html +4 -0
  511. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessDuplicate.html +4 -0
  512. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessFailing.html +4 -0
  513. package/test/sap/ui/core/qunit/gherkin/opa5TestHarness.qunit.html +4 -0
  514. package/test/sap/ui/core/qunit/gherkin/opa5TestHarness.qunit.js +1 -1
  515. package/test/sap/ui/core/qunit/gherkin/qUnitTestHarness.qunit.html +4 -0
  516. package/test/sap/ui/core/qunit/gherkin/qUnitTestHarness.qunit.js +1 -1
  517. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.html +1 -1
  518. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +5 -6
  519. package/test/sap/ui/core/qunit/internal/testsuite.models.qunit.js +43 -16
  520. package/test/sap/ui/core/qunit/messages/messagesGeneral.qunit.js +194 -180
  521. package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +15 -33
  522. package/test/sap/ui/core/qunit/mockserver/MockServer.qunit.js +936 -1014
  523. package/test/sap/ui/core/qunit/mockserver/testsuite.mockserver.qunit.js +2 -4
  524. package/test/sap/ui/core/qunit/model/FAR_CUSTOMER_LINE_ITEMS.metadata.xml +2 -0
  525. package/test/sap/ui/core/qunit/model/PropertyBinding.qunit.js +50 -1
  526. package/test/sap/ui/core/qunit/model/controlhelper/TreeBindingProxy.qunit.js +18 -8
  527. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +107 -49
  528. package/test/sap/ui/core/qunit/mvc/testdata/asyncHooks.view.xml +7 -0
  529. package/test/sap/ui/core/qunit/odata/ODataMetaModel.qunit.js +0 -3
  530. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +143 -2
  531. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +34 -0
  532. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +230 -39
  533. package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +57 -18
  534. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +40 -6
  535. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +3 -0
  536. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1715 -106
  537. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +39 -0
  538. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +88 -18
  539. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +544 -50
  540. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +175 -0
  541. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +50 -9
  542. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +17 -0
  543. package/test/sap/ui/core/qunit/odata/v4/lib/_TreeState.qunit.js +140 -27
  544. package/test/sap/ui/core/qunit/opa/RecordReplay.qunit.js +12 -3
  545. package/test/sap/ui/core/qunit/resource/ResourceModel.qunit.js +1 -2
  546. package/test/sap/ui/core/qunit/routing/fixture/placeholder/component/NavContainerOptOut/Component.js +1 -0
  547. package/test/sap/ui/core/qunit/rule/model/bindingPathSyntaxValidation.qunit.js +37 -0
  548. package/test/sap/ui/core/qunit/rule/model/{modelSupport.qunit.js → selectUsedInBoundAggregation.qunit.js} +86 -154
  549. package/test/sap/ui/core/qunit/rule/testsuite.rule.qunit.js +5 -2
  550. package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib12/themes/{sap_hcb → sap_horizon_hcb}/library.css +1 -1
  551. package/test/sap/ui/core/qunit/testsuite.core.framework.qunit.js +18 -18
  552. package/test/sap/ui/core/qunit/testsuites/testsuite.base.configuration.qunit.js +1 -1
  553. package/test/sap/ui/core/qunit/testsuites/testsuite.theming.qunit.js +3 -3
  554. package/test/sap/ui/core/qunit/types/CompositeType.qunit.js +6 -0
  555. package/test/sap/ui/core/qunit/types/DateFormat.qunit.js +3 -6
  556. package/test/sap/ui/core/qunit/types/NumberFormat.qunit.js +1370 -1242
  557. package/test/sap/ui/core/qunit/types/Types.qunit.js +65 -0
  558. package/test/sap/ui/core/qunit/types/testsuite.types.qunit.js +0 -3
  559. package/test/sap/ui/core/qunit/ui5classes/ManagedObject.qunit.js +68 -3
  560. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +2625 -1899
  561. package/test/sap/ui/core/qunit/util/reflection/JsControlTreeModifier.qunit.js +0 -102
  562. package/test/sap/ui/core/qunit/util/reflection/XmlTreeModifier.qunit.js +0 -165
  563. package/test/sap/ui/core/relnotes/changes-1.121.json +0 -15
  564. package/test/sap/ui/core/relnotes/changes-1.122.json +80 -0
  565. package/test/sap/ui/core/visual/HyphenationPlayground.spec.js +5 -2
  566. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/index.js +0 -15
  567. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/index.js +0 -21
  568. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/index.js +0 -21
  569. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/index.js +0 -25
  570. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/index.js +0 -29
  571. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/index.js +0 -42
  572. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/index.js +0 -44
  573. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/index.js +0 -39
  574. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/index.js +0 -39
  575. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/index.js +0 -41
  576. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/index.js +0 -48
  577. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/index.js +0 -52
  578. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/index.js +0 -52
  579. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/index.js +0 -54
  580. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/index.js +0 -54
  581. /package/test/sap/ui/core/qunit/testdata/legacy-uilib_legacyAPIs/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  582. /package/test/sap/ui/core/qunit/testdata/legacy-uilib_legacyAPIs/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  583. /package/test/sap/ui/core/qunit/testdata/legacy-uilib_legacyAPIs/themes/{sap_hcb → sap_horizon_hcb}/library[legacy].css +0 -0
  584. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib1/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  585. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib1/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  586. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib10/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  587. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib11/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  588. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib13/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  589. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib14/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  590. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib15/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  591. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib15/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  592. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib16/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  593. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib16/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  594. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib17/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  595. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib2/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  596. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib2/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  597. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib3/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  598. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib3/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  599. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib4/themes/{sap_hcb → sap_horizon_hcb}/library-parameters.json +0 -0
  600. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib5/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  601. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib6/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  602. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib7/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  603. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib8/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
  604. /package/test/sap/ui/core/qunit/testdata/libraries/themeParameters/lib9/themes/{sap_hcb → sap_horizon_hcb}/library.css +0 -0
@@ -12,6 +12,8 @@ sap.ui.define([
12
12
  /*eslint camelcase: 0 */
13
13
  "use strict";
14
14
 
15
+ const mustBeMocked = function () { throw new Error("Must be mocked"); };
16
+
15
17
  //*********************************************************************************************
16
18
  QUnit.module("sap.ui.model.odata.v4.lib._AggregationHelper", {
17
19
  beforeEach : function () {
@@ -2358,4 +2360,177 @@ sap.ui.define([
2358
2360
  assert.strictEqual(aSpliced.$stale, true);
2359
2361
  assert.deepEqual(oElement, {"@$ui5._" : {spliced : []}}, "nothing else");
2360
2362
  });
2363
+
2364
+ //*********************************************************************************************
2365
+ QUnit.test("getQueryOptionsForOutOfPlaceNodesData: below parent", function (assert) {
2366
+ const oOutOfPlace = {
2367
+ nodeFilters : ["~node2Filter~", "~node1Filter~", "~node3Filter~"],
2368
+ parentFilter : "~parentFilter~"
2369
+ };
2370
+ const sOutOfPlaceJSON = JSON.stringify(oOutOfPlace);
2371
+ const oAggregation = {
2372
+ expandTo : 99,
2373
+ hierarchyQualifier : "X",
2374
+ search : "~search~",
2375
+ $DrillState : "~$DrillState~",
2376
+ $ExpandLevels : "~$ExpandLevels~"
2377
+ };
2378
+ const sAggregationJSON = JSON.stringify(oAggregation);
2379
+ const mQueryOptions = {
2380
+ $$filterBeforeAggregate : "~filterBeforeAggregate~",
2381
+ $count : "~count~",
2382
+ $filter : "~filter~",
2383
+ $orderby : "~orderby~",
2384
+ custom : "~custom~"
2385
+ };
2386
+ const sQueryOptionsJSON = JSON.stringify(mQueryOptions);
2387
+
2388
+ this.mock(_AggregationHelper).expects("buildApply")
2389
+ .callsFake(function (oAggregation0, mQueryOptions0, iLevel) {
2390
+ assert.deepEqual(oAggregation0, {
2391
+ expandTo : 1,
2392
+ hierarchyQualifier : "X",
2393
+ $DrillState : "~$DrillState~"
2394
+ });
2395
+ assert.deepEqual(mQueryOptions0, {
2396
+ $$filterBeforeAggregate : "~parentFilter~",
2397
+ custom : "~custom~"
2398
+ });
2399
+ assert.strictEqual(iLevel, 1);
2400
+
2401
+ mQueryOptions0.$apply = "~apply~";
2402
+ mQueryOptions0.$select = ["~select~", "~$DrillState~"];
2403
+ return mQueryOptions0;
2404
+ });
2405
+
2406
+ // code under test
2407
+ const mResult = _AggregationHelper.getQueryOptionsForOutOfPlaceNodesData(oOutOfPlace,
2408
+ oAggregation, mQueryOptions);
2409
+
2410
+ assert.deepEqual(mResult, {
2411
+ $$filterBeforeAggregate : "~parentFilter~",
2412
+ $apply : "~apply~",
2413
+ $filter : "~node1Filter~ or ~node2Filter~ or ~node3Filter~",
2414
+ $select : ["~select~"],
2415
+ $top : 3,
2416
+ custom : "~custom~"
2417
+ });
2418
+ assert.strictEqual(JSON.stringify(oAggregation), sAggregationJSON, "unchanged");
2419
+ assert.strictEqual(JSON.stringify(oOutOfPlace), sOutOfPlaceJSON, "unchanged");
2420
+ assert.strictEqual(JSON.stringify(mQueryOptions), sQueryOptionsJSON, "unchanged");
2421
+ });
2422
+
2423
+ //*********************************************************************************************
2424
+ QUnit.test("getQueryOptionsForOutOfPlaceNodesData: root nodes", function (assert) {
2425
+ const oOutOfPlace = {
2426
+ nodeFilters : ["~node2Filter~", "~node1Filter~", "~node3Filter~"]
2427
+ };
2428
+ const sOutOfPlaceJSON = JSON.stringify(oOutOfPlace);
2429
+ const oAggregation = {
2430
+ expandTo : 99,
2431
+ hierarchyQualifier : "X",
2432
+ search : "~search~",
2433
+ $DrillState : "~$DrillState~",
2434
+ $ExpandLevels : "~$ExpandLevels~"
2435
+ };
2436
+ const sAggregationJSON = JSON.stringify(oAggregation);
2437
+ const mQueryOptions = {
2438
+ $count : "~count~",
2439
+ $filter : "~filter~",
2440
+ $orderby : "~orderby~",
2441
+ custom : "~custom~"
2442
+ };
2443
+ const sQueryOptionsJSON = JSON.stringify(mQueryOptions);
2444
+
2445
+ this.mock(_AggregationHelper).expects("buildApply")
2446
+ .callsFake(function (oAggregation0, mQueryOptions0, iLevel) {
2447
+ assert.deepEqual(oAggregation0, {
2448
+ expandTo : 1,
2449
+ hierarchyQualifier : "X",
2450
+ $DrillState : "~$DrillState~"
2451
+ });
2452
+ assert.deepEqual(mQueryOptions0, {custom : "~custom~"});
2453
+ assert.strictEqual(iLevel, 1);
2454
+
2455
+ mQueryOptions0.$apply = "~apply~";
2456
+ mQueryOptions0.$select = ["~select~"];
2457
+ return mQueryOptions0;
2458
+ });
2459
+
2460
+ // code under test
2461
+ const mResult = _AggregationHelper.getQueryOptionsForOutOfPlaceNodesData(oOutOfPlace,
2462
+ oAggregation, mQueryOptions);
2463
+
2464
+ assert.deepEqual(mResult, {
2465
+ $apply : "~apply~",
2466
+ $filter : "~node1Filter~ or ~node2Filter~ or ~node3Filter~",
2467
+ $select : ["~select~"],
2468
+ $top : 3,
2469
+ custom : "~custom~"
2470
+ });
2471
+ assert.strictEqual(JSON.stringify(oAggregation), sAggregationJSON, "unchanged");
2472
+ assert.strictEqual(JSON.stringify(oOutOfPlace), sOutOfPlaceJSON, "unchanged");
2473
+ assert.strictEqual(JSON.stringify(mQueryOptions), sQueryOptionsJSON, "unchanged");
2474
+ });
2475
+
2476
+ //*********************************************************************************************
2477
+ QUnit.test("getQueryOptionsForOutOfPlaceNodesRank", function (assert) {
2478
+ const aOutOfPlaceByParent = [{
2479
+ nodeFilters : ["~node2Filter~", "~node1Filter~"],
2480
+ parentFilter : "~parent1Filter~"
2481
+ }, {
2482
+ nodeFilters : ["~node4Filter~", "~node5Filter~"],
2483
+ parentFilter : "~node2Filter~"
2484
+ }, {
2485
+ nodeFilters : ["~node3Filter~"]
2486
+ }];
2487
+ const sOutOfPlaceByParentJSON = JSON.stringify(aOutOfPlaceByParent);
2488
+ const oAggregation = {
2489
+ $DistanceFromRoot : "~$DistanceFromRoot~",
2490
+ $DrillState : "~$DrillState~",
2491
+ $LimitedDescendantCount : "~$LimitedDescendantCount~",
2492
+ $LimitedRank : "~$LimitedRank~",
2493
+ $metaPath : "~$metaPath~",
2494
+ $fetchMetadata : mustBeMocked
2495
+ };
2496
+ const mQueryOptions = {
2497
+ $apply : "~apply~",
2498
+ $count : "~count~",
2499
+ $filter : "~filter~",
2500
+ $orderby : "~orderby~",
2501
+ $select : "~select~",
2502
+ custom : "~custom~"
2503
+ };
2504
+ const sQueryOptionsJSON = JSON.stringify(mQueryOptions);
2505
+
2506
+ this.mock(oAggregation).expects("$fetchMetadata").withExactArgs("~$metaPath~/")
2507
+ .returns(SyncPromise.resolve("~$metadata~"));
2508
+ this.mock(_Helper).expects("selectKeyProperties")
2509
+ .withExactArgs(sinon.match.object, "~$metadata~")
2510
+ .callsFake(function (mQueryOptions) {
2511
+ mQueryOptions.$select.push("~key~");
2512
+ });
2513
+
2514
+ // code under test
2515
+ const mResult = _AggregationHelper.getQueryOptionsForOutOfPlaceNodesRank(
2516
+ aOutOfPlaceByParent, oAggregation, mQueryOptions);
2517
+
2518
+ assert.deepEqual(mResult, {
2519
+ $apply : "~apply~",
2520
+ $filter : "~node1Filter~ or ~node2Filter~ or ~node3Filter~ or ~node4Filter~"
2521
+ + " or ~node5Filter~ or ~parent1Filter~",
2522
+ $select : [
2523
+ "~$DistanceFromRoot~",
2524
+ "~$DrillState~",
2525
+ "~$LimitedDescendantCount~",
2526
+ "~$LimitedRank~",
2527
+ "~key~"
2528
+ ],
2529
+ $top : 6,
2530
+ custom : "~custom~"
2531
+ });
2532
+ assert.strictEqual(
2533
+ JSON.stringify(aOutOfPlaceByParent), sOutOfPlaceByParentJSON, "unchanged");
2534
+ assert.strictEqual(JSON.stringify(mQueryOptions), sQueryOptionsJSON, "unchanged");
2535
+ });
2361
2536
  });
@@ -4090,6 +4090,8 @@ sap.ui.define([
4090
4090
  .exactly(bTransient ? 1 : 0)
4091
4091
  .withExactArgs(sinon.match.same(oElement), "transientPredicate",
4092
4092
  sTransientPredicate);
4093
+ this.mock(_Helper).expects("copySelected")
4094
+ .withExactArgs(sinon.match.same(oOldElement), sinon.match.same(oElement));
4093
4095
  this.mock(_Helper).expects("restoreUpdatingProperties")
4094
4096
  .withExactArgs(sinon.match.same(oOldElement), sinon.match.same(oElement));
4095
4097
  this.mock(_Helper).expects("buildPath")
@@ -4118,14 +4120,24 @@ sap.ui.define([
4118
4120
  });
4119
4121
 
4120
4122
  //*********************************************************************************************
4121
- QUnit.test("Cache#replaceElement for an element that has no index", function (assert) {
4123
+ [false, true].forEach((bHasOldElement) => {
4124
+ const sTitle = "Cache#replaceElement for an element that has no index, bHasOldElement="
4125
+ + bHasOldElement;
4126
+ QUnit.test(sTitle, function (assert) {
4122
4127
  var oCache = new _Cache(this.oRequestor, "TEAMS"),
4123
4128
  aElements = [{a : "doNotTouch"}],
4124
4129
  oNewElement = {a : "4711", b : "0815"},
4125
- oOldElement = {a : "0815"},
4130
+ oOldElement = bHasOldElement ? {a : "0815"} : undefined,
4126
4131
  mTypeForMetaPath = {};
4127
4132
 
4128
- aElements.$byPredicate = {doNotTouch : aElements[0], "('42')" : oOldElement};
4133
+ if (bHasOldElement) {
4134
+ aElements.$byPredicate = {doNotTouch : aElements[0], "('42')" : oOldElement};
4135
+ this.mock(_Helper).expects("copySelected")
4136
+ .withExactArgs(sinon.match.same(oOldElement), sinon.match.same(oNewElement));
4137
+ } else {
4138
+ aElements.$byPredicate = {doNotTouch : aElements[0]};
4139
+ this.mock(_Helper).expects("copySelected").never();
4140
+ }
4129
4141
 
4130
4142
  this.mock(_Cache).expects("getElementIndex").never();
4131
4143
  this.mock(_Helper).expects("restoreUpdatingProperties")
@@ -4145,6 +4157,7 @@ sap.ui.define([
4145
4157
  assert.deepEqual(aElements.$byPredicate,
4146
4158
  {doNotTouch : aElements[0], "('42')" : oNewElement});
4147
4159
  });
4160
+ });
4148
4161
 
4149
4162
  //*********************************************************************************************
4150
4163
  [
@@ -4444,6 +4457,7 @@ sap.ui.define([
4444
4457
  QUnit.test(sTitle, function (assert) {
4445
4458
  var oCache = new _Cache(this.oRequestor, "TEAMS", {/*mQueryOptions*/}),
4446
4459
  oCacheMock = this.mock(oCache),
4460
+ oCopySelectedExpectation,
4447
4461
  fnDataRequested = this.spy(),
4448
4462
  oElement = {"@$ui5._" : {predicate : "('13')"}},
4449
4463
  aElements = [oElement],
@@ -4526,13 +4540,17 @@ sap.ui.define([
4526
4540
 
4527
4541
  return Promise.resolve(oInCollectionResponse);
4528
4542
  });
4543
+ oCopySelectedExpectation = this.mock(_Helper).expects("copySelected")
4544
+ .exactly(oFixture.inCollection ? 0 : 1)
4545
+ .withExactArgs(sinon.match.same(aElements.$byPredicate["('13')"]),
4546
+ sinon.match.same(oReadResponse.value[0]));
4547
+ oRemoveExpectation = oCacheMock.expects("removeElement")
4548
+ .exactly(oFixture.inCollection ? 0 : 1)
4549
+ .withExactArgs(0, "('13')", sinon.match.same(aElements), "~");
4529
4550
  oReplaceExpectation = oCacheMock.expects("replaceElement")
4530
4551
  .withExactArgs(sinon.match.same(aElements), oFixture.inCollection ? 0 : undefined,
4531
4552
  "('13')", sinon.match.same(oReadResponse.value[0]),
4532
4553
  sinon.match.same(mTypeForMetaPath), "~");
4533
- oRemoveExpectation = oCacheMock.expects("removeElement")
4534
- .exactly(oFixture.inCollection ? 0 : 1)
4535
- .withExactArgs(0, "('13')", sinon.match.same(aElements), "~");
4536
4554
 
4537
4555
  // code under test
4538
4556
  return oCache.refreshSingleWithRemove(oGroupLock, "~", 0, "('13')", true,
@@ -4546,6 +4564,7 @@ sap.ui.define([
4546
4564
  assert.strictEqual(mQueryOptionsForPathCopy.$apply, "apply");
4547
4565
  assert.strictEqual(mQueryOptionsForPathCopy.$search, undefined);
4548
4566
  if (!oFixture.inCollection) {
4567
+ assert.ok(oRemoveExpectation.calledAfter(oCopySelectedExpectation));
4549
4568
  assert.ok(oReplaceExpectation.calledAfter(oRemoveExpectation));
4550
4569
  sinon.assert.calledOnceWithExactly(fnOnRemove, true);
4551
4570
  }
@@ -13233,7 +13252,8 @@ sap.ui.define([
13233
13252
 
13234
13253
  oCacheMock.expects("hasPendingChangesForPath")
13235
13254
  .exactly("key" in oElement || oElement.bChanges ? 1 : 0)
13236
- .withExactArgs(sPredicate).returns(oElement.bChanges);
13255
+ .withExactArgs(sPredicate, "~bIgnorePendingChanges~")
13256
+ .returns(oElement.bChanges);
13237
13257
  oHelperMock.expects("getKeyFilter").exactly("key" in oElement ? 1 : 0)
13238
13258
  .withExactArgs(sinon.match.same(oElement), oCache.sMetaPath,
13239
13259
  sinon.match.same(mTypes))
@@ -13293,7 +13313,8 @@ sap.ui.define([
13293
13313
  });
13294
13314
 
13295
13315
  // code under test
13296
- return oCache.refreshKeptElements(oGroupLock, fnOnRemove, oFixture.bDropApply)
13316
+ return oCache.refreshKeptElements(oGroupLock, fnOnRemove, oFixture.bDropApply,
13317
+ "~bIgnorePendingChanges~")
13297
13318
  .then(function (oResult) {
13298
13319
  var mByPredicateAfterRefresh = {},
13299
13320
  iCallCount = 0;
@@ -13318,6 +13339,25 @@ sap.ui.define([
13318
13339
  });
13319
13340
  });
13320
13341
 
13342
+ //*********************************************************************************************
13343
+ QUnit.test("refreshKeptElements w/ deleteted element", function (assert) {
13344
+ const oCache = _Cache.create(this.oRequestor, "Employees", {});
13345
+
13346
+ oCache.aElements.$byPredicate["('Foo')"] = {
13347
+ "@$ui5.context.isDeleted" : true,
13348
+ "@$ui5._" : {predicate : "('Foo')"}
13349
+ };
13350
+
13351
+ this.mock(oCache).expects("hasPendingChangesForPath").never();
13352
+ this.mock(oCache).expects("checkSharedRequest").withExactArgs();
13353
+ this.mock(oCache).expects("getTypes").never();
13354
+ this.mock(oCache.oRequestor).expects("request").never();
13355
+
13356
+ // code under test
13357
+ assert.strictEqual(oCache.refreshKeptElements({/*GroupLock*/}, {/*fnOnRemove*/}),
13358
+ undefined);
13359
+ });
13360
+
13321
13361
  //*********************************************************************************************
13322
13362
  QUnit.test("refreshKeptElements w/o kept-alive element", function (assert) {
13323
13363
  var oCache = _Cache.create(this.oRequestor, "Employees", {});
@@ -13327,7 +13367,8 @@ sap.ui.define([
13327
13367
  this.mock(oCache.oRequestor).expects("request").never();
13328
13368
 
13329
13369
  // code under test
13330
- assert.deepEqual(oCache.refreshKeptElements({/*GroupLock*/}), undefined);
13370
+ assert.strictEqual(oCache.refreshKeptElements({/*GroupLock*/}, {/*fnOnRemove*/}),
13371
+ undefined);
13331
13372
  });
13332
13373
 
13333
13374
  //*********************************************************************************************
@@ -5414,6 +5414,23 @@ sap.ui.define([
5414
5414
  assert.notOk("$postBodyCollection" in oCacheEntity.nested1);
5415
5415
  });
5416
5416
 
5417
+ //*********************************************************************************************
5418
+ QUnit.test("copySelected", function (assert) {
5419
+ let oTarget = {"@$ui5.context.isSelected" : false};
5420
+
5421
+ // code under test
5422
+ _Helper.copySelected({foo : true, "@$ui5.context.isSelected" : true}, oTarget);
5423
+
5424
+ assert.deepEqual(oTarget, {"@$ui5.context.isSelected" : true});
5425
+
5426
+ oTarget = {};
5427
+
5428
+ // code under test
5429
+ _Helper.copySelected({foo : true, "@$ui5.context.isSelected" : false}, oTarget);
5430
+
5431
+ assert.deepEqual(oTarget, {});
5432
+ });
5433
+
5417
5434
  //*********************************************************************************************
5418
5435
  QUnit.test("makeUpdateData", function (assert) {
5419
5436
  assert.deepEqual(_Helper.makeUpdateData(["Age"], 42), {Age : 42});
@@ -8,7 +8,7 @@ sap.ui.define([
8
8
  ], function (Log, _Helper, _TreeState) {
9
9
  "use strict";
10
10
 
11
- const mapContent = (oMap) => [...oMap.entries()];
11
+ const mustBeMocked = function () { throw new Error("Must be mocked"); };
12
12
 
13
13
  //*********************************************************************************************
14
14
  QUnit.module("sap.ui.model.odata.v4.lib._TreeState", {
@@ -22,80 +22,85 @@ sap.ui.define([
22
22
  //*********************************************************************************************
23
23
  QUnit.test("constructor", function (assert) {
24
24
  // code under test
25
- const oTreeState = new _TreeState("~sNodeProperty~");
25
+ const oTreeState = new _TreeState("~sNodeProperty~", "~fnGetKeyFilter~");
26
26
 
27
27
  assert.ok(oTreeState instanceof _TreeState);
28
28
  assert.strictEqual(oTreeState.sNodeProperty, "~sNodeProperty~");
29
- assert.ok(oTreeState.oExpandLevels instanceof Map);
30
- assert.deepEqual(mapContent(oTreeState.oExpandLevels), []);
29
+ assert.strictEqual(oTreeState.fnGetKeyFilter, "~fnGetKeyFilter~");
30
+ assert.deepEqual(oTreeState.mPredicate2ExpandLevels, {});
31
+ assert.deepEqual(oTreeState.getOutOfPlaceGroupedByParent(), []);
32
+ assert.deepEqual(oTreeState.getOutOfPlaceCount(), 0);
31
33
  });
32
34
 
33
35
  //*********************************************************************************************
34
36
  QUnit.test("expand/collapse", function (assert) {
35
37
  const oTreeState = new _TreeState("~sNodeProperty~");
36
38
 
37
- this.mock(_Helper).expects("drillDown").thrice()
39
+ this.mock(_Helper).expects("getPrivateAnnotation").thrice()
40
+ .withExactArgs("~oNode~", "predicate").returns("~predicate~");
41
+ this.mock(_Helper).expects("drillDown").twice()
38
42
  .withExactArgs("~oNode~", "~sNodeProperty~")
39
43
  .returns("~sNodeId~");
40
44
 
41
45
  // code under test
42
46
  oTreeState.expand("~oNode~");
43
47
 
44
- assert.deepEqual(mapContent(oTreeState.oExpandLevels),
45
- [["~sNodeId~", {NodeID : "~sNodeId~", Levels : 1}]]);
48
+ assert.deepEqual(oTreeState.mPredicate2ExpandLevels,
49
+ {"~predicate~" : {NodeID : "~sNodeId~", Levels : 1}});
46
50
 
47
51
  // code under test
48
52
  oTreeState.expand("~oNode~");
49
53
 
50
- assert.deepEqual(mapContent(oTreeState.oExpandLevels),
51
- [["~sNodeId~", {NodeID : "~sNodeId~", Levels : 1}]]);
54
+ assert.deepEqual(oTreeState.mPredicate2ExpandLevels,
55
+ {"~predicate~" : {NodeID : "~sNodeId~", Levels : 1}});
52
56
 
53
57
  // code under test
54
58
  oTreeState.collapse("~oNode~");
55
59
 
56
- assert.deepEqual(mapContent(oTreeState.oExpandLevels), []);
60
+ assert.deepEqual(oTreeState.mPredicate2ExpandLevels, {});
57
61
  });
58
62
 
59
63
  //*********************************************************************************************
60
64
  QUnit.test("collapse/expand", function (assert) {
61
65
  const oTreeState = new _TreeState("~sNodeProperty~");
62
66
 
63
- this.mock(_Helper).expects("drillDown").thrice()
67
+ this.mock(_Helper).expects("getPrivateAnnotation").thrice()
68
+ .withExactArgs("~oNode~", "predicate").returns("~predicate~");
69
+ this.mock(_Helper).expects("drillDown").twice()
64
70
  .withExactArgs("~oNode~", "~sNodeProperty~")
65
71
  .returns("~sNodeId~");
66
72
 
67
73
  // code under test
68
74
  oTreeState.collapse("~oNode~");
69
75
 
70
- assert.deepEqual(mapContent(oTreeState.oExpandLevels),
71
- [["~sNodeId~", {NodeID : "~sNodeId~", Levels : 0}]]);
76
+ assert.deepEqual(oTreeState.mPredicate2ExpandLevels,
77
+ {"~predicate~" : {NodeID : "~sNodeId~", Levels : 0}});
72
78
 
73
79
  // code under test
74
80
  oTreeState.collapse("~oNode~");
75
81
 
76
- assert.deepEqual(mapContent(oTreeState.oExpandLevels),
77
- [["~sNodeId~", {NodeID : "~sNodeId~", Levels : 0}]]);
82
+ assert.deepEqual(oTreeState.mPredicate2ExpandLevels,
83
+ {"~predicate~" : {NodeID : "~sNodeId~", Levels : 0}});
78
84
 
79
85
  // code under test
80
86
  oTreeState.expand("~oNode~");
81
87
 
82
- assert.deepEqual(mapContent(oTreeState.oExpandLevels), []);
88
+ assert.deepEqual(oTreeState.mPredicate2ExpandLevels, {});
83
89
  });
84
90
 
85
91
  //*********************************************************************************************
86
92
  QUnit.test("delete", function (assert) {
87
93
  const oTreeState = new _TreeState("~sNodeProperty~");
88
94
 
89
- oTreeState.oExpandLevels.set("foo", "bar");
90
- oTreeState.oExpandLevels.set("~sNodeId~", "~");
91
- this.mock(_Helper).expects("drillDown")
92
- .withExactArgs("~oNode~", "~sNodeProperty~")
93
- .returns("~sNodeId~");
95
+ oTreeState.mPredicate2ExpandLevels["foo"] = "bar";
96
+ oTreeState.mPredicate2ExpandLevels["~predicate~"] = "~";
97
+ this.mock(_Helper).expects("getPrivateAnnotation")
98
+ .withExactArgs("~oNode~", "predicate").returns("~predicate~");
94
99
 
95
100
  // code under test
96
101
  oTreeState.delete("~oNode~");
97
102
 
98
- assert.deepEqual(mapContent(oTreeState.oExpandLevels), [["foo", "bar"]]);
103
+ assert.deepEqual(oTreeState.mPredicate2ExpandLevels, {foo : "bar"});
99
104
  });
100
105
 
101
106
  //*********************************************************************************************
@@ -103,25 +108,26 @@ sap.ui.define([
103
108
  QUnit.test(sMethod + ": no sNodeProperty", function (assert) {
104
109
  const oTreeState = new _TreeState();
105
110
 
106
- oTreeState.oExpandLevels.set("foo", "bar");
111
+ oTreeState.mPredicate2ExpandLevels["foo"] = "bar";
107
112
  this.mock(_Helper).expects("drillDown").never();
108
113
 
109
114
  // code under test
110
115
  oTreeState[sMethod]("~oNode~");
111
116
 
112
- assert.deepEqual(mapContent(oTreeState.oExpandLevels), [["foo", "bar"]]);
117
+ assert.deepEqual(oTreeState.mPredicate2ExpandLevels, {foo : "bar"});
113
118
  });
114
119
  });
115
120
 
116
121
  //*********************************************************************************************
117
122
  QUnit.test("getExpandLevels/reset", function (assert) {
118
123
  const oTreeState = new _TreeState("~sNodeProperty~");
124
+ oTreeState.oOutOfPlace = "~oOutOfPlace~";
119
125
 
120
126
  // code under test
121
127
  assert.strictEqual(oTreeState.getExpandLevels(), undefined);
122
128
 
123
- oTreeState.oExpandLevels.set("foo", {bar : 42});
124
- oTreeState.oExpandLevels.set("baz", {qux : 23});
129
+ oTreeState.mPredicate2ExpandLevels["foo"] = {bar : 42};
130
+ oTreeState.mPredicate2ExpandLevels["baz"] = {qux : 23};
125
131
 
126
132
  // code under test
127
133
  assert.strictEqual(oTreeState.getExpandLevels(), '[{"bar":42},{"qux":23}]');
@@ -129,6 +135,113 @@ sap.ui.define([
129
135
  // code under test
130
136
  oTreeState.reset();
131
137
 
132
- assert.deepEqual(mapContent(oTreeState.oExpandLevels), []);
138
+ assert.deepEqual(oTreeState.mPredicate2ExpandLevels, {});
139
+ });
140
+
141
+ //*********************************************************************************************
142
+ QUnit.test("out of place", function (assert) {
143
+ const fnGetKeyFilter = mustBeMocked;
144
+ const oTreeState = new _TreeState("~sNodeProperty~", fnGetKeyFilter);
145
+
146
+ // code under test
147
+ assert.deepEqual(oTreeState.getOutOfPlaceGroupedByParent(), []);
148
+
149
+ const oHelperMock = this.mock(_Helper);
150
+ oHelperMock.expects("getPrivateAnnotation").withExactArgs("~oParent1~", "predicate")
151
+ .returns("~parent1Predicate~");
152
+ const oTreeStateMock = this.mock(oTreeState);
153
+ oTreeStateMock.expects("fnGetKeyFilter").withExactArgs("~oParent1~")
154
+ .returns("~parent1Filter~");
155
+ oTreeStateMock.expects("fnGetKeyFilter").withExactArgs("~oNode1~").returns("~node1Filter~");
156
+ oHelperMock.expects("getPrivateAnnotation").withExactArgs("~oNode1~", "predicate")
157
+ .returns("~node1Predicate~");
158
+
159
+ // code under test
160
+ oTreeState.setOutOfPlace("~oNode1~", "~oParent1~");
161
+
162
+ assert.deepEqual(oTreeState.getOutOfPlaceGroupedByParent(), [{
163
+ nodeFilters : ["~node1Filter~"],
164
+ nodePredicates : ["~node1Predicate~"],
165
+ parentFilter : "~parent1Filter~",
166
+ parentPredicate : "~parent1Predicate~"
167
+ }]);
168
+ assert.strictEqual(oTreeState.getOutOfPlaceCount(), 1);
169
+
170
+ oHelperMock.expects("getPrivateAnnotation").withExactArgs("~oParent2~", "predicate")
171
+ .returns("~parent2Predicate~");
172
+ oTreeStateMock.expects("fnGetKeyFilter").withExactArgs("~oParent2~")
173
+ .returns("~parent2Filter~");
174
+ oTreeStateMock.expects("fnGetKeyFilter").withExactArgs("~oNode3~").returns("~node3Filter~");
175
+ oHelperMock.expects("getPrivateAnnotation").withExactArgs("~oNode3~", "predicate")
176
+ .returns("~node3Predicate~");
177
+
178
+ // code under test
179
+ oTreeState.setOutOfPlace("~oNode3~", "~oParent2~");
180
+
181
+ assert.deepEqual(oTreeState.getOutOfPlaceGroupedByParent(), [{
182
+ nodeFilters : ["~node1Filter~"],
183
+ nodePredicates : ["~node1Predicate~"],
184
+ parentFilter : "~parent1Filter~",
185
+ parentPredicate : "~parent1Predicate~"
186
+ }, {
187
+ nodeFilters : ["~node3Filter~"],
188
+ nodePredicates : ["~node3Predicate~"],
189
+ parentFilter : "~parent2Filter~",
190
+ parentPredicate : "~parent2Predicate~"
191
+ }]);
192
+ assert.strictEqual(oTreeState.getOutOfPlaceCount(), 2);
193
+
194
+ oHelperMock.expects("getPrivateAnnotation").withExactArgs("~oParent1~", "predicate")
195
+ .returns("~parent1Predicate~");
196
+ oTreeStateMock.expects("fnGetKeyFilter").withExactArgs("~oNode2~").returns("~node2Filter~");
197
+ oHelperMock.expects("getPrivateAnnotation").withExactArgs("~oNode2~", "predicate")
198
+ .returns("~node2Predicate~");
199
+
200
+ // code under test
201
+ oTreeState.setOutOfPlace("~oNode2~", "~oParent1~");
202
+
203
+ // code under test
204
+ assert.deepEqual(oTreeState.getOutOfPlaceGroupedByParent(), [{
205
+ nodeFilters : ["~node1Filter~", "~node2Filter~"],
206
+ nodePredicates : ["~node1Predicate~", "~node2Predicate~"],
207
+ parentFilter : "~parent1Filter~",
208
+ parentPredicate : "~parent1Predicate~"
209
+ }, {
210
+ nodeFilters : ["~node3Filter~"],
211
+ nodePredicates : ["~node3Predicate~"],
212
+ parentFilter : "~parent2Filter~",
213
+ parentPredicate : "~parent2Predicate~"
214
+ }]);
215
+ assert.strictEqual(oTreeState.getOutOfPlaceCount(), 3);
216
+
217
+ oTreeStateMock.expects("fnGetKeyFilter").withExactArgs("~oNode4~").returns("~node4Filter~");
218
+ oHelperMock.expects("getPrivateAnnotation").withExactArgs("~oNode4~", "predicate")
219
+ .returns("~node4Predicate~");
220
+
221
+ // code under test
222
+ oTreeState.setOutOfPlace("~oNode4~");
223
+
224
+ // code under test
225
+ assert.deepEqual(oTreeState.getOutOfPlaceGroupedByParent(), [{
226
+ nodeFilters : ["~node1Filter~", "~node2Filter~"],
227
+ nodePredicates : ["~node1Predicate~", "~node2Predicate~"],
228
+ parentFilter : "~parent1Filter~",
229
+ parentPredicate : "~parent1Predicate~"
230
+ }, {
231
+ nodeFilters : ["~node3Filter~"],
232
+ nodePredicates : ["~node3Predicate~"],
233
+ parentFilter : "~parent2Filter~",
234
+ parentPredicate : "~parent2Predicate~"
235
+ }, {
236
+ nodeFilters : ["~node4Filter~"],
237
+ nodePredicates : ["~node4Predicate~"]
238
+ }]);
239
+
240
+ // code under test
241
+ oTreeState.reset();
242
+
243
+ // code under test
244
+ assert.deepEqual(oTreeState.getOutOfPlaceGroupedByParent(), []);
245
+ assert.strictEqual(oTreeState.getOutOfPlaceCount(), 0);
133
246
  });
134
247
  });
@@ -349,13 +349,15 @@ sap.ui.define([
349
349
  beforeEach: function () {
350
350
  this.clock = sinon.useFakeTimers();
351
351
  this.fnWaitAsyncSpy = sinon.spy(_autoWaiterAsync, "waitAsync");
352
- this.fnConfigSpy = sinon.spy(_autoWaiterAsync, "extendConfig");
352
+ this.fnConfigAsyncWaiterSpy = sinon.spy(_autoWaiterAsync, "extendConfig");
353
+ this.fnConfigWaiterSpy = sinon.spy(_autoWaiter, "extendConfig");
353
354
  this.fnHasToWaitStub = sinon.stub(_autoWaiter, "hasToWait");
354
355
  },
355
356
  afterEach: function () {
356
357
  this.clock.restore();
357
358
  this.fnWaitAsyncSpy.restore();
358
- this.fnConfigSpy.restore();
359
+ this.fnConfigAsyncWaiterSpy.restore();
360
+ this.fnConfigWaiterSpy.restore();
359
361
  this.fnHasToWaitStub.restore();
360
362
  }
361
363
  });
@@ -367,7 +369,7 @@ sap.ui.define([
367
369
  RecordReplay.waitForUI5({timeout: 10000, interval: 100}).then(function () {
368
370
  assert.ok(this.fnHasToWaitStub.called, "Should call autoWaiter");
369
371
  assert.ok(!_autoWaiter.hasToWait(), "Should wait for processing to end");
370
- assert.ok(this.fnConfigSpy.calledOnce, "Should configure polling parameters");
372
+ assert.ok(this.fnConfigAsyncWaiterSpy.calledOnce, "Should configure polling parameters");
371
373
  assert.ok(this.fnWaitAsyncSpy.calledOnce, "Should poll for autoWaiter conditions to be met");
372
374
  }.bind(this)).catch(function (error) {
373
375
  assert.ok(false, "Should not reach here" + error);
@@ -393,4 +395,11 @@ sap.ui.define([
393
395
 
394
396
  this.clock.tick(200);
395
397
  });
398
+
399
+ QUnit.test("Should apply default values when parameters values ommited", function (assert) {
400
+ RecordReplay.waitForUI5({timeout: 10000, interval: 100});
401
+ assert.ok(this.fnConfigWaiterSpy.calledWithMatch({timeout: 10000, interval: 100}), "the custom values are applied");
402
+ RecordReplay.waitForUI5().catch(function() {}); // ignore error for calling waitForUI5 twice sychronously
403
+ assert.ok(this.fnConfigWaiterSpy.calledWithMatch({timeout: 15000, interval: 400}), "the default values are applied");
404
+ });
396
405
  });
@@ -4,12 +4,11 @@ sap.ui.define([
4
4
  "sap/base/i18n/ResourceBundle",
5
5
  "sap/ui/Device",
6
6
  "sap/ui/base/SyncPromise",
7
- "sap/ui/core/Core",
8
7
  "sap/ui/core/Supportability",
9
8
  "sap/ui/model/BindingMode",
10
9
  "sap/ui/model/resource/ResourceModel",
11
10
  "sap/ui/testlib/TestButton"
12
- ], function(Log, Localization, ResourceBundle, Device, SyncPromise, Core, Supportability, BindingMode,
11
+ ], function(Log, Localization, ResourceBundle, Device, SyncPromise, Supportability, BindingMode,
13
12
  ResourceModel, TestButton) {
14
13
  /*global sinon, QUnit*/
15
14
  /*eslint no-new: 0 */
@@ -4,6 +4,7 @@ sap.ui.define([
4
4
  "use strict";
5
5
  var Component = UIComponent.extend("qunit.placeholder.component.NavContainerOptOut.Component", {
6
6
  metadata : {
7
+ interfaces: ["sap.ui.core.IAsyncContentCreation"],
7
8
  manifest: "json"
8
9
  }
9
10
  });