@openui5/sap.ui.core 1.120.3 → 1.120.4

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 (418) hide show
  1. package/package.json +1 -1
  2. package/src/jquery.sap.global.js +1 -1
  3. package/src/jquery.sap.properties.js +1 -1
  4. package/src/jquery.sap.resources.js +1 -1
  5. package/src/jquery.sap.script.js +1 -1
  6. package/src/jquery.sap.storage.js +3 -3
  7. package/src/sap/base/Event.js +1 -1
  8. package/src/sap/base/Eventing.js +1 -1
  9. package/src/sap/base/config.js +1 -1
  10. package/src/sap/base/i18n/LanguageTag.js +1 -1
  11. package/src/sap/base/i18n/Localization.js +2 -1
  12. package/src/sap/base/i18n/ResourceBundle.js +16 -19
  13. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  14. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  15. package/src/sap/base/util/restricted/_castArray.js +1 -1
  16. package/src/sap/base/util/restricted/_compact.js +1 -1
  17. package/src/sap/base/util/restricted/_curry.js +1 -1
  18. package/src/sap/base/util/restricted/_debounce.js +1 -1
  19. package/src/sap/base/util/restricted/_difference.js +1 -1
  20. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  21. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  22. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  23. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  24. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  25. package/src/sap/base/util/restricted/_flatten.js +1 -1
  26. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  27. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  28. package/src/sap/base/util/restricted/_intersection.js +1 -1
  29. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  30. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  31. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  32. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  33. package/src/sap/base/util/restricted/_isNil.js +1 -1
  34. package/src/sap/base/util/restricted/_max.js +1 -1
  35. package/src/sap/base/util/restricted/_merge.js +1 -1
  36. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  37. package/src/sap/base/util/restricted/_min.js +1 -1
  38. package/src/sap/base/util/restricted/_omit.js +1 -1
  39. package/src/sap/base/util/restricted/_pick.js +1 -1
  40. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  41. package/src/sap/base/util/restricted/_throttle.js +1 -1
  42. package/src/sap/base/util/restricted/_toArray.js +1 -1
  43. package/src/sap/base/util/restricted/_union.js +1 -1
  44. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  45. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  46. package/src/sap/base/util/restricted/_uniq.js +1 -1
  47. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  48. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  49. package/src/sap/base/util/restricted/_without.js +1 -1
  50. package/src/sap/base/util/restricted/_xor.js +1 -1
  51. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  52. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  53. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  54. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  55. package/src/sap/ui/Device.js +3 -3
  56. package/src/sap/ui/Global.js +4 -4
  57. package/src/sap/ui/base/Event.js +1 -1
  58. package/src/sap/ui/base/EventProvider.js +1 -1
  59. package/src/sap/ui/base/Interface.js +1 -1
  60. package/src/sap/ui/base/ManagedObject.js +1 -1
  61. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  62. package/src/sap/ui/base/Metadata.js +1 -1
  63. package/src/sap/ui/base/Object.js +1 -1
  64. package/src/sap/ui/base/ObjectPool.js +1 -1
  65. package/src/sap/ui/core/.library +2 -2
  66. package/src/sap/ui/core/BusyIndicator.js +1 -1
  67. package/src/sap/ui/core/Component.js +1 -1
  68. package/src/sap/ui/core/ComponentContainer.js +1 -1
  69. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  70. package/src/sap/ui/core/ComponentSupport.js +1 -1
  71. package/src/sap/ui/core/Configuration.js +2 -2
  72. package/src/sap/ui/core/Control.js +1 -1
  73. package/src/sap/ui/core/Core.js +1 -1
  74. package/src/sap/ui/core/CustomData.js +1 -1
  75. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  76. package/src/sap/ui/core/Element.js +1 -1
  77. package/src/sap/ui/core/ElementMetadata.js +1 -1
  78. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  79. package/src/sap/ui/core/EventBus.js +1 -1
  80. package/src/sap/ui/core/Fragment.js +1 -1
  81. package/src/sap/ui/core/HTML.js +1 -1
  82. package/src/sap/ui/core/History.js +1 -1
  83. package/src/sap/ui/core/Icon.js +1 -1
  84. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  85. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  86. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  87. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  88. package/src/sap/ui/core/InvisibleText.js +1 -1
  89. package/src/sap/ui/core/Item.js +1 -1
  90. package/src/sap/ui/core/LabelEnablement.js +1 -1
  91. package/src/sap/ui/core/LayoutData.js +1 -1
  92. package/src/sap/ui/core/ListItem.js +1 -1
  93. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  94. package/src/sap/ui/core/Locale.js +1 -1
  95. package/src/sap/ui/core/LocaleData.js +2 -2
  96. package/src/sap/ui/core/Manifest.js +1 -1
  97. package/src/sap/ui/core/Message.js +1 -1
  98. package/src/sap/ui/core/RenderManager.js +1 -1
  99. package/src/sap/ui/core/Renderer.js +1 -1
  100. package/src/sap/ui/core/ResizeHandler.js +1 -1
  101. package/src/sap/ui/core/ScrollBar.js +1 -1
  102. package/src/sap/ui/core/SeparatorItem.js +1 -1
  103. package/src/sap/ui/core/Title.js +1 -1
  104. package/src/sap/ui/core/TooltipBase.js +1 -1
  105. package/src/sap/ui/core/UIArea.js +1 -1
  106. package/src/sap/ui/core/UIComponent.js +1 -1
  107. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  108. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  109. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  110. package/src/sap/ui/core/XMLComposite.js +1 -1
  111. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  112. package/src/sap/ui/core/cldr/ar.json +1 -0
  113. package/src/sap/ui/core/cldr/ar_EG.json +1 -0
  114. package/src/sap/ui/core/cldr/ar_SA.json +1 -0
  115. package/src/sap/ui/core/cldr/bg.json +1 -0
  116. package/src/sap/ui/core/cldr/ca.json +1 -0
  117. package/src/sap/ui/core/cldr/cnr.json +6169 -0
  118. package/src/sap/ui/core/cldr/cs.json +1 -0
  119. package/src/sap/ui/core/cldr/cy.json +1 -0
  120. package/src/sap/ui/core/cldr/da.json +1 -0
  121. package/src/sap/ui/core/cldr/de.json +1 -0
  122. package/src/sap/ui/core/cldr/de_AT.json +1 -0
  123. package/src/sap/ui/core/cldr/de_CH.json +1 -0
  124. package/src/sap/ui/core/cldr/el.json +1 -0
  125. package/src/sap/ui/core/cldr/el_CY.json +1 -0
  126. package/src/sap/ui/core/cldr/en.json +1 -0
  127. package/src/sap/ui/core/cldr/en_AU.json +1 -0
  128. package/src/sap/ui/core/cldr/en_GB.json +1 -0
  129. package/src/sap/ui/core/cldr/en_HK.json +1 -0
  130. package/src/sap/ui/core/cldr/en_IE.json +1 -0
  131. package/src/sap/ui/core/cldr/en_IN.json +1 -0
  132. package/src/sap/ui/core/cldr/en_NZ.json +1 -0
  133. package/src/sap/ui/core/cldr/en_PG.json +1 -0
  134. package/src/sap/ui/core/cldr/en_SG.json +1 -0
  135. package/src/sap/ui/core/cldr/en_ZA.json +1 -0
  136. package/src/sap/ui/core/cldr/es.json +1 -0
  137. package/src/sap/ui/core/cldr/es_AR.json +1 -0
  138. package/src/sap/ui/core/cldr/es_BO.json +1 -0
  139. package/src/sap/ui/core/cldr/es_CL.json +1 -0
  140. package/src/sap/ui/core/cldr/es_CO.json +1 -0
  141. package/src/sap/ui/core/cldr/es_MX.json +1 -0
  142. package/src/sap/ui/core/cldr/es_PE.json +1 -0
  143. package/src/sap/ui/core/cldr/es_UY.json +1 -0
  144. package/src/sap/ui/core/cldr/es_VE.json +1 -0
  145. package/src/sap/ui/core/cldr/et.json +1 -0
  146. package/src/sap/ui/core/cldr/fa.json +2 -0
  147. package/src/sap/ui/core/cldr/fi.json +1 -0
  148. package/src/sap/ui/core/cldr/fr.json +1 -0
  149. package/src/sap/ui/core/cldr/fr_BE.json +1 -0
  150. package/src/sap/ui/core/cldr/fr_CA.json +1 -0
  151. package/src/sap/ui/core/cldr/fr_CH.json +1 -0
  152. package/src/sap/ui/core/cldr/fr_LU.json +1 -0
  153. package/src/sap/ui/core/cldr/he.json +2 -0
  154. package/src/sap/ui/core/cldr/hi.json +1 -0
  155. package/src/sap/ui/core/cldr/hr.json +1 -0
  156. package/src/sap/ui/core/cldr/hu.json +1 -0
  157. package/src/sap/ui/core/cldr/id.json +1 -0
  158. package/src/sap/ui/core/cldr/it.json +1 -0
  159. package/src/sap/ui/core/cldr/it_CH.json +1 -0
  160. package/src/sap/ui/core/cldr/ja.json +1 -0
  161. package/src/sap/ui/core/cldr/kk.json +1 -0
  162. package/src/sap/ui/core/cldr/ko.json +1 -0
  163. package/src/sap/ui/core/cldr/lt.json +1 -0
  164. package/src/sap/ui/core/cldr/lv.json +1 -0
  165. package/src/sap/ui/core/cldr/mk.json +6045 -0
  166. package/src/sap/ui/core/cldr/ms.json +1 -0
  167. package/src/sap/ui/core/cldr/nb.json +2 -0
  168. package/src/sap/ui/core/cldr/nl.json +1 -0
  169. package/src/sap/ui/core/cldr/nl_BE.json +1 -0
  170. package/src/sap/ui/core/cldr/pl.json +1 -0
  171. package/src/sap/ui/core/cldr/pt.json +1 -0
  172. package/src/sap/ui/core/cldr/pt_PT.json +1 -0
  173. package/src/sap/ui/core/cldr/ro.json +1 -0
  174. package/src/sap/ui/core/cldr/ru.json +1 -0
  175. package/src/sap/ui/core/cldr/ru_UA.json +1 -0
  176. package/src/sap/ui/core/cldr/sk.json +1 -0
  177. package/src/sap/ui/core/cldr/sl.json +1 -0
  178. package/src/sap/ui/core/cldr/sr.json +1 -0
  179. package/src/sap/ui/core/cldr/sr_Latn.json +1 -0
  180. package/src/sap/ui/core/cldr/sv.json +1 -0
  181. package/src/sap/ui/core/cldr/th.json +1 -0
  182. package/src/sap/ui/core/cldr/tr.json +1 -0
  183. package/src/sap/ui/core/cldr/uk.json +1 -0
  184. package/src/sap/ui/core/cldr/vi.json +1 -0
  185. package/src/sap/ui/core/cldr/zh_CN.json +1 -0
  186. package/src/sap/ui/core/cldr/zh_HK.json +2 -0
  187. package/src/sap/ui/core/cldr/zh_SG.json +2 -0
  188. package/src/sap/ui/core/cldr/zh_TW.json +21 -20
  189. package/src/sap/ui/core/date/UI5Date.js +1 -1
  190. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  191. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  192. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  193. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  194. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  195. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  196. package/src/sap/ui/core/format/FileSizeFormat.js +1 -1
  197. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  198. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  199. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  200. package/src/sap/ui/core/library.js +3 -3
  201. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  202. package/src/sap/ui/core/message/Message.js +1 -1
  203. package/src/sap/ui/core/message/MessageManager.js +1 -1
  204. package/src/sap/ui/core/message/MessageParser.js +1 -1
  205. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  206. package/src/sap/ui/core/messagebundle_it.properties +2 -2
  207. package/src/sap/ui/core/messagebundle_ja.properties +2 -2
  208. package/src/sap/ui/core/messagebundle_mk.properties +2 -2
  209. package/src/sap/ui/core/messagebundle_sh.properties +67 -67
  210. package/src/sap/ui/core/messagebundle_sk.properties +1 -1
  211. package/src/sap/ui/core/messagebundle_sr.properties +352 -0
  212. package/src/sap/ui/core/messagebundle_uk.properties +2 -2
  213. package/src/sap/ui/core/messagebundle_vi.properties +2 -2
  214. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  215. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  216. package/src/sap/ui/core/mvc/JSView.js +1 -1
  217. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  218. package/src/sap/ui/core/mvc/View.js +1 -1
  219. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  220. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  221. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  222. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  223. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  224. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  225. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  226. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  227. package/src/sap/ui/core/service/Service.js +1 -1
  228. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  229. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  230. package/src/sap/ui/core/support/Plugin.js +1 -1
  231. package/src/sap/ui/core/support/Support.js +1 -1
  232. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  233. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  234. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  235. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  236. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  237. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  238. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  239. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  240. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  241. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  242. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  243. package/src/sap/ui/core/tmpl/Template.js +1 -1
  244. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  245. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  246. package/src/sap/ui/core/util/Export.js +1 -1
  247. package/src/sap/ui/core/util/ExportCell.js +1 -1
  248. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  249. package/src/sap/ui/core/util/ExportRow.js +1 -1
  250. package/src/sap/ui/core/util/ExportType.js +1 -1
  251. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  252. package/src/sap/ui/core/util/File.js +1 -1
  253. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  254. package/src/sap/ui/core/util/MockServer.js +1 -1
  255. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  256. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  257. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  258. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  259. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  260. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  261. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  262. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  263. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  264. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  265. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  266. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  267. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  268. package/src/sap/ui/debug/ControlTree.js +1 -1
  269. package/src/sap/ui/debug/DebugEnv.js +1 -1
  270. package/src/sap/ui/debug/PropertyList.js +1 -1
  271. package/src/sap/ui/model/ClientModel.js +1 -1
  272. package/src/sap/ui/model/CompositeDataState.js +1 -1
  273. package/src/sap/ui/model/CompositeType.js +1 -1
  274. package/src/sap/ui/model/DataState.js +1 -1
  275. package/src/sap/ui/model/MetaModel.js +1 -1
  276. package/src/sap/ui/model/Model.js +1 -1
  277. package/src/sap/ui/model/SelectionModel.js +1 -1
  278. package/src/sap/ui/model/SimpleType.js +1 -1
  279. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  280. package/src/sap/ui/model/Type.js +1 -1
  281. package/src/sap/ui/model/analytics/AnalyticalBinding.js +61 -20
  282. package/src/sap/ui/model/json/JSONModel.js +1 -1
  283. package/src/sap/ui/model/message/MessageModel.js +1 -1
  284. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  285. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  286. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  287. package/src/sap/ui/model/odata/ODataMetadata.js +28 -14
  288. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  289. package/src/sap/ui/model/odata/ODataUtils.js +12 -11
  290. package/src/sap/ui/model/odata/_ODataMetaModelUtils.js +1 -1
  291. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  292. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  293. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  294. package/src/sap/ui/model/odata/type/Date.js +1 -1
  295. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  296. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  297. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  298. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  299. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  300. package/src/sap/ui/model/odata/type/Double.js +1 -1
  301. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  302. package/src/sap/ui/model/odata/type/Int.js +1 -1
  303. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  304. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  305. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  306. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  307. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  308. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  309. package/src/sap/ui/model/odata/type/Single.js +1 -1
  310. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  311. package/src/sap/ui/model/odata/type/String.js +1 -1
  312. package/src/sap/ui/model/odata/type/Time.js +1 -1
  313. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  314. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  315. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  316. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  317. package/src/sap/ui/model/odata/v2/ODataModel.js +1 -1
  318. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  319. package/src/sap/ui/model/odata/v4/Context.js +4 -2
  320. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +1 -1
  321. package/src/sap/ui/model/odata/v4/ODataListBinding.js +1 -1
  322. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +31 -10
  323. package/src/sap/ui/model/odata/v4/ODataModel.js +1 -1
  324. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +1 -1
  325. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +15 -3
  326. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +8 -0
  327. package/src/sap/ui/model/odata/v4/lib/_Cache.js +19 -0
  328. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  329. package/src/sap/ui/model/type/Boolean.js +1 -1
  330. package/src/sap/ui/model/type/Currency.js +1 -1
  331. package/src/sap/ui/model/type/Date.js +1 -1
  332. package/src/sap/ui/model/type/DateInterval.js +1 -1
  333. package/src/sap/ui/model/type/DateTime.js +1 -1
  334. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  335. package/src/sap/ui/model/type/FileSize.js +1 -1
  336. package/src/sap/ui/model/type/Float.js +1 -1
  337. package/src/sap/ui/model/type/Integer.js +1 -1
  338. package/src/sap/ui/model/type/String.js +1 -1
  339. package/src/sap/ui/model/type/Time.js +1 -1
  340. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  341. package/src/sap/ui/model/type/Unit.js +1 -1
  342. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  343. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  344. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  345. package/src/sap/ui/test/generic/TestBase.js +1 -1
  346. package/src/sap/ui/util/Storage.js +1 -1
  347. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/ui5.yaml +1 -1
  348. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  349. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  350. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  351. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  352. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  353. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  354. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  355. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  356. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  357. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  358. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  359. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  360. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  361. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  362. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  363. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  364. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  365. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  366. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  367. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  368. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  369. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  370. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  371. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  372. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  373. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  374. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  375. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  376. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  377. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  378. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  379. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  380. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  381. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  382. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  383. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  384. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  385. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  386. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  387. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  388. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  389. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  390. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  391. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  392. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  393. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  394. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  395. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  396. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  397. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  398. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  399. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  400. package/test/sap/ui/core/qunit/analytics/AnalyticalBinding.qunit.js +217 -6
  401. package/test/sap/ui/core/qunit/analytics/o4aMetadata.js +2 -0
  402. package/test/sap/ui/core/qunit/analytics/odata4analytics.qunit.js +1 -1
  403. package/test/sap/ui/core/qunit/base/i18n/Localization.qunit.js +34 -1
  404. package/test/sap/ui/core/qunit/base/i18n/ResourceBundle.qunit.js +51 -4
  405. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +42 -116
  406. package/test/sap/ui/core/qunit/model/FAR_CUSTOMER_LINE_ITEMS.metadata.xml +2 -0
  407. package/test/sap/ui/core/qunit/odata/ODataMetadataNoFakeService.qunit.js +154 -0
  408. package/test/sap/ui/core/qunit/odata/ODataUtils.qunit.js +10 -2
  409. package/test/sap/ui/core/qunit/odata/_ODataMetaModelUtils.qunit.js +4 -4
  410. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +265 -0
  411. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +26 -2
  412. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +50 -15
  413. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +237 -12
  414. package/test/sap/ui/core/qunit/odata/v4/data/metadata_special_cases.xml +27 -0
  415. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +41 -7
  416. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +25 -0
  417. package/test/sap/ui/core/qunit/types/FileSizeFormat.qunit.js +19 -1
  418. package/test/sap/ui/core/relnotes/changes-1.120.json +31 -0
