@openui5/sap.ui.core 1.121.1 → 1.122.1

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
@@ -28,6 +28,7 @@ sap.ui.define([
28
28
  "sap/ui/model/message/MessageModel",
29
29
  "sap/ui/model/odata/CountMode",
30
30
  "sap/ui/model/odata/MessageScope",
31
+ "sap/ui/model/odata/type/Decimal",
31
32
  "sap/ui/model/odata/v2/Context",
32
33
  "sap/ui/model/odata/v2/ODataModel",
33
34
  "sap/ui/model/xml/XMLModel",
@@ -38,8 +39,8 @@ sap.ui.define([
38
39
  // "sap/ui/table/Table"
39
40
  ], function (Log, Localization, merge, uid, Input, Device, ManagedObjectObserver, SyncPromise,
40
41
  Library, coreLibrary, Messaging, UI5Date, Message, Controller, View, Rendering, BindingMode, Filter,
41
- FilterOperator, FilterType, Model, Sorter, JSONModel, MessageModel, CountMode, MessageScope, Context,
42
- ODataModel, XMLModel, TestUtils, datajs, XMLHelper) {
42
+ FilterOperator, FilterType, Model, Sorter, JSONModel, MessageModel, CountMode, MessageScope, Decimal,
43
+ Context, ODataModel, XMLModel, TestUtils, datajs, XMLHelper) {
43
44
  /*global QUnit, sinon*/
44
45
  /*eslint max-nested-callbacks: 0, no-warning-comments: 0, quote-props: 0*/
45
46
  "use strict";
@@ -10054,6 +10055,76 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10054
10055
  });
10055
10056
  });
10056
10057
 
10058
+ //*********************************************************************************************
10059
+ // Scenario: AnalyticalBinding filtering by Edm.DateTime property with precision > 3
10060
+ // JIRA: CPOUI5MODELS-1582
10061
+ QUnit.test("AnalyticalBinding: Filtering Edm.DateTime property with precision > 3", function (assert) {
10062
+ const oModel = createModel("/sap/opu/odata/sap/FAR_CUSTOMER_LINE_ITEMS");
10063
+ const sView = '\
10064
+ <t:AnalyticalTable id="table" threshold="10" visibleRowCount="4">\
10065
+ <t:AnalyticalColumn grouped="true" leadingProperty="CompanyCode">\
10066
+ <Label text="CompanyCode"/>\
10067
+ <t:template><Text wrapping="false" text="{CompanyCode}"/></t:template>\
10068
+ </t:AnalyticalColumn>\
10069
+ <t:AnalyticalColumn grouped="false" leadingProperty="Customer">\
10070
+ <Label text="Customer"/>\
10071
+ <t:template><Text text="{Customer}"/></t:template>\
10072
+ </t:AnalyticalColumn>\
10073
+ <t:AnalyticalColumn summed="true" leadingProperty="AmountInCompanyCodeCurrency">\
10074
+ <Label text="AmountInCompanyCodeCurrency"/>\
10075
+ <t:template><Text wrapping="false" text="{AmountInCompanyCodeCurrency}"/></t:template>\
10076
+ </t:AnalyticalColumn>\
10077
+ </t:AnalyticalTable>';
10078
+
10079
+ return this.createView(assert, sView, oModel).then(() => {
10080
+ const sExpectedFilter = "&$filter=((ChangedAt%20ge%20datetime%272020-02-01T15%3a30%3a02.456123%27%20"
10081
+ + "and%20ChangedAt%20le%20datetime%272020-02-01T18%3a45%3a02.456789%27))";
10082
+ this.expectHeadRequest()
10083
+ .expectRequest({ // count request
10084
+ encodeRequestUri : false,
10085
+ requestUri : "Items?$select=CompanyCode,Customer" + sExpectedFilter
10086
+ + "&$top=0&$inlinecount=allpages"
10087
+ }, {__count : "1", results : []})
10088
+ .expectRequest({ // first level request
10089
+ encodeRequestUri : false,
10090
+ requestUri : "Items?"
10091
+ + "$select=CompanyCode,AmountInCompanyCodeCurrency,Currency" + sExpectedFilter
10092
+ + "&$orderby=CompanyCode%20asc&$top=14&$inlinecount=allpages"
10093
+ }, {
10094
+ results : [getFarCustomerLineItem("A0")]
10095
+ })
10096
+ .expectRequest({ // grand total request
10097
+ encodeRequestUri : false,
10098
+ requestUri : "Items?$select=AmountInCompanyCodeCurrency,Currency" + sExpectedFilter
10099
+ + "&$top=100&$inlinecount=allpages"
10100
+ }, {
10101
+ __count : 1,
10102
+ results : [{
10103
+ __metadata : {uri : "/sap/opu/odata/sap/FAR_CUSTOMER_LINE_ITEMS/Items(grandTotal)"},
10104
+ AmountInCompanyCodeCurrency : "140",
10105
+ Currency : "USD"
10106
+ }]
10107
+ });
10108
+ const oFilter = new Filter("ChangedAt", FilterOperator.BT, new Date(Date.UTC(2020, 1, 1, 15, 30, 2, 456)),
10109
+ new Date(Date.UTC(2020, 1, 1, 18, 45, 2, 456)));
10110
+ oFilter.appendFractionalSeconds1("123");
10111
+ oFilter.appendFractionalSeconds2("789");
10112
+
10113
+ // code under test
10114
+ this.oView.byId("table").bindRows({
10115
+ path : "/Items",
10116
+ parameters : {
10117
+ autoExpandMode : "Sequential",
10118
+ numberOfExpandedLevels : 0,
10119
+ useBatchRequests : true
10120
+ },
10121
+ filters : [oFilter]
10122
+ });
10123
+
10124
+ return this.waitForChanges(assert);
10125
+ });
10126
+ });
10127
+
10057
10128
  //*********************************************************************************************
10058
10129
  // Scenario: If a request for an AnalyticalBinding is cancelled because the analytical info has
10059
10130
  // been updated before the request was processed, a "dataReceived" event has to be fired. Table
@@ -11242,6 +11313,76 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
11242
11313
  });
11243
11314
  });
11244
11315
 
11316
+ //*********************************************************************************************
11317
+ // Scenario: Do not show more decimal places than available for the amount/quantity part
11318
+ // JIRA: CPOUI5MODELS-1600
11319
+ QUnit.test("OData UnitType with unit decimals places > measure scale", function (assert) {
11320
+ const oModel = createModel("/sap/opu/odata/sap/ZUI5_GWSAMPLE_BASIC/?CPOUI5MODELS-1600=true",
11321
+ {defaultBindingMode : "TwoWay", tokenHandling : false});
11322
+ const sView = '\
11323
+ <FlexBox binding="{/ProductSet(\'P1\')}">\
11324
+ <Input id="weight" value="{\
11325
+ parts : [{\
11326
+ constraints : {precision : 13, scale : 3},\
11327
+ path : \'WeightMeasure\',\
11328
+ type : \'sap.ui.model.odata.type.Decimal\'\
11329
+ }, {\
11330
+ path : \'WeightUnit\',\
11331
+ type : \'sap.ui.model.odata.type.String\'\
11332
+ }, {\
11333
+ mode : \'OneTime\',\
11334
+ path : \'/##@@requestUnitsOfMeasure\',\
11335
+ targetType : \'any\'\
11336
+ }],\
11337
+ mode : \'TwoWay\',\
11338
+ type : \'sap.ui.model.odata.type.Unit\'\
11339
+ }" />\
11340
+ </FlexBox>';
11341
+ let oControl;
11342
+
11343
+ this.expectRequest("ProductSet('P1')?CPOUI5MODELS-1600=true", {
11344
+ ProductID : "P1",
11345
+ WeightMeasure : "12.34",
11346
+ WeightUnit : "KWH"
11347
+ })
11348
+ .expectRequest("SAP__UnitsOfMeasure?CPOUI5MODELS-1600=true&$skip=0&$top=5000", {
11349
+ results : [{
11350
+ DecimalPlaces : 99, // more decimals than WeightMeasure's scale
11351
+ ExternalCode : "KWH",
11352
+ ISOCode : "KWH",
11353
+ Text : "Kilowatt hour",
11354
+ UnitCode : "KWH"
11355
+ }]
11356
+ })
11357
+ .expectValue("weight", "12.340 KWH");
11358
+
11359
+ return this.createView(assert, sView, oModel).then(() => {
11360
+ oControl = this.oView.byId("weight");
11361
+
11362
+ this.expectValue("weight", "23.456 KWH");
11363
+
11364
+ // code under test
11365
+ oControl.setValue("23.456 KWH");
11366
+
11367
+ return this.waitForChanges(assert);
11368
+ }).then(() => {
11369
+ this.expectValue("weight", "0.000 KWH")
11370
+ .expectValue("weight", "0.000 KWH"); // twice because 2 parts changed
11371
+
11372
+ // code under test
11373
+ oControl.setValue("");
11374
+
11375
+ return this.waitForChanges(assert);
11376
+ }).then(() => {
11377
+ this.expectValue("weight", "0.00 KWH");
11378
+
11379
+ // code under test (change WeightMeasure's type, scale is now 2)
11380
+ oControl.getBinding("value").getBindings()[0].setType(new Decimal(undefined, {precision : 13, scale : 2}));
11381
+
11382
+ return this.waitForChanges(assert);
11383
+ });
11384
+ });
11385
+
11245
11386
  //*********************************************************************************************