@@ -8671,6 +8671,168 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
8671
8671
  });
8672
8672
  });
8673
8673
 
8674
+ //*********************************************************************************************
8675
+ // Scenario: Grouping by a property of type "Edm.Time" is possible with the AnalyticalBinding.
8676
+ // The AnalyticalBinding has to ensure that the generated IDs e.g. multi-unit ID, group ID are
8677
+ // different for different "Edm.Time" values. "Edm.Time" objects are the only ones that do not
8678
+ // provide a useful toString representation.
8679
+ // SNOW: CS20230006325114
8680
+ [{
8681
+ sTitle: "no multi-unit case ([a, b, c,| d, e,| f, g, h, i, j])",
8682
+ aLengths: [551, 551, 551],
8683
+ aKeyIndexForRoot: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
8684
+ aMultiUnitIndices: [],
8685
+ aMultiUnitKeysForRoot: undefined,
8686
+ aSkip: [5, 3],
8687
+ aTop: [5, 2],
8688
+ aVisibleRow: [7, 2],
8689
+ bWithWarning: false
8690
+ }, {
8691
+ sTitle: "multi-unit at the end of the gap ([a, a, b,| c, d, d, e, f,| f, g, h, ...]); case c) II",
8692
+ aKeyIndexForRoot: ["ZERO", 2, 3, -4, 6, -7, 9, 10, 11, 12, 13, 14, 15],
8693
+ aLengths: [550, 550, 548],
8694
+ aMultiUnitIndices: [[0, 1], [4,5], [7, 8]],
8695
+ aMultiUnitKeysForRoot: [
8696
+ ",,,0,*,,,-multiple-units-not-dereferencable",
8697
+ undefined,
8698
+ undefined,
8699
+ ",,,4,*,,,-multiple-units-not-dereferencable",
8700
+ undefined,
8701
+ ",,,7,*,,,-multiple-units-not-dereferencable"
8702
+ ],
8703
+ aSkip: [8, 3],
8704
+ aTop: [8, 5],
8705
+ aVisibleRow: [9, 2],
8706
+ bWithWarning: true
8707
+ }, {
8708
+ sTitle: "multi-unit in block one and at the beginning and the end of last block"
8709
+ + " ([a, a, b,| b, c, d, e, e,| e, g, h, ...])",
8710
+ aKeyIndexForRoot: ["ZERO", -2, 4, 5, -6, 9, 10, 11, 12, 13, 14, 15],
8711
+ aLengths: [550, 550, 547],
8712
+ aMultiUnitIndices: [[0, 1], [2, 3], [6, 8]],
8713
+ aMultiUnitKeysForRoot: [
8714
+ ",,,0,*,,,-multiple-units-not-dereferencable",
8715
+ ",,,2,*,,,-multiple-units-not-dereferencable",
8716
+ undefined,
8717
+ undefined,
8718
+ ",,,6,*,,,-multiple-units-not-dereferencable"
8719
+ ],
8720
+ aSkip: [8, 3],
8721
+ aTop: [8, 5],
8722
+ aVisibleRow: [9, 2],
8723
+ bWithWarning: true
8724
+ }].forEach(function (oFixture) {
8725
+ QUnit.test("AnalyticalBinding: grouping by property of type Edm.Time, " + oFixture.sTitle, function (assert) {
8726
+ var oBinding, oTable,
8727
+ oModel = createModel("/sap/opu/odata/sap/FAR_CUSTOMER_LINE_ITEMS", {
8728
+ tokenHandling : false
8729
+ }),
8730
+ sView = '\
8731
+ <t:AnalyticalTable id="table" rows="{path : \'/Items\', parameters : {useBatchRequests : true}}"\
8732
+ threshold="2" visibleRowCount="2">\
8733
+ <t:AnalyticalColumn grouped="true" leadingProperty="CreationTime">\
8734
+ <Label text="CreationTime"/>\
8735
+ <t:template><Text wrapping="false" text="{CreationTime}"/></t:template>\
8736
+ </t:AnalyticalColumn>\
8737
+ <t:AnalyticalColumn summed="true" leadingProperty="AmountInCompanyCodeCurrency">\
8738
+ <Label text="AmountInCompanyCodeCurrency"/>\
8739
+ <t:template><Text wrapping="false" text="{AmountInCompanyCodeCurrency}"/></t:template>\
8740
+ </t:AnalyticalColumn>\
8741
+ </t:AnalyticalTable>',
8742
+ that = this;
8743
+
8744
+ var aItems = [];
8745
+ for (var i = 0; i < 50; i += 1) {
8746
+ aItems.push({
8747
+ __metadata : {uri : "/sap/opu/odata/sap/FAR_CUSTOMER_LINE_ITEMS/Items(" + i + ")"},
8748
+ CreationTime : {ms: i, __edmType: 'Edm.Time'},
8749
+ AmountInCompanyCodeCurrency : String(i),
8750
+ Currency : "USD"
8751
+ });
8752
+ }
8753
+ // create multi-unit situations by reusing the dimension value of the grouped column (CreationTime) of the first
8754
+ // item of the range for all others in the range; a multi-unit situation requires also a different dimension
8755
+ // value of the measure's dimension, so use different the Currency values.
8756
+ oFixture.aMultiUnitIndices.forEach(function (aMultiUnitRange) {
8757
+ var iFrom = aMultiUnitRange[0],
8758
+ iTo = aMultiUnitRange[1];
8759
+
8760
+ for (var i = iFrom + 1; i <= iTo; i += 1) {
8761
+ aItems[i].CreationTime = aItems[iFrom].CreationTime;
8762
+ aItems[i].Currency = aItems[iFrom].Currency + i;
8763
+ }
8764
+ });
8765
+
8766
+ this.oLogMock.expects("warning")
8767
+ .withExactArgs("Detected a multi-unit case, so sorting is only possible on leaves", "/Items",
8768
+ "sap.ui.model.analytics.AnalyticalBinding", undefined)
8769
+ .exactly(oFixture.bWithWarning ? 1 : 0);
8770
+
8771
+ this.expectRequest({
8772
+ encodeRequestUri : false,
8773
+ requestUri : "Items" // Grand Total Request
8774
+ + "?$select=AmountInCompanyCodeCurrency,Currency&$top=100"
8775
+ + "&$inlinecount=allpages"
8776
+ }, {
8777
+ __count : "1",
8778
+ results : [{
8779
+ __metadata : {uri : "/sap/opu/odata/sap/FAR_CUSTOMER_LINE_ITEMS/Items('grandTotal')"},
8780
+ AmountInCompanyCodeCurrency : "42.00",
8781
+ Currency : "USD"
8782
+ }]
8783
+ })
8784
+ .expectRequest({
8785
+ encodeRequestUri : false,
8786
+ requestUri : "Items" // Data and Count Request
8787
+ + "?$select=CreationTime,AmountInCompanyCodeCurrency,Currency"
8788
+ + "&$orderby=CreationTime%20asc&$top=3&$inlinecount=allpages"
8789
+ }, {
8790
+ __count : "550",
8791
+ results : aItems.slice(0, 3)
8792
+ });
8793
+
8794
+ function readBlock(i) {
8795
+ assert.strictEqual(oBinding.getLength(), oFixture.aLengths[i]);
8796
+
8797
+ var iSkip = oFixture.aSkip[i];
8798
+ var iTop = oFixture.aTop[i];
8799
+ that.expectRequest({
8800
+ encodeRequestUri : false,
8801
+ requestUri : "Items"
8802
+ + "?$select=CreationTime,AmountInCompanyCodeCurrency,"
8803
+ + "Currency&$orderby=CreationTime%20asc&$skip=" + iSkip + "&$top=" + iTop
8804
+ }, {
8805
+ results : aItems.slice(iSkip, iSkip + iTop)
8806
+ });
8807
+
8808
+ // code under test
8809
+ oTable.setFirstVisibleRow(oFixture.aVisibleRow[i]);
8810
+
8811
+ return that.waitForChanges(assert);
8812
+ }
8813
+
8814
+ return this.createView(assert, sView, oModel).then(function () {
8815
+ oTable = that.oView.byId("table");
8816
+ oBinding = oTable.getBinding("rows");
8817
+
8818
+ return readBlock(0);
8819
+ }).then(function () {
8820
+ return readBlock(1);
8821
+ }).then(function () {
8822
+ assert.strictEqual(oBinding.getLength(), oFixture.aLengths[2]);
8823
+ var aMultiUnitKeysForRoot = oBinding.mMultiUnitKey["/"];
8824
+ // strip trailing |<number> to before comparing; number is a global counter of multi-unit situations
8825
+ if (aMultiUnitKeysForRoot) {
8826
+ aMultiUnitKeysForRoot = aMultiUnitKeysForRoot.map(function (sKey) {
8827
+ return sKey.split("|")[0];
8828
+ });
8829
+ }
8830
+ assert.deepEqual(aMultiUnitKeysForRoot, oFixture.aMultiUnitKeysForRoot);
8831
+ assert.deepEqual(oBinding.mKeyIndex["/"], oFixture.aKeyIndexForRoot);
8832
+ });
8833
+ });
8834
+ });
8835
+
8674
8836
  //*********************************************************************************************
8675
8837
  // Scenario: A user scrolls in an AnalyticalTable. Further data needs to be requested. The first
8676
8838
  // entry of a response for a level request belongs to a different node than the watermark node.
@@ -21716,4 +21878,107 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
21716
21878
  return this.waitForChanges(assert);
21717
21879
  });
21718
21880
  });
21881
+
21882
+ //*********************************************************************************************
21883
+ // Scenario: A table is filtered via a property of a complex type which is addressed via a navigation
21884
+ // property. The binding is using the operation mode "Client".
21885
+ // SNOW: CS20230006626867
21886
+ QUnit.test("Filter via a complex type property addressed via navigation property (client)", function (assert) {
21887
+ var oModel = createSalesOrdersModel({defaultOperationMode : "Client"}),
21888
+ sView = '\
21889
+ <t:Table id="Table" rows="{\
21890
+ path: \'/SalesOrderSet\',\
21891
+ parameters: {\
21892
+ expand: \'ToBusinessPartner\',\
21893
+ select: \'SalesOrderID,ToBusinessPartner/BusinessPartnerID,ToBusinessPartner/Address\'\
21894
+ }\
21895
+ }" visibleRowCount="2">\
21896
+ <Text id="SalesOrderID" text="{SalesOrderID}" />\
21897
+ <Text id="City" text="{ToBusinessPartner/Address/City}" />\
21898
+ </t:Table>',
21899
+ that = this;
21900
+
21901
+ this.expectHeadRequest()
21902
+ .expectRequest("SalesOrderSet?$expand=ToBusinessPartner"
21903
+ + "&$select=SalesOrderID,ToBusinessPartner/BusinessPartnerID,ToBusinessPartner/Address", {
21904
+ results: [{
21905
+ __metadata: {uri: "/SalesOrderSet('1')"},
21906
+ SalesOrderID: "1",
21907
+ ToBusinessPartner: {
21908
+ __metadata: {uri: "/BusinessPartnerSet('42')"},
21909
+ BusinessPartnerID: "42",
21910
+ Address: {City: "Foo"}
21911
+ }
21912
+ }, {
21913
+ __metadata: {uri: "/SalesOrderSet('2')"},
21914
+ SalesOrderID: "2",
21915
+ ToBusinessPartner: {
21916
+ __metadata: {uri: "/BusinessPartnerSet('43')"},
21917
+ BusinessPartnerID: "43",
21918
+ Address: {City: "Bar"}
21919
+ }
21920
+ }]
21921
+ })
21922
+ .expectValue("SalesOrderID", ["1", "2"])
21923
+ .expectValue("City", ["Foo", "Bar"]);
21924
+
21925
+ return this.createView(assert, sView, oModel).then(function () {
21926
+ that.expectValue("SalesOrderID", "", 1)
21927
+ .expectValue("City", "", 1);
21928
+
21929
+ // code under test
21930
+ that.oView.byId("Table").getBinding("rows").filter(
21931
+ new Filter({
21932
+ path: "ToBusinessPartner/Address/City",
21933
+ operator: FilterOperator.EQ,
21934
+ value1: "Foo"
21935
+ })
21936
+ );
21937
+
21938
+ return that.waitForChanges(assert);
21939
+ });
21940
+ });
21941
+
21942
+ //*********************************************************************************************
21943
+ // Scenario: A table is filtered via a property of a complex type which is addressed via a navigation
21944
+ // property. The binding is using the operation mode "Server".
21945
+ // SNOW: CS20230006626867
21946
+ QUnit.test("Filter via a complex type property addressed via navigation property (server)", function (assert) {
21947
+ var oModel = createSalesOrdersModel(),
21948
+ sView = '\
21949
+ <t:Table id="Table" rows="{\
21950
+ path: \'/SalesOrderSet\',\
21951
+ parameters: {\
21952
+ expand: \'ToBusinessPartner\',\
21953
+ select: \'SalesOrderID,ToBusinessPartner/BusinessPartnerID,ToBusinessPartner/Address\'\
21954
+ },\
21955
+ filters : [{path: \'ToBusinessPartner/Address/City\', operator: \'EQ\', value1: \'Foo\'}]\
21956
+ }" visibleRowCount="2">\
21957
+ <Text id="SalesOrderID" text="{SalesOrderID}" />\
21958
+ <Text id="City" text="{ToBusinessPartner/Address/City}" />\
21959
+ </t:Table>';
21960
+
21961
+ this.expectHeadRequest()
21962
+ .expectRequest({
21963
+ encodeRequestUri: false, // the / in the filter is not escaped
21964
+ requestUri: "SalesOrderSet?$skip=0&$top=102"
21965
+ + "&$filter=ToBusinessPartner/Address/City%20eq%20%27Foo%27"
21966
+ + "&$expand=ToBusinessPartner"
21967
+ + "&$select=SalesOrderID%2cToBusinessPartner%2fBusinessPartnerID%2cToBusinessPartner%2fAddress"
21968
+ }, {
21969
+ results: [{
21970
+ __metadata: {uri: "/SalesOrderSet('1')"},
21971
+ SalesOrderID: "1",
21972
+ ToBusinessPartner: {
21973
+ __metadata: {uri: "/BusinessPartnerSet('42')"},
21974
+ BusinessPartnerID: "42",
21975
+ Address: {City: "Foo"}
21976
+ }
21977
+ }]
21978
+ })
21979
+ .expectValue("SalesOrderID", ["1", ""])
21980
+ .expectValue("City", ["Foo", ""]);
21981
+
21982
+ return this.createView(assert, sView, oModel);
21983
+ });
21719
21984
  });