11246
11387
  // Scenario: If the OData service has no customizing for currencies, the OData Currency type
11247
11388
  // uses the UI5 built-in CLDR information for formatting and parsing.
@@ -287,6 +287,40 @@ sap.ui.define([
287
287
  });
288
288
  });
289
289
 
290
+ //*********************************************************************************************
291
+ [{
292
+ sUrl : "$metadata",
293
+ mAllParams : {"f oo" : "qux"}
294
+ }, {
295
+ sUrl : "$metadata?a%20b=c%20d&e+f=g+h&i j=k l&m?n=o?p&q/r=s/t&u",
296
+ mAllParams : {"a b" : "c d", "e f" : "g h", "f oo": "qux", "i j" : "k l", "m?n" : "o?p", "q/r" : "s/t", "u" : ""}
297
+ }, {
298
+ sUrl : "/$metadata?f%20oo=b+ar#bar=baz",
299
+ mAllParams : {"f oo" : "b ar"}
300
+ }, {
301
+ sUrl : "https://xyz.com/ServiceUrl/$metadata?foo=b+ar#bar=baz",
302
+ mAllParams : {"foo" : "b ar", "f oo" : "qux"},
303
+ sTargetUrl : "https://xyz.com/ServiceUrl/$metadata"
304
+ }].forEach(({sUrl, mAllParams, sTargetUrl}, i) => {
305
+ QUnit.test("_createMetadataUrl: " + i, function (assert) {
306
+ const oModel = {
307
+ mMetadataUrlParams : {"f oo" : "qux"},
308
+ sServiceUrl : "/ServiceUrl",
309
+ _addUrlParams : function () {}
310
+ };
311
+
312
+ this.mock(ODataUtils).expects("_createUrlParamsArray").withExactArgs(mAllParams).returns("~aMetadataUrlParams");
313
+ this.mock(oModel).expects("_addUrlParams")
314
+ .withExactArgs(sTargetUrl || "/ServiceUrl/$metadata", "~aMetadataUrlParams")
315
+ .returns("~sUrl");
316
+
317
+ // code under test
318
+ assert.strictEqual(ODataModel.prototype._createMetadataUrl.call(oModel, sUrl), "~sUrl");
319
+
320
+ assert.deepEqual(oModel.mMetadataUrlParams, {"f oo" : "qux"});
321
+ });
322
+ });
323
+
290
324
  //*********************************************************************************************
291
325
  QUnit.test("_read: updateAggregatedMessages and bSideEffects are passed to _createRequest",
292
326
  function (assert) {
@@ -272,7 +272,7 @@ sap.ui.define([
272
272
  new SyncPromise(function (resolve) {
273
273
  fnResolve = resolve;
274
274
  }));
275
- oContext.setSelected(bSelected);
275
+ oContext.bSelected = bSelected;
276
276
 
277
277
  // code under test
278
278
  assert.strictEqual(oContext.toString(), bSelected
@@ -403,24 +403,43 @@ sap.ui.define([
403
403
  },
404
404
  oContext = Context.create(null, oBinding, "/foo");
405
405
 
406
+ oContext.bSelected = "~selected~";
407
+
406
408
  this.mock(oBinding).expects("getHeaderContext").withExactArgs().returns(oContext);
407
409
  this.mock(oBinding).expects("fetchValue")
408
- .withExactArgs("/foo/$count", "~listener~", "bCached")
410
+ .withExactArgs("/foo/$count", null, "bCached")
409
411
  .returns(SyncPromise.resolve(Promise.resolve(42)));
410
412
 
411
- return oContext.fetchValue(sPath, "~listener~", "bCached").then(function (oResult) {
412
- assert.deepEqual(oResult, {$count : 42});
413
+ return oContext.fetchValue(sPath, null, "bCached").then(function (oResult) {
414
+ assert.deepEqual(oResult,
415
+ {"@$ui5.context.isSelected" : "~selected~", $count : 42});
413
416
  });
414
417
  });
415
418
  });
416
419
 
420
+ //*********************************************************************************************
421
+ [undefined, "", "/foo"].forEach(function (sPath) {
422
+ const sTitle = "fetchValue: header context; error case, path=" + JSON.stringify(sPath);
423
+
424
+ QUnit.test(sTitle, function (assert) {
425
+ const oContext = Context.create(null, {
426
+ getHeaderContext : () => oContext
427
+ }, "/foo");
428
+
429
+ assert.throws(function () {
430
+ oContext.fetchValue(sPath, "~listener~");
431
+ }, new Error("Cannot register change listener for header context object"));
432
+ });
433
+ });
434
+
417
435
  //*********************************************************************************************
418
436
  [false, true].forEach(function (bAutoExpandSelect) {
419
- ["$count", "/foo/$count"].forEach(function (sPath) {
437
+ ["$count", "/foo/$count", "@$ui5.context.isSelected", "/foo/@$ui5.context.isSelected"]
438
+ .forEach(function (sPath) {
420
439
  var sTitle = "fetchValue: header context, autoExpandSelect=" + bAutoExpandSelect
421
440
  + ", path=" + sPath;
422
441
 
423
- QUnit.test(sTitle + sPath, function (assert) {
442
+ QUnit.test(sTitle, function (assert) {
424
443
  var oBinding = {
425
444
  fetchValue : function () {},
426
445
  getBaseForPathReduction : function () {},
@@ -436,20 +455,35 @@ sap.ui.define([
436
455
  },
437
456
  oContext = Context.create(oModel, oBinding, "/foo");
438
457
 
458
+ oContext.bSelected = "~selected~";
459
+
439
460
  this.mock(oBinding).expects("getHeaderContext").withExactArgs().returns(oContext);
440
- this.mock(oModel).expects("resolve")
441
- .withExactArgs("$count", sinon.match.same(oContext)).returns("/~");
442
- if (bAutoExpandSelect) {
443
- this.mock(oBinding).expects("getBaseForPathReduction").withExactArgs().returns("/base");
444
- this.mock(oMetaModel).expects("getReducedPath").withExactArgs("/~", "/base")
445
- .returns("/reduced");
461
+ if (sPath.includes("$count")) {
462
+ this.mock(oModel).expects("resolve")
463
+ .withExactArgs("$count", sinon.match.same(oContext)).returns("/~");
464
+ if (bAutoExpandSelect) {
465
+ this.mock(oBinding).expects("getBaseForPathReduction")
466
+ .withExactArgs().returns("/base");
467
+ this.mock(oMetaModel).expects("getReducedPath")
468
+ .withExactArgs("/~", "/base").returns("/reduced");
469
+ }
470
+ this.mock(oBinding).expects("fetchValue")
471
+ .withExactArgs(bAutoExpandSelect ? "/reduced" : "/~", "~listener~", "bCached")
472
+ .returns(SyncPromise.resolve(Promise.resolve(42)));
473
+ } else {
474
+ assert.notOk(oContext.mChangeListeners);
475
+
476
+ this.mock(oBinding).expects("fetchValue").never();
477
+ this.mock(_Helper).expects("addByPath")
478
+ .withExactArgs(sinon.match.object, "", "~listener~")
479
+ .callsFake((mChangeListeners) => {
480
+ assert.strictEqual(mChangeListeners, oContext.mChangeListeners);
481
+ assert.deepEqual(mChangeListeners, {});
482
+ });
446
483
  }
447
- this.mock(oBinding).expects("fetchValue")
448
- .withExactArgs(bAutoExpandSelect ? "/reduced" : "/~", "~listener~", "bCached")
449
- .returns(SyncPromise.resolve(Promise.resolve(42)));
450
484
 
451
- return oContext.fetchValue(sPath, "~listener~", "bCached").then(function (iCount) {
452
- assert.deepEqual(iCount, 42);
485
+ return oContext.fetchValue(sPath, "~listener~", "bCached").then(function (vValue) {
486
+ assert.strictEqual(vValue, sPath.includes("$count") ? 42 : "~selected~");
453
487
  });
454
488
  });
455
489
  });
@@ -1195,7 +1229,7 @@ sap.ui.define([
1195
1229
  oExpectation,
1196
1230
  bSelected = !!oFixture.groupId;
1197
1231
 
1198
- oContext.setSelected(bSelected);
1232
+ oContext.bSelected = bSelected;
1199
1233
  this.mock(_Helper).expects("isDataAggregation")
1200
1234
  .withExactArgs("~mParameters~").returns(false);
1201
1235
  this.mock(oBinding).expects("checkSuspended").withExactArgs();
@@ -1550,6 +1584,7 @@ sap.ui.define([
1550
1584
  }
1551
1585
  oContext.bKeepAlive = "~bKeepAlive~";
1552
1586
  oContext.oDeletePromise = "~oDeletePromise~";
1587
+ oContext.mChangeListeners = "~mChangeListeners~";
1553
1588
  oContext.setNewGeneration();
1554
1589
  iGeneration = oContext.getGeneration(true);
1555
1590
 
@@ -1574,6 +1609,7 @@ sap.ui.define([
1574
1609
  assert.strictEqual(oContext.isInactive(), undefined);
1575
1610
  assert.strictEqual(oContext.isTransient(), undefined);
1576
1611
  assert.strictEqual(oContext.toString(), "/EMPLOYEES/42[42;destroyed]");
1612
+ assert.notOk("mChangeListeners" in oContext);
1577
1613
 
1578
1614
  if (bfnOnBeforeDestroy) {
1579
1615
  assert.ok(bCallbackCalled);
@@ -3048,6 +3084,73 @@ sap.ui.define([
3048
3084
  });
3049
3085
  });
3050
3086
 
3087
+ //********************************************************************************************
3088
+ [false, true].forEach((bGroupLock) => {
3089
+ QUnit.test("doSetProperty: @$ui5.context.isSelected, group lock=" + bGroupLock, function () {
3090
+ const oBinding = {doSetProperty : mustBeMocked, getResolvedPath : mustBeMocked};
3091
+ const oMetaModel = {fetchUpdateData : mustBeMocked};
3092
+ const oModel = {getMetaModel : mustBeMocked};
3093
+ const oContext = Context.create(oModel, oBinding, "/ProductList('HT-1000')");
3094
+
3095
+ this.mock(oModel).expects("getMetaModel").returns(oMetaModel);
3096
+ this.mock(oContext).expects("isDeleted").twice().withExactArgs().returns(false);
3097
+ this.mock(oContext).expects("setSelected").withExactArgs("~bSelected~");
3098
+ this.mock(oContext).expects("isTransient").never();
3099
+ this.mock(oContext).expects("withCache")
3100
+ .withExactArgs(sinon.match.func, "@$ui5.context.isSelected", false, true)
3101
+ .callsFake((fnProcessor) => {
3102
+ const oCache = {setProperty : mustBeMocked, update : mustBeMocked};
3103
+ this.mock(oBinding).expects("doSetProperty")
3104
+ .withExactArgs("/cache/path", "~bSelected~", /*oGroupLock*/null);
3105
+ this.mock(oMetaModel).expects("fetchUpdateData")
3106
+ .withExactArgs("@$ui5.context.isSelected", sinon.match.same(oContext), true)
3107
+ .returns(SyncPromise.resolve({
3108
+ entityPath : "/entity/path",
3109
+ propertyPath : "@$ui5.context.isSelected"
3110
+ }));
3111
+ this.mock(oBinding).expects("getResolvedPath").withExactArgs()
3112
+ .returns("/resolved/binding/path");
3113
+ this.mock(_Helper).expects("getRelativePath")
3114
+ .withExactArgs("/entity/path", "/resolved/binding/path")
3115
+ .returns("helper/path");
3116
+ this.mock(oCache).expects("setProperty")
3117
+ .withExactArgs("@$ui5.context.isSelected", "~bSelected~", "helper/path",
3118
+ undefined)
3119
+ .resolves();
3120
+ this.mock(oCache).expects("update").never();
3121
+
3122
+ return fnProcessor(oCache, "/cache/path", oBinding);
3123
+ });
3124
+
3125
+ let oGroupLock = null;
3126
+ if (bGroupLock) {
3127
+ oGroupLock = {unlock : mustBeMocked};
3128
+ this.mock(oGroupLock).expects("unlock").withExactArgs();
3129
+ }
3130
+
3131
+ // code under test
3132
+ oContext.doSetProperty("@$ui5.context.isSelected", "~bSelected~", oGroupLock);
3133
+ });
3134
+ });
3135
+
3136
+ //*********************************************************************************************
3137
+ QUnit.test("doSetProperty: header context and @$ui5.context.isSelected", function (assert) {
3138
+ const oBinding = {getHeaderContext : mustBeMocked};
3139
+ const oModel = {
3140
+ getMetaModel : function () {}
3141
+ };
3142
+ const oHeaderContext = Context.create(oModel, oBinding, "/ProductList");
3143
+
3144
+ this.mock(oHeaderContext).expects("isDeleted").withExactArgs().returns(false);
3145
+ this.mock(oHeaderContext).expects("setSelected").withExactArgs("~bSelected~");
3146
+ this.mock(oBinding).expects("getHeaderContext").returns(oHeaderContext);
3147
+
3148
+ assert.strictEqual(
3149
+ // code under test
3150
+ oHeaderContext.doSetProperty("@$ui5.context.isSelected", "~bSelected~", null),
3151
+ SyncPromise.resolve());
3152
+ });
3153
+
3051
3154
  //*********************************************************************************************
3052
3155
  [function (_assert, _oModelMock, _oBinding, _oBindingMock, _fnErrorCallback, _fnPatchSent,
3053
3156
  _fnIsKeepAlive, oError) {
@@ -4352,34 +4455,71 @@ sap.ui.define([
4352
4455
  });
4353
4456
 
4354
4457
  //*********************************************************************************************
4355
- QUnit.test("setSelected", function (assert) {
4458
+ [false, true].forEach(function (bHasChangeListeners) {
4459
+ QUnit.test("setSelected: with change listeners=" + bHasChangeListeners, function () {
4460
+ const oCache = {setProperty : mustBeMocked};
4461
+ const oBinding = {getHeaderContext : "~function~"};
4356
4462
  // Note: oBinding is optional, it might already be missing in certain cases!
4357
- var oContext = Context.create({/*oModel*/}, /*oBinding*/undefined, "/some/path", 42),
4358
- oContextMock = this.mock(oContext);
4463
+ const oContext = Context.create({/*oModel*/}, oBinding, "/some/path", 42);
4464
+ if (bHasChangeListeners) {
4465
+ oContext.mChangeListeners = "~mChangeListeners~";
4466
+ }
4359
4467
 
4360
- // code under test
4361
- assert.strictEqual(oContext.isSelected(), false);
4468
+ this.mock(oContext).expects("isDeleted").withExactArgs().returns(false);
4469
+ this.mock(_Helper).expects("fireChange").exactly(bHasChangeListeners ? 1 : 0)
4470
+ .withExactArgs("~mChangeListeners~", "", "~selected~");
4471
+ this.mock(oContext).expects("withCache")
4472
+ .withExactArgs(sinon.match.func, "")
4473
+ .callsFake((fnProcessor) => {
4474
+ this.mock(oCache).expects("setProperty")
4475
+ .withExactArgs("@$ui5.context.isSelected", "~selected~", "~sPath~");
4362
4476
 
4363
- oContextMock.expects("isDeleted").withExactArgs().returns(false);
4477
+ return fnProcessor(oCache, "~sPath~");
4478
+ });
4479
+ this.mock(oContext).expects("doSetSelected").withExactArgs("~selected~");
4364
4480
 
4365
4481
  // code under test
4366
- oContext.setSelected(true);
4482
+ oContext.setSelected("~selected~");
4483
+ });
4484
+ });
4367
4485
 
4368
- assert.strictEqual(oContext.isSelected(), true);
4486
+ //*********************************************************************************************
4487
+ QUnit.test("setSelected: special cases", function () {
4488
+ const oBinding = {
4489
+ getHeaderContext : function () {}
4490
+ };
4491
+ const oCache = {};
4492
+ const oContext = Context.create({/*oModel*/}, oBinding, "/some/path", 42);
4493
+ const oContextMock = this.mock(oContext);
4369
4494
 
4370
4495
  oContextMock.expects("isDeleted").withExactArgs().returns(false);
4496
+ oContextMock.expects("withCache")
4497
+ .withExactArgs(sinon.match.func, "")
4498
+ .callsFake((fnProcessor) => {
4499
+ oContext.oBinding = undefined;
4371
4500
 
4372
- // code under test
4373
- assert.strictEqual(oContext.toString(), "/some/path[42;selected]");
4501
+ return fnProcessor(oCache, "~sPath~");
4502
+ });
4503
+ oContextMock.expects("doSetSelected").withExactArgs(true);
4374
4504
 
4375
- // Note: no addt' call to #isDeleted!
4505
+ // code under test - binding destroyed
4506
+ oContext.setSelected(true);
4376
4507
 
4377
- // code under test
4508
+ // no additional calls to withCache
4509
+ oContextMock.expects("doSetSelected").withExactArgs(false);
4510
+
4511
+ // code under test - flag unchanged
4378
4512
  oContext.setSelected(false);
4513
+ });
4379
4514
 
4380
- assert.strictEqual(oContext.isSelected(), false);
4515
+ //*********************************************************************************************
4516
+ QUnit.test("setSelected: error handling", function (assert) {
4517
+ const oBinding = {
4518
+ getHeaderContext : function () {}
4519
+ };
4520
+ let oContext = Context.create({/*oModel*/}, oBinding, "/some/path", 42);
4381
4521
 
4382
- oContextMock.expects("isDeleted").thrice().withExactArgs().returns(true);
4522
+ this.mock(oContext).expects("isDeleted").thrice().withExactArgs().returns(true); // toString
4383
4523
 
4384
4524
  assert.throws(function () {
4385
4525
  // code under test
@@ -4393,6 +4533,31 @@ sap.ui.define([
4393
4533
  // code under test
4394
4534
  oContext.setSelected(false);
4395
4535
  }, new Error("Unsupported context: " + oContext));
4536
+ });
4537
+
4538
+ //*********************************************************************************************
4539
+ QUnit.test("doSetSelected", function (assert) {
4540
+ // Note: oBinding is optional, it might already be missing in certain cases!
4541
+ let oContext = Context.create({/*oModel*/}, /*oBinding*/undefined, "/some/path", 42);
4542
+
4543
+ // code under test
4544
+ assert.strictEqual(oContext.isSelected(), false);
4545
+
4546
+ // code under test
4547
+ oContext.doSetSelected(true);
4548
+
4549
+ assert.strictEqual(oContext.isSelected(), true);
4550
+
4551
+ // code under test
4552
+ assert.strictEqual(oContext.toString(), "/some/path[42;selected]");
4553
+
4554
+ // code under test
4555
+ oContext.doSetSelected(false);
4556
+
4557
+ assert.strictEqual(oContext.isSelected(), false);
4558
+
4559
+ // code under test
4560
+ assert.strictEqual(oContext.toString(), "/some/path[42]");
4396
4561
 
4397
4562
  oContext = Context.create({/*oModel*/}, {
4398
4563
  getHeaderContext : true,
@@ -4402,11 +4567,11 @@ sap.ui.define([
4402
4567
  this.mock(oContext.oBinding).expects("onKeepAliveChanged")
4403
4568
  .withExactArgs(sinon.match.same(oContext))
4404
4569
  .callsFake(function () {
4405
- assert.strictEqual(oContext.bSelected, "~bSelected~");
4570
+ assert.strictEqual(oContext.bSelected, "~selected~");
4406
4571
  });
4407
4572
 
4408
4573
  // code under test
4409
- oContext.setSelected("~bSelected~");
4574
+ oContext.doSetSelected("~selected~");
4410
4575
  });
4411
4576
 
4412
4577
  //*********************************************************************************************
@@ -4436,7 +4601,7 @@ sap.ui.define([
4436
4601
  },
4437
4602
  oHeaderContext = Context.create({/*oModel*/}, oBinding, "/TEAMS");
4438
4603
 
4439
- oHeaderContext.setSelected(true);
4604
+ oHeaderContext.bSelected = true;
4440
4605
  this.mock(_Helper).expects("isDataAggregation").never();
4441
4606
 
4442
4607
  // code under test
@@ -4457,7 +4622,7 @@ sap.ui.define([
4457
4622
  // code under test
4458
4623
  assert.strictEqual(oContext.isEffectivelyKeptAlive(), false);
4459
4624
 
4460
- oContext.setSelected(true);
4625
+ oContext.bSelected = true;
4461
4626
  oBindingMock.expects("isRelative").withExactArgs().returns(false);
4462
4627
  this.mock(_Helper).expects("isDataAggregation")
4463
4628
  .withExactArgs(sinon.match.same(oBinding.mParameters)).returns(false);
@@ -4502,7 +4667,7 @@ sap.ui.define([
4502
4667
  },
4503
4668
  oContext = Context.create({/*oModel*/}, oBinding, sContextPath);
4504
4669
 
4505
- oContext.setSelected(true);
4670
+ oContext.bSelected = true;
4506
4671
  this.mock(_Helper).expects("isDataAggregation")
4507
4672
  .withExactArgs(sinon.match.same(oBinding.mParameters)).returns(false);
4508
4673
 
@@ -4521,7 +4686,7 @@ sap.ui.define([
4521
4686
  },
4522
4687
  oContext = Context.create({/*oModel*/}, oBinding, "/TEAMS('1')");
4523
4688
 
4524
- oContext.setSelected(true);
4689
+ oContext.bSelected = true;
4525
4690
  this.mock(_Helper).expects("isDataAggregation")
4526
4691
  .withExactArgs(sinon.match.same(oBinding.mParameters)).returns(true);
4527
4692
 
@@ -4539,7 +4704,7 @@ sap.ui.define([
4539
4704
  };
4540
4705
  const oContext = Context.create({/*oModel*/}, oBinding, "/SalesOrderList('0')/Messages/0");
4541
4706
 
4542
- oContext.setSelected(true);
4707
+ oContext.bSelected = true;
4543
4708
  this.mock(_Helper).expects("isDataAggregation")
4544
4709
  .withExactArgs(sinon.match.same(oBinding.mParameters)).returns(false);
4545
4710
 
@@ -4621,6 +4786,32 @@ sap.ui.define([
4621
4786
  }, "~oError~");
4622
4787
  });
4623
4788
 
4789
+ //*********************************************************************************************
4790
+ QUnit.test("deregisterChangeListener", function (assert) {
4791
+ const oContext = Context.create({/*oModel*/}, {/*oBinding*/}, "/path");
4792
+ let oListener = {
4793
+ getPath : () => "foo"
4794
+ };
4795
+
4796
+ // code under test
4797
+ assert.strictEqual(oContext.deregisterChangeListener(), false, "no mChangeListeners");
4798
+
4799
+ oContext.mChangeListeners = {};
4800
+
4801
+ // code under test
4802
+ assert.strictEqual(oContext.deregisterChangeListener(oListener), false, "wrong path");
4803
+
4804
+ oListener = {
4805
+ getPath : () => "@$ui5.context.isSelected"
4806
+ };
4807
+ this.mock(_Helper).expects("removeByPath")
4808
+ .withExactArgs(sinon.match.same(oContext.mChangeListeners), "",
4809
+ sinon.match.same(oListener));
4810
+
4811
+ // code under test
4812
+ assert.strictEqual(oContext.deregisterChangeListener(oListener), true);
4813
+ });
4814
+
4624
4815
  //*********************************************************************************************
4625
4816
  [0, 1].forEach(function (iFailureIndex) {
4626
4817
  QUnit.test("updateAfterCreate, fail=" + iFailureIndex, function () {