@@ -4463,7 +4463,12 @@ sap.ui.define([
4463
4463
  });
4464
4464
 
4465
4465
  //*********************************************************************************************
4466
- QUnit.test("isEffectivelyKeptAlive: $$ownRequest", function (assert) {
4466
+ [
4467
+ "/TEAMS('1')/TEAM_2_EMPLOYEES('2')",
4468
+ "/TEAMS/0/TEAM_2_EMPLOYEES('2')"
4469
+ ].forEach(function (sContextPath) {
4470
+ const sTitle = "isEffectivelyKeptAlive: $$ownRequest, context path: " + sContextPath;
4471
+ QUnit.test(sTitle, function (assert) {
4467
4472
  var oBinding = {
4468
4473
  checkKeepAlive : function () {},
4469
4474
  getHeaderContext : function () {},
@@ -4471,7 +4476,7 @@ sap.ui.define([
4471
4476
  isRelative : function () { return true; },
4472
4477
  mParameters : {$$ownRequest : true}
4473
4478
  },
4474
- oContext = Context.create({/*oModel*/}, oBinding, "/TEAMS('1')/TEAM_2_EMPLOYEES('2')");
4479
+ oContext = Context.create({/*oModel*/}, oBinding, sContextPath);
4475
4480
 
4476
4481
  oContext.setSelected(true);
4477
4482
  this.mock(_Helper).expects("isDataAggregation")
@@ -4480,6 +4485,7 @@ sap.ui.define([
4480
4485
  // code under test
4481
4486
  assert.strictEqual(oContext.isEffectivelyKeptAlive(), true);
4482
4487
  });
4488
+ });
4483
4489
 
4484
4490
  //*********************************************************************************************
4485
4491
  QUnit.test("isEffectivelyKeptAlive: data aggregation", function (assert) {
@@ -4499,6 +4505,24 @@ sap.ui.define([
4499
4505
  assert.strictEqual(oContext.isEffectivelyKeptAlive(), false);
4500
4506
  });
4501
4507
 
4508
+ //*********************************************************************************************
4509
+ QUnit.test("isEffectivelyKeptAlive: no key predicate", function (assert) {
4510
+ const oBinding = {
4511
+ getHeaderContext : function () {},
4512
+ onKeepAliveChanged : function () {},
4513
+ isRelative : function () { return false; },
4514
+ mParameters : {}
4515
+ };
4516
+ const oContext = Context.create({/*oModel*/}, oBinding, "/SalesOrderList('0')/Messages/0");
4517
+
4518
+ oContext.setSelected(true);
4519
+ this.mock(_Helper).expects("isDataAggregation")
4520
+ .withExactArgs(sinon.match.same(oBinding.mParameters)).returns(false);
4521
+
4522
+ // code under test
4523
+ assert.strictEqual(oContext.isEffectivelyKeptAlive(), false);
4524
+ });
4525
+
4502
4526
  //*********************************************************************************************
4503
4527
  QUnit.test("refreshDependentBindings", function (assert) {
4504
4528
  var oModel = {
@@ -1113,6 +1113,8 @@ sap.ui.define([
1113
1113
  }
1114
1114
  }
1115
1115
 
1116
+ function mustBeMocked() { throw new Error("Must be mocked"); }
1117
+
1116
1118
  //*********************************************************************************************
1117
1119
  QUnit.module("sap.ui.model.odata.v4.ODataMetaModel", {
1118
1120
  // remember copy to ensure test isolation
@@ -7298,28 +7300,52 @@ forEach({
7298
7300
  });
7299
7301
 
7300
7302
  //*********************************************************************************************
7301
- QUnit.test("requestValue4Annotation: no edm:Path", function (assert) {
7303
+ // 0: no addt'l Nav.Prop. // 1: no $Partner // 2: addt'l Nav.Prop. w/ $Partner
7304
+ [0, 1, 2].forEach((i) => {
7305
+ let oOverload;
7306
+
7307
+ function setup(oTestContext, oContext) {
7308
+ oTestContext.mock(oContext).expects("getPath").withExactArgs().returns("~path~");
7309
+ oTestContext.mock(_Helper).expects("getMetaPath").withExactArgs("~path~")
7310
+ .returns(i > 0 ? "/meta" : "/meta/path");
7311
+ oTestContext.oMetaModelMock.expects("getObject").exactly(i > 0 ? 1 : 0)
7312
+ .withExactArgs("/meta/path/$Partner").returns(i > 1 ? "~Partner~" : undefined);
7313
+ if (i > 1) {
7314
+ oOverload = {
7315
+ $IsBound : true,
7316
+ $Parameter : [{$Name : "~Partner~"}]
7317
+ };
7318
+ }
7319
+ }
7320
+
7321
+ //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
7322
+ QUnit.test("requestValue4Annotation: no edm:Path #" + i, function (assert) {
7302
7323
  var oContext = {
7303
- getModel : function () { return null; }
7324
+ getModel : function () { return null; },
7325
+ getPath : mustBeMocked
7304
7326
  },
7305
7327
  oMetaContext = {},
7306
7328
  vRawValue = {};
7307
7329
 
7308
- this.oMetaModelMock.expects("createBindingContext").withExactArgs("/meta/path")
7330
+ setup(this, oContext);
7331
+ this.oMetaModelMock.expects("createBindingContext").withExactArgs("/meta/path/value")
7309
7332
  .returns(oMetaContext);
7310
7333
  this.mock(AnnotationHelper).expects("value")
7311
- .withExactArgs(sinon.match.same(vRawValue), {context : sinon.match.same(oMetaContext)})
7334
+ .withExactArgs(sinon.match.same(vRawValue), {
7335
+ context : sinon.match.same(oMetaContext),
7336
+ overload : oOverload
7337
+ })
7312
7338
  .returns("foo");
7313
7339
 
7314
7340
  // code under test
7315
- return this.oMetaModel.requestValue4Annotation(vRawValue, "/meta/path", oContext)
7341
+ return this.oMetaModel.requestValue4Annotation(vRawValue, "/meta/path/value", oContext)
7316
7342
  .then(function (sValue) {
7317
7343
  assert.strictEqual(sValue, "foo");
7318
7344
  });
7319
7345
  });
7320
7346
 
7321
- //*********************************************************************************************
7322
- QUnit.test("requestValue4Annotation: composite binding", function (assert) {
7347
+ //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
7348
+ QUnit.test("requestValue4Annotation: composite binding #" + i, function (assert) {
7323
7349
  var oModel = new Model(),
7324
7350
  oContext = Context.create(oModel, null, "/Entity(1)"),
7325
7351
  oBarBinding = new PropertyBinding(oModel, "bar", oContext),
@@ -7334,10 +7360,14 @@ forEach({
7334
7360
  oFooBinding.requestValue = function () {};
7335
7361
  oModel.bindProperty = function () {};
7336
7362
 
7337
- this.oMetaModelMock.expects("createBindingContext").withExactArgs("/meta/path")
7363
+ setup(this, oContext);
7364
+ this.oMetaModelMock.expects("createBindingContext").withExactArgs("/meta/path/value")
7338
7365
  .returns(oMetaContext);
7339
7366
  this.mock(AnnotationHelper).expects("value")
7340
- .withExactArgs(sinon.match.same(vRawValue), {context : sinon.match.same(oMetaContext)})
7367
+ .withExactArgs(sinon.match.same(vRawValue), {
7368
+ context : sinon.match.same(oMetaContext),
7369
+ overload : oOverload
7370
+ })
7341
7371
  .returns("{foo} {bar}"); // sync behavior only with a sap.ui.model.CompositeBinding
7342
7372
  oModelMock.expects("bindProperty")
7343
7373
  .withExactArgs("foo", sinon.match.same(oContext), undefined)
@@ -7352,14 +7382,14 @@ forEach({
7352
7382
  this.mock(oBarBinding).expects("requestValue").withExactArgs().resolves();
7353
7383
 
7354
7384
  // code under test
7355
- return this.oMetaModel.requestValue4Annotation(vRawValue, "/meta/path", oContext)
7385
+ return this.oMetaModel.requestValue4Annotation(vRawValue, "/meta/path/value", oContext)
7356
7386
  .then(function (sValue) {
7357
7387
  assert.strictEqual(sValue, "foo-value bar-value");
7358
7388
  });
7359
7389
  });
7360
7390
 
7361
- //*********************************************************************************************
7362
- QUnit.test("requestValue4Annotation: async", function (assert) {
7391
+ //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
7392
+ QUnit.test("requestValue4Annotation: async #" + i, function (assert) {
7363
7393
  var oModel = new Model(),
7364
7394
  oContext = Context.create(oModel, null, "/Entity(1)"),
7365
7395
  oFooBinding = new PropertyBinding(oModel, "foo", oContext),
@@ -7372,10 +7402,14 @@ forEach({
7372
7402
  oFooBinding.requestValue = function () {};
7373
7403
  oModel.bindProperty = function () {};
7374
7404
 
7375
- this.oMetaModelMock.expects("createBindingContext").withExactArgs("/meta/path")
7405
+ setup(this, oContext);
7406
+ this.oMetaModelMock.expects("createBindingContext").withExactArgs("/meta/path/value")
7376
7407
  .returns(oMetaContext);
7377
7408
  this.mock(AnnotationHelper).expects("value")
7378
- .withExactArgs(sinon.match.same(vRawValue), {context : sinon.match.same(oMetaContext)})
7409
+ .withExactArgs(sinon.match.same(vRawValue), {
7410
+ context : sinon.match.same(oMetaContext),
7411
+ overload : oOverload
7412
+ })
7379
7413
  .returns("{foo}");
7380
7414
  oModelMock.expects("bindProperty")
7381
7415
  .withExactArgs("foo", sinon.match.same(oContext), undefined)
@@ -7388,11 +7422,12 @@ forEach({
7388
7422
  });
7389
7423
 
7390
7424
  // code under test
7391
- return this.oMetaModel.requestValue4Annotation(vRawValue, "/meta/path", oContext)
7425
+ return this.oMetaModel.requestValue4Annotation(vRawValue, "/meta/path/value", oContext)
7392
7426
  .then(function (sValue) {
7393
7427
  assert.strictEqual(sValue, "foo-value");
7394
7428
  });
7395
7429
  });
7430
+ }); // end of forEach
7396
7431
 
7397
7432
  //*********************************************************************************************
7398
7433
  QUnit.test("filterValueListRelevantQualifiers", function (assert) {