@openui5/sap.ui.core 1.126.1 → 1.127.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (647) hide show
  1. package/THIRDPARTY.txt +1 -1
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +1 -1
  4. package/src/jquery.sap.properties.js +1 -1
  5. package/src/jquery.sap.resources.js +1 -1
  6. package/src/jquery.sap.script.js +1 -1
  7. package/src/jquery.sap.storage.js +3 -3
  8. package/src/sap/base/Event.js +1 -1
  9. package/src/sap/base/Eventing.js +1 -1
  10. package/src/sap/base/config.js +1 -1
  11. package/src/sap/base/i18n/LanguageTag.js +1 -1
  12. package/src/sap/base/i18n/date/TimezoneUtils.js +1 -1
  13. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  14. package/src/sap/base/util/restricted/_castArray.js +1 -1
  15. package/src/sap/base/util/restricted/_compact.js +1 -1
  16. package/src/sap/base/util/restricted/_curry.js +1 -1
  17. package/src/sap/base/util/restricted/_debounce.js +1 -1
  18. package/src/sap/base/util/restricted/_difference.js +1 -1
  19. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  20. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  21. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  22. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  23. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  24. package/src/sap/base/util/restricted/_flatten.js +1 -1
  25. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  26. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  27. package/src/sap/base/util/restricted/_intersection.js +1 -1
  28. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  29. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  30. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  31. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  32. package/src/sap/base/util/restricted/_isNil.js +1 -1
  33. package/src/sap/base/util/restricted/_max.js +1 -1
  34. package/src/sap/base/util/restricted/_merge.js +1 -1
  35. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  36. package/src/sap/base/util/restricted/_min.js +1 -1
  37. package/src/sap/base/util/restricted/_omit.js +1 -1
  38. package/src/sap/base/util/restricted/_pick.js +1 -1
  39. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  40. package/src/sap/base/util/restricted/_throttle.js +1 -1
  41. package/src/sap/base/util/restricted/_toArray.js +1 -1
  42. package/src/sap/base/util/restricted/_union.js +1 -1
  43. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  44. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  45. package/src/sap/base/util/restricted/_uniq.js +1 -1
  46. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  47. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  48. package/src/sap/base/util/restricted/_without.js +1 -1
  49. package/src/sap/base/util/restricted/_xor.js +1 -1
  50. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  51. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  52. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  53. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  54. package/src/sap/ui/Device.js +3 -3
  55. package/src/sap/ui/Global.js +5 -15
  56. package/src/sap/ui/base/BindingInfo.js +45 -24
  57. package/src/sap/ui/base/DataType.js +19 -0
  58. package/src/sap/ui/base/Event.js +1 -1
  59. package/src/sap/ui/base/EventProvider.js +1 -1
  60. package/src/sap/ui/base/Interface.js +31 -1
  61. package/src/sap/ui/base/ManagedObject.js +3 -4
  62. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  63. package/src/sap/ui/base/Metadata.js +1 -1
  64. package/src/sap/ui/base/Object.js +1 -1
  65. package/src/sap/ui/base/ObjectPool.js +1 -1
  66. package/src/sap/ui/core/.library +1 -1
  67. package/src/sap/ui/core/.theming +8 -0
  68. package/src/sap/ui/core/BusyIndicator.js +1 -1
  69. package/src/sap/ui/core/Component.js +1 -1
  70. package/src/sap/ui/core/ComponentContainer.js +1 -1
  71. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  72. package/src/sap/ui/core/ComponentSupport.js +1 -1
  73. package/src/sap/ui/core/Configuration.js +1 -1
  74. package/src/sap/ui/core/Control.js +2 -2
  75. package/src/sap/ui/core/Core.js +57 -2
  76. package/src/sap/ui/core/CustomData.js +1 -1
  77. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  78. package/src/sap/ui/core/Element.js +166 -16
  79. package/src/sap/ui/core/ElementMetadata.js +1 -1
  80. package/src/sap/ui/core/EnabledPropagator.js +17 -31
  81. package/src/sap/ui/core/EventBus.js +1 -1
  82. package/src/sap/ui/core/Fragment.js +1 -1
  83. package/src/sap/ui/core/HTML.js +1 -1
  84. package/src/sap/ui/core/History.js +1 -1
  85. package/src/sap/ui/core/Icon.js +1 -1
  86. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  87. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  88. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  89. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  90. package/src/sap/ui/core/InvisibleText.js +1 -1
  91. package/src/sap/ui/core/Item.js +2 -2
  92. package/src/sap/ui/core/LabelEnablement.js +1 -1
  93. package/src/sap/ui/core/LayoutData.js +1 -1
  94. package/src/sap/ui/core/ListItem.js +1 -1
  95. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  96. package/src/sap/ui/core/Locale.js +1 -1
  97. package/src/sap/ui/core/LocaleData.js +118 -55
  98. package/src/sap/ui/core/Manifest.js +1 -1
  99. package/src/sap/ui/core/Message.js +1 -1
  100. package/src/sap/ui/core/Popup.js +8 -0
  101. package/src/sap/ui/core/RenderManager.js +1 -1
  102. package/src/sap/ui/core/Renderer.js +1 -1
  103. package/src/sap/ui/core/ResizeHandler.js +1 -1
  104. package/src/sap/ui/core/ScrollBar.js +1 -1
  105. package/src/sap/ui/core/SeparatorItem.js +1 -1
  106. package/src/sap/ui/core/Theming.js +4 -4
  107. package/src/sap/ui/core/Title.js +2 -2
  108. package/src/sap/ui/core/TooltipBase.js +2 -2
  109. package/src/sap/ui/core/UIArea.js +1 -1
  110. package/src/sap/ui/core/UIComponent.js +1 -1
  111. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  112. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  113. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  114. package/src/sap/ui/core/XMLComposite.js +1 -1
  115. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  116. package/src/sap/ui/core/cache/CacheManagerNOP.js +3 -0
  117. package/src/sap/ui/core/cache/LRUPersistentCache.js +13 -4
  118. package/src/sap/ui/core/date/UI5Date.js +1 -1
  119. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  120. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  121. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  122. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  123. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  124. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  125. package/src/sap/ui/core/fieldhelp/FieldHelp.js +53 -11
  126. package/src/sap/ui/core/fieldhelp/FieldHelpUtil.js +4 -0
  127. package/src/sap/ui/core/format/FormatUtils.js +1 -1
  128. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  129. package/src/sap/ui/core/getCompatibilityVersion.js +1 -1
  130. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  131. package/src/sap/ui/core/library.js +37 -21
  132. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  133. package/src/sap/ui/core/message/Message.js +1 -1
  134. package/src/sap/ui/core/message/MessageManager.js +1 -1
  135. package/src/sap/ui/core/message/MessageParser.js +1 -1
  136. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  137. package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +30 -18
  138. package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +294 -282
  139. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  140. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  141. package/src/sap/ui/core/mvc/JSView.js +1 -1
  142. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  143. package/src/sap/ui/core/mvc/View.js +1 -1
  144. package/src/sap/ui/core/mvc/XMLView.js +4 -4
  145. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  146. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  147. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  148. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  149. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  150. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  151. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  152. package/src/sap/ui/core/service/Service.js +1 -1
  153. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  154. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  155. package/src/sap/ui/core/support/Plugin.js +1 -1
  156. package/src/sap/ui/core/support/Support.js +1 -1
  157. package/src/sap/ui/core/support/ToolsAPI.js +5 -5
  158. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  159. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  160. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  161. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  162. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  163. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  164. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  165. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  166. package/src/sap/ui/core/themes/base/base.less +119 -49
  167. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  168. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  169. package/src/sap/ui/core/themes/base/library.source.less +2 -0
  170. package/src/sap/ui/core/themes/base/skeleton.less +958 -0
  171. package/src/sap/ui/core/theming/ThemeManager.js +56 -73
  172. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  173. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  174. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  175. package/src/sap/ui/core/tmpl/Template.js +1 -1
  176. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  177. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  178. package/src/sap/ui/core/util/Export.js +1 -1
  179. package/src/sap/ui/core/util/ExportCell.js +1 -1
  180. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  181. package/src/sap/ui/core/util/ExportRow.js +1 -1
  182. package/src/sap/ui/core/util/ExportType.js +1 -1
  183. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  184. package/src/sap/ui/core/util/File.js +1 -1
  185. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  186. package/src/sap/ui/core/util/MockServer.js +1 -1
  187. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  188. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  189. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  190. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  191. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  192. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  193. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  194. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  195. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  196. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  197. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  198. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  199. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  200. package/src/sap/ui/debug/ControlTree.js +1 -1
  201. package/src/sap/ui/debug/DebugEnv.js +1 -1
  202. package/src/sap/ui/debug/PropertyList.js +1 -1
  203. package/src/sap/ui/dom/findTabbable.js +244 -0
  204. package/src/sap/ui/dom/isElementCovered.js +51 -0
  205. package/src/sap/ui/events/F6Navigation.js +10 -164
  206. package/src/sap/ui/model/ClientModel.js +1 -1
  207. package/src/sap/ui/model/CompositeDataState.js +1 -1
  208. package/src/sap/ui/model/CompositeType.js +1 -1
  209. package/src/sap/ui/model/DataState.js +1 -1
  210. package/src/sap/ui/model/MetaModel.js +1 -1
  211. package/src/sap/ui/model/Model.js +1 -1
  212. package/src/sap/ui/model/SelectionModel.js +1 -1
  213. package/src/sap/ui/model/SimpleType.js +1 -1
  214. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  215. package/src/sap/ui/model/Type.js +1 -1
  216. package/src/sap/ui/model/json/JSONModel.js +1 -1
  217. package/src/sap/ui/model/message/MessageModel.js +1 -1
  218. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  219. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  220. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  221. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  222. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  223. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  224. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  225. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  226. package/src/sap/ui/model/odata/type/Date.js +1 -1
  227. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  228. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  229. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  230. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  231. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  232. package/src/sap/ui/model/odata/type/Double.js +1 -1
  233. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  234. package/src/sap/ui/model/odata/type/Int.js +1 -1
  235. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  236. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  237. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  238. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  239. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  240. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  241. package/src/sap/ui/model/odata/type/Single.js +1 -1
  242. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  243. package/src/sap/ui/model/odata/type/String.js +1 -1
  244. package/src/sap/ui/model/odata/type/Time.js +1 -1
  245. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  246. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  247. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  248. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  249. package/src/sap/ui/model/odata/v2/ODataModel.js +144 -14
  250. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  251. package/src/sap/ui/model/odata/v4/Context.js +18 -8
  252. package/src/sap/ui/model/odata/v4/ODataBinding.js +1 -1
  253. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +12 -9
  254. package/src/sap/ui/model/odata/v4/ODataListBinding.js +30 -14
  255. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +254 -189
  256. package/src/sap/ui/model/odata/v4/ODataModel.js +51 -13
  257. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +4 -1
  258. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +68 -32
  259. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +9 -6
  260. package/src/sap/ui/model/odata/v4/lib/_Cache.js +7 -7
  261. package/src/sap/ui/model/odata/v4/lib/_Helper.js +17 -11
  262. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +11 -3
  263. package/src/sap/ui/model/odata/v4/lib/_TreeState.js +10 -4
  264. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  265. package/src/sap/ui/model/type/Boolean.js +1 -1
  266. package/src/sap/ui/model/type/Currency.js +1 -1
  267. package/src/sap/ui/model/type/Date.js +1 -1
  268. package/src/sap/ui/model/type/DateInterval.js +1 -1
  269. package/src/sap/ui/model/type/DateTime.js +1 -1
  270. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  271. package/src/sap/ui/model/type/FileSize.js +1 -1
  272. package/src/sap/ui/model/type/Float.js +1 -1
  273. package/src/sap/ui/model/type/Integer.js +1 -1
  274. package/src/sap/ui/model/type/String.js +1 -1
  275. package/src/sap/ui/model/type/Time.js +1 -1
  276. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  277. package/src/sap/ui/model/type/Unit.js +1 -1
  278. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  279. package/src/sap/ui/performance/trace/FESR.js +3 -0
  280. package/src/sap/ui/performance/trace/Interaction.js +4 -2
  281. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  282. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  283. package/src/sap/ui/qunit/utils/nextUIUpdate.js +7 -53
  284. package/src/sap/ui/qunit/utils/waitForThemeApplied.js +6 -42
  285. package/src/sap/ui/test/ModuleTracking.js +1 -1
  286. package/src/sap/ui/test/generic/TestBase.js +1 -1
  287. package/src/sap/ui/test/generic/Utils.js +3 -7
  288. package/src/sap/ui/test/opaQunit.js +3 -3
  289. package/src/sap/ui/test/utils/nextUIUpdate.js +64 -0
  290. package/src/sap/ui/test/utils/waitForThemeApplied.js +58 -0
  291. package/src/sap/ui/util/Storage.js +1 -1
  292. package/src/ui5loader.js +9 -0
  293. package/test/sap/ui/core/demokit/sample/Messaging/ODataBackendMessagesComp/ui5.yaml +1 -1
  294. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +1 -1
  295. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +1 -1
  296. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +1 -1
  297. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +1 -1
  298. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/SandboxModel.js +1 -1
  299. package/test/sap/ui/core/demokit/sample/odata/v4/FlexibleColumnLayout/data/SalesOrderList('0500000000')-requestSideEffects.json +14 -14
  300. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +32 -2
  301. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +22 -0
  302. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Component.js +69 -0
  303. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/MIT.ListBindingTemplate.AnnotationChanges.html +63 -0
  304. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Main.view.xml +19 -7
  305. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/SandboxModel.js +1 -4
  306. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/data/equipments.json +37 -22
  307. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/data/localAnnotations.xml +10 -2
  308. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +5 -5
  309. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +32 -2
  310. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +30 -0
  311. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +12 -6
  312. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.controller.js +7 -0
  313. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.view.xml +2 -0
  314. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/SandboxModel.js +14 -14
  315. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/pages/Main.js +1 -1
  316. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +1 -1
  317. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +1 -1
  318. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +1 -1
  319. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +1 -1
  320. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +1 -1
  321. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +1 -1
  322. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +1 -1
  323. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +1 -1
  324. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +1 -1
  325. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +1 -1
  326. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +1 -1
  327. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +1 -1
  328. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +1 -1
  329. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +1 -1
  330. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +1 -1
  331. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +1 -1
  332. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +1 -1
  333. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +1 -1
  334. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +1 -1
  335. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +1 -1
  336. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +1 -1
  337. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +1 -1
  338. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +1 -1
  339. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +1 -1
  340. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +1 -1
  341. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +1 -1
  342. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +1 -1
  343. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +1 -1
  344. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +1 -1
  345. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +1 -1
  346. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +1 -1
  347. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +1 -1
  348. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +1 -1
  349. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +1 -1
  350. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +1 -1
  351. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +1 -1
  352. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +1 -1
  353. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +1 -1
  354. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +1 -1
  355. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +1 -1
  356. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +1 -1
  357. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +1 -1
  358. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +1 -1
  359. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +1 -1
  360. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +1 -1
  361. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +1 -1
  362. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +1 -1
  363. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/package.json +3 -0
  364. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +1 -1
  365. package/test/sap/ui/core/qunit/BlockLayerUtils.qunit.js +1 -1
  366. package/test/sap/ui/core/qunit/CalculatedFields.qunit.js +1 -1
  367. package/test/sap/ui/core/qunit/ContextMenuSupport.qunit.js +1 -1
  368. package/test/sap/ui/core/qunit/ControlDefinition.qunit.js +2 -2
  369. package/test/sap/ui/core/qunit/ControlRenderer.qunit.js +1 -1
  370. package/test/sap/ui/core/qunit/Core.qunit.js +1 -1
  371. package/test/sap/ui/core/qunit/CustomStyleClassSupport.qunit.js +1 -1
  372. package/test/sap/ui/core/qunit/CustomThemeFallback.qunit.js +1 -1
  373. package/test/sap/ui/core/qunit/CustomThemeFallback_unavoidablySync.qunit.js +1 -1
  374. package/test/sap/ui/core/qunit/Element_data.qunit.js +1 -1
  375. package/test/sap/ui/core/qunit/Element_destroy.qunit.js +1 -1
  376. package/test/sap/ui/core/qunit/Element_focus.qunit.js +196 -3
  377. package/test/sap/ui/core/qunit/Element_metadata_selector.qunit.js +1 -1
  378. package/test/sap/ui/core/qunit/EnabledPropagator.qunit.js +2 -3
  379. package/test/sap/ui/core/qunit/FastNavigationWithWebComponents.qunit.js +1 -1
  380. package/test/sap/ui/core/qunit/FieldGroup.qunit.js +1 -1
  381. package/test/sap/ui/core/qunit/FocusHandler.qunit.js +1 -1
  382. package/test/sap/ui/core/qunit/Fragment.qunit.js +1 -1
  383. package/test/sap/ui/core/qunit/Fragment_legacyAPIs.qunit.js +1 -1
  384. package/test/sap/ui/core/qunit/HTML.qunit.js +1 -1
  385. package/test/sap/ui/core/qunit/Icon.qunit.js +1 -1
  386. package/test/sap/ui/core/qunit/InvisibleText.qunit.js +1 -1
  387. package/test/sap/ui/core/qunit/LRUPersistentCache.qunit.js +8 -4
  388. package/test/sap/ui/core/qunit/LocalBusyIndicator.qunit.js +1 -1
  389. package/test/sap/ui/core/qunit/RenderManager.qunit.js +1 -1
  390. package/test/sap/ui/core/qunit/Rendering.qunit.js +1 -1
  391. package/test/sap/ui/core/qunit/ResizeHandler.qunit.js +1 -1
  392. package/test/sap/ui/core/qunit/ScrollBar.qunit.js +1 -1
  393. package/test/sap/ui/core/qunit/ShortcutHints.qunit.js +1 -1
  394. package/test/sap/ui/core/qunit/StashedControlSupport.qunit.js +1 -1
  395. package/test/sap/ui/core/qunit/StashedControlSupport_unavoidablySync.qunit.js +1 -1
  396. package/test/sap/ui/core/qunit/ThemeManager.qunit.js +1 -1
  397. package/test/sap/ui/core/qunit/ThemeParameters.qunit.js +1 -1
  398. package/test/sap/ui/core/qunit/ThemeParameters_legacyAPIs.qunit.js +1 -1
  399. package/test/sap/ui/core/qunit/Theming.qunit.js +1 -1
  400. package/test/sap/ui/core/qunit/Theming_default_and_fallback.qunit.js +1 -1
  401. package/test/sap/ui/core/qunit/TooltipBase.qunit.js +1 -1
  402. package/test/sap/ui/core/qunit/UIArea.qunit.js +1 -1
  403. package/test/sap/ui/core/qunit/bootstrap/ThemeVersion.qunit.js +1 -1
  404. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +1 -8
  405. package/test/sap/ui/core/qunit/component/Component.qunit.js +36 -36
  406. package/test/sap/ui/core/qunit/component/ComponentContainer.qunit.js +2 -10
  407. package/test/sap/ui/core/qunit/component/ComponentContainer_unavoidablySync.qunit.js +2 -10
  408. package/test/sap/ui/core/qunit/component/ComponentSupport.qunit.js +5 -5
  409. package/test/sap/ui/core/qunit/component/Component_containedInLibrary.qunit.js +10 -10
  410. package/test/sap/ui/core/qunit/component/Component_dependencyLoading.qunit.js +7 -7
  411. package/test/sap/ui/core/qunit/component/Component_dependencyLoading_unavoidablySync.qunit.js +6 -6
  412. package/test/sap/ui/core/qunit/component/Component_unavoidablySync.qunit.js +8 -8
  413. package/test/sap/ui/core/qunit/component/Customizing.qunit.js +1 -1
  414. package/test/sap/ui/core/qunit/component/Customizing_async.qunit.js +3 -3
  415. package/test/sap/ui/core/qunit/component/Customizing_disabled.qunit.js +1 -1
  416. package/test/sap/ui/core/qunit/component/Customizing_legacyAPIs.qunit.js +2 -2
  417. package/test/sap/ui/core/qunit/component/Customizing_multi.qunit.js +1 -1
  418. package/test/sap/ui/core/qunit/component/Customizing_unavoidablySync.qunit.js +1 -1
  419. package/test/sap/ui/core/qunit/component/ExtensionPoint.qunit.js +3 -3
  420. package/test/sap/ui/core/qunit/component/ExtensionPoint_unavoidablySync.qunit.js +1 -1
  421. package/test/sap/ui/core/qunit/component/Manifest.qunit.js +10 -10
  422. package/test/sap/ui/core/qunit/component/Manifest_unavoidablySync.qunit.js +1 -1
  423. package/test/sap/ui/core/qunit/component/Metadata.qunit.js +47 -47
  424. package/test/sap/ui/core/qunit/component/Metadata_unavoidablySync.qunit.js +33 -33
  425. package/test/sap/ui/core/qunit/component/Models.qunit.js +57 -57
  426. package/test/sap/ui/core/qunit/component/Models_unavoidablySync.qunit.js +12 -12
  427. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +2 -2
  428. package/test/sap/ui/core/qunit/component/UIComponent_unavoidablySync.qunit.js +1 -1
  429. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component1/Component.js +2 -2
  430. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component1/manifest.json +3 -3
  431. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component2/Component.js +2 -2
  432. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component2/manifest.json +1 -1
  433. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component3/Component.js +2 -2
  434. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component3/manifest.json +2 -2
  435. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component4/Component.js +2 -2
  436. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component4/manifest.json +2 -2
  437. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component5/Component.js +2 -2
  438. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component5/manifest.json +2 -2
  439. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component6/Component.js +2 -2
  440. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/component6/manifest.json +2 -2
  441. package/test/sap/ui/core/qunit/component/testdata/dependencyLoading/componentVariant/manifest.json +2 -2
  442. package/test/sap/ui/core/qunit/component/testdata/embedded/Component.js +2 -2
  443. package/test/sap/ui/core/qunit/component/testdata/embedded/manifest.json +2 -2
  444. package/test/sap/ui/core/qunit/component/testdata/inherit/Component.js +2 -2
  445. package/test/sap/ui/core/qunit/component/testdata/inherit/component.json +1 -1
  446. package/test/sap/ui/core/qunit/component/testdata/inherit/manifest.json +9 -9
  447. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/Component.js +2 -2
  448. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/component.json +1 -1
  449. package/test/sap/ui/core/qunit/component/testdata/inherit/parent/manifest.json +9 -9
  450. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/Component.js +2 -2
  451. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/manifest.json +3 -3
  452. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentA/Component.js +2 -2
  453. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentA/manifest.json +2 -2
  454. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentB/Component.js +2 -2
  455. package/test/sap/ui/core/qunit/component/testdata/inheritAsync/parentB/manifest.json +3 -3
  456. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/Component.js +2 -2
  457. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/manifest.json +3 -3
  458. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentA/Component.js +2 -2
  459. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentA/manifest.json +2 -2
  460. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentB/Component.js +2 -2
  461. package/test/sap/ui/core/qunit/component/testdata/inheritAsyncError/parentB/manifest.json +3 -3
  462. package/test/sap/ui/core/qunit/component/testdata/manifestload/manifest.json +2 -2
  463. package/test/sap/ui/core/qunit/component/testdata/minUI5Version/Component.js +1 -1
  464. package/test/sap/ui/core/qunit/component/testdata/minUI5Version/manifest.json +1 -1
  465. package/test/sap/ui/core/qunit/component/testdata/mixed/Component.js +1 -1
  466. package/test/sap/ui/core/qunit/component/testdata/mixed/manifest.json +9 -9
  467. package/test/sap/ui/core/qunit/component/testdata/mixed_legacyAPIs/Component.js +1 -1
  468. package/test/sap/ui/core/qunit/component/testdata/mixed_legacyAPIs/component.json +8 -8
  469. package/test/sap/ui/core/qunit/component/testdata/mixed_legacyAPIs/manifest.json +9 -9
  470. package/test/sap/ui/core/qunit/component/testdata/modelsMisc/Component.js +1 -1
  471. package/test/sap/ui/core/qunit/component/testdata/modelsMisc/manifest.json +1 -1
  472. package/test/sap/ui/core/qunit/component/testdata/other/Component.js +2 -2
  473. package/test/sap/ui/core/qunit/component/testdata/routerClass/Component.js +1 -1
  474. package/test/sap/ui/core/qunit/component/testdata/routerClass/manifest.json +2 -2
  475. package/test/sap/ui/core/qunit/component/testdata/routerPreloading/Component.js +1 -1
  476. package/test/sap/ui/core/qunit/component/testdata/routerPreloading/manifest.json +2 -2
  477. package/test/sap/ui/core/qunit/component/testdata/routing/Component.js +2 -2
  478. package/test/sap/ui/core/qunit/component/testdata/routing/RouterExtension.js +1 -1
  479. package/test/sap/ui/core/qunit/component/testdata/routing/TestView.js +1 -8
  480. package/test/sap/ui/core/qunit/component/testdata/routing/targets/Component.js +2 -2
  481. package/test/sap/ui/core/qunit/component/testdata/routing_legacyAPIs/Component.js +5 -5
  482. package/test/sap/ui/core/qunit/component/testdata/routing_legacyAPIs/targets/Component.js +5 -5
  483. package/test/sap/ui/core/qunit/component/testdata/targetsPreloading/Component.js +1 -1
  484. package/test/sap/ui/core/qunit/component/testdata/targetsPreloading/manifest.json +2 -2
  485. package/test/sap/ui/core/qunit/component/testdata/terminologies/Component.js +1 -1
  486. package/test/sap/ui/core/qunit/component/testdata/terminologies/Main.controller.js +1 -1
  487. package/test/sap/ui/core/qunit/component/testdata/terminologies/component1/Component.js +1 -1
  488. package/test/sap/ui/core/qunit/component/testdata/terminologies/component1/Main.controller.js +1 -1
  489. package/test/sap/ui/core/qunit/component/testdata/terminologies/component2/Component.js +1 -1
  490. package/test/sap/ui/core/qunit/component/testdata/terminologies/component2/Main.controller.js +1 -1
  491. package/test/sap/ui/core/qunit/component/testdata/terminologies/component3/Component.js +1 -1
  492. package/test/sap/ui/core/qunit/component/testdata/terminologies/component3/Main.controller.js +1 -1
  493. package/test/sap/ui/core/qunit/component/testdata/terminologies/component4/Component.js +1 -1
  494. package/test/sap/ui/core/qunit/component/testdata/terminologies/component4/Main.controller.js +1 -1
  495. package/test/sap/ui/core/qunit/component/testdata/terminologies/component5/Component.js +1 -1
  496. package/test/sap/ui/core/qunit/component/testdata/terminologies/component5/Main.controller.js +1 -1
  497. package/test/sap/ui/core/qunit/component/testdata/terminologies/reuse/Component.js +1 -1
  498. package/test/sap/ui/core/qunit/component/testdata/terminologies/reuse/Main.controller.js +1 -1
  499. package/test/sap/ui/core/qunit/component/testdata/v1/Component.js +2 -2
  500. package/test/sap/ui/core/qunit/component/testdata/v1/component.json +8 -8
  501. package/test/sap/ui/core/qunit/component/testdata/v1empty/Component.js +2 -2
  502. package/test/sap/ui/core/qunit/component/testdata/v1empty/component.json +1 -1
  503. package/test/sap/ui/core/qunit/component/testdata/v1inline/Component.js +10 -10
  504. package/test/sap/ui/core/qunit/component/testdata/v1missing/Component.js +2 -2
  505. package/test/sap/ui/core/qunit/component/testdata/v2/Component.js +2 -2
  506. package/test/sap/ui/core/qunit/component/testdata/v2/manifest.json +9 -9
  507. package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/Component.js +2 -2
  508. package/test/sap/ui/core/qunit/component/testdata/v2asyncRootView/manifest.json +9 -9
  509. package/test/sap/ui/core/qunit/component/testdata/v2empty/Component.js +1 -1
  510. package/test/sap/ui/core/qunit/component/testdata/v2empty/manifest.json +1 -1
  511. package/test/sap/ui/core/qunit/component/testdata/v2inline/Component.js +10 -10
  512. package/test/sap/ui/core/qunit/component/testdata/v2missing/Component.js +1 -1
  513. package/test/sap/ui/core/qunit/component/testdata/v2models/empty/Component.js +3 -3
  514. package/test/sap/ui/core/qunit/component/testdata/v2models/empty/manifest.json +1 -1
  515. package/test/sap/ui/core/qunit/component/testdata/v2models/extension/Component.js +4 -4
  516. package/test/sap/ui/core/qunit/component/testdata/v2models/parent/Component.js +12 -12
  517. package/test/sap/ui/core/qunit/component/testdata/v2models/parent/CustomModel.js +2 -2
  518. package/test/sap/ui/core/qunit/component/testdata/v2models/parent/ModelNotDefined.js +2 -2
  519. package/test/sap/ui/core/qunit/component/testdata/v2models/parentValid/Component.js +11 -11
  520. package/test/sap/ui/core/qunit/component/testdata/v2models/ui5Urls/Component.js +2 -2
  521. package/test/sap/ui/core/qunit/component/testdata/v2models/ui5Urls/manifest.json +2 -2
  522. package/test/sap/ui/core/qunit/component/testdata/v2version/Component.js +2 -2
  523. package/test/sap/ui/core/qunit/component/testdata/v2version/manifest.json +2 -2
  524. package/test/sap/ui/core/qunit/component/testdata/v4models/Component.js +3 -3
  525. package/test/sap/ui/core/qunit/component/testdata/v4models/cacheTokens/Component.js +3 -3
  526. package/test/sap/ui/core/qunit/component/testdata/v4models/sapSystem/Component.js +2 -2
  527. package/test/sap/ui/core/qunit/component/testdata/v4models/sapSystem/manifest.json +1 -1
  528. package/test/sap/ui/core/qunit/component/testdata/v4models/unsupportedVersion/Component.js +3 -3
  529. package/test/sap/ui/core/qunit/component/testdata/verticalLayout/Component.js +1 -1
  530. package/test/sap/ui/core/qunit/component/testdata/verticalLayout_legacyAPIs/Component.js +1 -1
  531. package/test/sap/ui/core/qunit/component/testdata/view/Main.controller.js +2 -2
  532. package/test/sap/ui/core/qunit/component/testdata/view/Main.view.xml +1 -1
  533. package/test/sap/ui/core/qunit/component/testdata/view/MainAsync.view.xml +1 -1
  534. package/test/sap/ui/core/qunit/component/testdata/view/MainAsyncWithWrongNesting.view.xml +1 -1
  535. package/test/sap/ui/core/qunit/component/testdata/view/Nested.view.xml +1 -1
  536. package/test/sap/ui/core/qunit/component/testsuite.component.qunit.js +2 -8
  537. package/test/sap/ui/core/qunit/composite/XMLComposite.qunit.js +1 -1
  538. package/test/sap/ui/core/qunit/dnd/DragAndDrop.qunit.js +1 -1
  539. package/test/sap/ui/core/qunit/dnd/DragInfo.qunit.js +1 -1
  540. package/test/sap/ui/core/qunit/dnd/DropInfo.qunit.js +1 -1
  541. package/test/sap/ui/core/qunit/fieldhelp/FieldHelp.qunit.js +184 -51
  542. package/test/sap/ui/core/qunit/fieldhelp/FieldHelpUtil.qunit.js +2 -0
  543. package/test/sap/ui/core/qunit/generic/ControlMemoryLeaks.qunit.js +1 -1
  544. package/test/sap/ui/core/qunit/generic/DuplicateIdCheck.qunit.js +1 -1
  545. package/test/sap/ui/core/qunit/generic/legacy/ControlIterator.qunit.js +1 -1
  546. package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaks.qunit.js +1 -1
  547. package/test/sap/ui/core/qunit/generic/legacy/DuplicateIdCheck.qunit.js +1 -1
  548. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +188 -61
  549. package/test/sap/ui/core/qunit/isBehindOtherElement.qunit.js +1 -1
  550. package/test/sap/ui/core/qunit/jquery.sap.events.qunit.js +1 -1
  551. package/test/sap/ui/core/qunit/jquery.sap.ui.qunit.js +1 -1
  552. package/test/sap/ui/core/qunit/messages/messagesUsage.qunit.js +1 -1
  553. package/test/sap/ui/core/qunit/mvc/AnyView.qunit.js +1 -1
  554. package/test/sap/ui/core/qunit/mvc/AnyViewAsync.qunit.js +1 -1
  555. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +1 -1
  556. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorAsync_unavoidablyUsingInlineStyle.qunit.js +1 -1
  557. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +1 -1
  558. package/test/sap/ui/core/qunit/mvc/XMLView.qunit.js +1 -1
  559. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing.qunit.js +1 -1
  560. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing_legacyAPIs.qunit.js +1 -1
  561. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AnyViewAsync_legacyAPIs.qunit.js +1 -1
  562. package/test/sap/ui/core/qunit/mvc_legacyAPIs/AnyView_legacyAPIs.qunit.js +1 -1
  563. package/test/sap/ui/core/qunit/mvc_legacyAPIs/HTMLView_legacyAPIs.qunit.js +1 -1
  564. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLTemplateProcessorRequireXML_legacyAPIs.qunit.js +1 -1
  565. package/test/sap/ui/core/qunit/mvc_legacyAPIs/XMLView_legacyAPIs.qunit.js +1 -1
  566. package/test/sap/ui/core/qunit/odata/ODataAnnotations.qunit.js +1 -1
  567. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +511 -21
  568. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +382 -3
  569. package/test/sap/ui/core/qunit/odata/v2/V2ODataModel.qunit.js +1 -1
  570. package/test/sap/ui/core/qunit/odata/v2/V2ODataModelB.qunit.js +1 -1
  571. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +28 -4
  572. package/test/sap/ui/core/qunit/odata/v4/ODataContextBinding.qunit.js +34 -20
  573. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +80 -15
  574. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +90 -6
  575. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1201 -202
  576. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +34 -0
  577. package/test/sap/ui/core/qunit/odata/v4/ODataPropertyBinding.qunit.js +38 -0
  578. package/test/sap/ui/core/qunit/odata/v4/data/annotations_tea_busi.xml +14 -0
  579. package/test/sap/ui/core/qunit/odata/v4/data/metadata_tea_busi_supplier.xml +36 -0
  580. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +319 -38
  581. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +22 -9
  582. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +2 -2
  583. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +53 -10
  584. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +6 -0
  585. package/test/sap/ui/core/qunit/odata/v4/lib/_TreeState.qunit.js +30 -1
  586. package/test/sap/ui/core/qunit/opa/Opa5PageObject.qunit.js +1 -1
  587. package/test/sap/ui/core/qunit/opa/OpaPlugin.qunit.js +1 -1
  588. package/test/sap/ui/core/qunit/opa/RecordReplay.qunit.js +1 -1
  589. package/test/sap/ui/core/qunit/opa/_ControlFinder.qunit.js +1 -1
  590. package/test/sap/ui/core/qunit/opa/actions/Action.qunit.js +1 -1
  591. package/test/sap/ui/core/qunit/opa/actions/EnterText.qunit.js +1 -1
  592. package/test/sap/ui/core/qunit/opa/actions/Press.qunit.js +1 -1
  593. package/test/sap/ui/core/qunit/opa/autowaiter/_cssAnimationWaiter.js +1 -1
  594. package/test/sap/ui/core/qunit/opa/autowaiter/_cssTransitionWaiter.js +1 -1
  595. package/test/sap/ui/core/qunit/opa/autowaiter/_jsAnimationWaiter.js +1 -1
  596. package/test/sap/ui/core/qunit/opa/autowaiter/_navigationContainerWaiter.js +1 -1
  597. package/test/sap/ui/core/qunit/opa/autowaiter/_resourceWaiter.js +1 -1
  598. package/test/sap/ui/core/qunit/opa/fixture/bindingPath.js +1 -1
  599. package/test/sap/ui/core/qunit/opa/matchers/Interactable.qunit.js +1 -1
  600. package/test/sap/ui/core/qunit/opa/matchers/LabelFor.qunit.js +1 -1
  601. package/test/sap/ui/core/qunit/opa/matchers/Sibling.qunit.js +1 -1
  602. package/test/sap/ui/core/qunit/opa/matchers/Visible.qunit.js +1 -1
  603. package/test/sap/ui/core/qunit/opa/matchers/_Busy.qunit.js +1 -1
  604. package/test/sap/ui/core/qunit/opa/matchers/_Editable.qunit.js +1 -1
  605. package/test/sap/ui/core/qunit/opa/matchers/_Enabled.qunit.js +1 -1
  606. package/test/sap/ui/core/qunit/opa/matchers/_Visitor.qunit.js +1 -1
  607. package/test/sap/ui/core/qunit/opa/opa5/actions.qunit.js +1 -1
  608. package/test/sap/ui/core/qunit/opa/opa5/basics.qunit.js +1 -1
  609. package/test/sap/ui/core/qunit/opa/opa5/logging.qunit.js +1 -1
  610. package/test/sap/ui/core/qunit/opa/opa5/matchers.qunit.js +1 -1
  611. package/test/sap/ui/core/qunit/opa/selectors/_BindingPath.js +1 -1
  612. package/test/sap/ui/core/qunit/opa/selectors/_ControlSelectorGenerator.js +1 -1
  613. package/test/sap/ui/core/qunit/opa/selectors/_ControlSelectorValidator.js +1 -1
  614. package/test/sap/ui/core/qunit/opa/selectors/_DropdownItem.js +1 -1
  615. package/test/sap/ui/core/qunit/opa/selectors/_GlobalID.js +1 -1
  616. package/test/sap/ui/core/qunit/opa/selectors/_LabelFor.js +1 -1
  617. package/test/sap/ui/core/qunit/opa/selectors/_Properties.js +1 -1
  618. package/test/sap/ui/core/qunit/opa/selectors/_Selector.js +1 -1
  619. package/test/sap/ui/core/qunit/opa/selectors/_TableRowItem.js +1 -1
  620. package/test/sap/ui/core/qunit/opa/selectors/_ViewID.js +1 -1
  621. package/test/sap/ui/core/qunit/opa/testsuite.opa.qunit.js +448 -426
  622. package/test/sap/ui/core/qunit/performance/trace/FESR.qunit.js +8 -4
  623. package/test/sap/ui/core/qunit/performance/trace/Interaction.qunit.js +1 -1
  624. package/test/sap/ui/core/qunit/routing/Placeholder.qunit.js +1 -1
  625. package/test/sap/ui/core/qunit/routing/PlaceholderOptOut.qunit.js +1 -1
  626. package/test/sap/ui/core/qunit/tmpl/Template.qunit.js +1 -1
  627. package/test/sap/ui/core/qunit/ui5classes/ManagedObject.qunit.js +62 -1
  628. package/test/sap/ui/core/qunit/util/InvisibleMessage.qunit.js +1 -1
  629. package/test/sap/ui/core/qunit/util/LabelEnablement.qunit.js +1 -1
  630. package/test/sap/ui/core/qunit/util/Popup.qunit.js +1 -1
  631. package/test/sap/ui/core/qunit/util/ResponsivePaddingsEnablement.qunit.js +1 -1
  632. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +1 -1
  633. package/test/sap/ui/core/qunit/util/jquery.sap.dom.qunit.js +1 -1
  634. package/test/sap/ui/core/qunit/util/reflection/BaseTreeModifier.qunit.js +3 -3
  635. package/test/sap/ui/core/qunit/util/reflection/JsControlTreeModifier.qunit.js +3 -3
  636. package/test/sap/ui/core/qunit/util/reflection/XmlTreeModifier.qunit.js +3 -3
  637. package/test/sap/ui/core/qunit/util/reflection/testdata/comp/Component.js +10 -0
  638. package/test/sap/ui/core/qunit/util/reflection/testsuite.reflection.qunit.html +14 -0
  639. package/test/sap/ui/core/qunit/util/reflection/testsuite.reflection.qunit.js +30 -0
  640. package/test/sap/ui/core/qunit/util/testsuite.util.qunit.js +3 -56
  641. package/test/sap/ui/core/relnotes/changes-1.126.json +1 -17
  642. package/test/sap/ui/core/relnotes/changes-1.127.json +52 -0
  643. package/test/sap/ui/core/samples/databinding/UnitTable/ui5.yaml +1 -1
  644. package/test/sap/ui/qunit/TestRunner.js +721 -521
  645. package/test/sap/ui/qunit/testrunner.css +123 -20
  646. package/test/sap/ui/qunit/testrunner.html +57 -287
  647. /package/test/sap/ui/core/qunit/{component/testdata/other → util/reflection/testdata/comp}/fragment-withTemplating.fragment.xml +0 -0
@@ -9,6 +9,7 @@ sap.ui.define([
9
9
  "sap/m/Input",
10
10
  "sap/m/Label",
11
11
  "sap/ui/Device",
12
+ "sap/ui/base/BindingInfo",
12
13
  "sap/ui/base/ManagedObjectObserver",
13
14
  "sap/ui/base/SyncPromise",
14
15
  "sap/ui/core/Lib",
@@ -40,7 +41,7 @@ sap.ui.define([
40
41
  "sap/ui/util/XMLHelper"
41
42
  // load Table resources upfront to avoid loading times > 1 second for the first test using Table
42
43
  // "sap/ui/table/Table"
43
- ], function (Log, Localization, merge, uid, Input, Label, Device, ManagedObjectObserver, SyncPromise,
44
+ ], function (Log, Localization, merge, uid, Input, Label, Device, BindingInfo, ManagedObjectObserver, SyncPromise,
44
45
  Library, Messaging, UI5Date, FieldHelp, FieldHelpUtil, Message, MessageType, Controller, View, Rendering,
45
46
  BindingMode, Filter, FilterOperator, FilterType, Model, Sorter, JSONModel, MessageModel, CountMode,
46
47
  MessageScope, Decimal, Context, ODataModel, XMLModel, TestUtils, datajs, XMLHelper) {
@@ -86,6 +87,18 @@ sap.ui.define([
86
87
  {target : sTarget, additionalTargets : aAdditionalTargets});
87
88
  }
88
89
 
90
+ /**
91
+ * Compares two given field help hotspots.
92
+ *
93
+ * @param {object} a A field help hotspot
94
+ * @param {object} b Another field help hotspot
95
+ *
96
+ * @returns {-1|0|1} Wheter <code>a</code> is smaller, equal or greater
97
+ */
98
+ function compareHotspots(a, b) {
99
+ return a.hotspotId.localeCompare(b.hotspotId) || a.backendHelpKey.id.localeCompare(b.backendHelpKey.id);
100
+ }
101
+
89
102
  /**
90
103
  * Creates an error response object for a technical error (http status code = 4xx/5xx).
91
104
  *
@@ -101,6 +114,8 @@ sap.ui.define([
101
114
  * The HTTP status code
102
115
  * @param {string} [oErrorResponseInfo.target]
103
116
  * The message target
117
+ * @param {object} [oErrorResponseInfo.headers]
118
+ * The message target
104
119
  * @returns {object}
105
120
  * The error response
106
121
  */
@@ -123,7 +138,7 @@ sap.ui.define([
123
138
  error : oError
124
139
  }),
125
140
  crashBatch : oErrorResponseInfo.crashBatch,
126
- headers : {"Content-Type" : "application/json;charset=utf-8"},
141
+ headers : oErrorResponseInfo.headers || {"Content-Type" : "application/json;charset=utf-8"},
127
142
  statusCode : oErrorResponseInfo.statusCode || 500,
128
143
  statusText : "FAILED"
129
144
  };
@@ -1865,7 +1880,7 @@ sap.ui.define([
1865
1880
  path : "/SalesOrderSet('1')/ToBusinessPartner/ToProducts",
1866
1881
  title : "Absolute path with three segments to a collection; 'to 1' navigation in the middle"
1867
1882
  }, {
1868
- // even if key predicates for ToBusinessPartner cannot be resolved, canonical path for the
1883
+ // even if key predicate for ToBusinessPartner cannot be resolved, canonical path for the
1869
1884
  // product can be computed
1870
1885
  expectedCanonicalRequest : {
1871
1886
  deepPath : "/SalesOrderSet('1')/ToBusinessPartner/ToProducts('P1')",
@@ -23108,15 +23123,6 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
23108
23123
  <Label labelFor="Note0" text="Label for Item or Sales Order Note" />
23109
23124
  <Input id="Note0" value="{Note}" />
23110
23125
  </FlexBox>`;
23111
- function compare(a, b) {
23112
- if (a === b) {
23113
- return 0;
23114
- }
23115
- return a < b ? -1 : 1;
23116
- }
23117
- function sortHotspots(a, b) {
23118
- return compare(a.hotspotId, b.hotspotId) || compare(a.backendHelpKey.id, b.backendHelpKey.id);
23119
- }
23120
23126
  let fnResolve;
23121
23127
  function updateCallback(aCurrentHotspots) {
23122
23128
  fnResolve(aCurrentHotspots);
@@ -23126,7 +23132,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
23126
23132
  return new Promise((resolve) => {
23127
23133
  fnResolve = resolve;
23128
23134
  }).then((aCurrentHotspots) => {
23129
- assert.deepEqual(aCurrentHotspots.sort(sortHotspots), aExpectedHotspots.sort(sortHotspots),
23135
+ assert.deepEqual(aCurrentHotspots.sort(compareHotspots), aExpectedHotspots.sort(compareHotspots),
23130
23136
  "Update called: " + sTestTitle);
23131
23137
  });
23132
23138
  }
@@ -23158,7 +23164,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
23158
23164
  FieldHelpUtil.setDocumentationRef(oFilterDynamicallyDestroyed,
23159
23165
  "urn:sap-com:documentation:key?=type=DTEL&id=SALESORDERID");
23160
23166
  const aExpectedHotspots = [{
23161
- "backendHelpKey": {id: "FOO", origin: null, type: "DTEL"},
23167
+ "backendHelpKey": {id: "FOO", type: "DTEL"},
23162
23168
  "hotspotId": oFilterWithFieldHelp.getId(),
23163
23169
  "labelText": "Label for filter with field help"
23164
23170
  }, {
@@ -23170,15 +23176,15 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
23170
23176
  "hotspotId": oView.byId("Note").getId(),
23171
23177
  "labelText": "Label for Note"
23172
23178
  }, { // documentation ref from OData annotation - composite binding part 0
23173
- "backendHelpKey": {id: "GROSSAMOUNT", origin: null, type: "DTEL"},
23179
+ "backendHelpKey": {id: "GROSSAMOUNT", type: "DTEL"},
23174
23180
  "hotspotId": oView.byId("Amount0").getId(),
23175
23181
  "labelText": "Label for both amount and currency"
23176
23182
  }, { // documentation ref from OData annotation - composite binding part 1
23177
- "backendHelpKey": {id: "/FOO/CURRENCY", origin: null, type: "DTEL"},
23183
+ "backendHelpKey": {id: "/FOO/CURRENCY", type: "DTEL"},
23178
23184
  "hotspotId": oView.byId("Amount0").getId(),
23179
23185
  "labelText": "Label for both amount and currency"
23180
23186
  }, { // documentation ref from OData annotation - composite binding showning only one part
23181
- "backendHelpKey": {id: "GROSSAMOUNT", origin: null, type: "DTEL"},
23187
+ "backendHelpKey": {id: "GROSSAMOUNT", type: "DTEL"},
23182
23188
  "hotspotId": oView.byId("Amount1").getId(),
23183
23189
  "labelText": "Label for amount only"
23184
23190
  }];
@@ -23198,7 +23204,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
23198
23204
  const oUpdateCalledPromise = waitForUpdate([
23199
23205
  ...aExpectedHotspots,
23200
23206
  {
23201
- "backendHelpKey": {id: "BAZ", origin: null, type: "DTEL"},
23207
+ "backendHelpKey": {id: "BAZ", type: "DTEL"},
23202
23208
  "hotspotId": oLateFilterField.getId(),
23203
23209
  "labelText": "Label for late filter field"
23204
23210
  }], "late creation of a filter field");
@@ -23222,11 +23228,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
23222
23228
  const oUpdateCalledPromise = waitForUpdate([
23223
23229
  ...aExpectedHotspots,
23224
23230
  {
23225
- "backendHelpKey": {id: "GROSSAMOUNT", origin: null, type: "DTEL"},
23231
+ "backendHelpKey": {id: "GROSSAMOUNT", type: "DTEL"},
23226
23232
  "hotspotId": oView.byId("Amount2").getId(),
23227
23233
  "labelText": "Label for both amount and currency, lazy bound"
23228
23234
  }, {
23229
- "backendHelpKey": {id: "/FOO/CURRENCY", origin: null, type: "DTEL"},
23235
+ "backendHelpKey": {id: "/FOO/CURRENCY", type: "DTEL"},
23230
23236
  "hotspotId": oView.byId("Amount2").getId(),
23231
23237
  "labelText": "Label for both amount and currency, lazy bound"
23232
23238
  }], "late composite binding");
@@ -23264,7 +23270,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
23264
23270
  const oUpdateCalledPromise = waitForUpdate([
23265
23271
  ...aExpectedHotspots,
23266
23272
  {
23267
- "backendHelpKey": {id: "ITEMNOTE", origin: null, type: "DTEL"},
23273
+ "backendHelpKey": {id: "ITEMNOTE", type: "DTEL"},
23268
23274
  "hotspotId": oView.byId("Note0").getId(),
23269
23275
  "labelText": "Label for Item or Sales Order Note"
23270
23276
  }], "late initially setting a binding context");
@@ -23311,4 +23317,488 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
23311
23317
  FieldHelp.getInstance().deactivate();
23312
23318
  });
23313
23319
  });
23320
+
23321
+ //*********************************************************************************************
23322
+ // Scenario 1: If a child control with a field help is embedded in a parent control with a
23323
+ // <code>fieldHelpDisplay</code> association, the field help is displayed at the parent control.
23324
+ // Scenario 2: If a parent control with a <code>fieldHelpDisplay</code> association has multiple child controls with
23325
+ // field helps, those field helps are displayed at the parent control and not the children.
23326
+ // Scenario 3+4: same as 1 and 2 but instead of <code>fieldHelpDisplay</code> association the parent control has
23327
+ // a BindingInfo.OriginalParent symbol assigned.
23328
+ // JIRA: CPOUI5MODELS-1761
23329
+ QUnit.test("Field Help: fieldHelpDisplay association and BindingInfo.OriginalParent symbol", function (assert) {
23330
+ const oModel = createSalesOrdersModel({defaultBindingMode: BindingMode.TwoWay});
23331
+ const sView = `
23332
+ <FlexBox id="form" binding="{/SalesOrderSet('1')}">
23333
+ <Label labelFor="ShowFieldHelp0" text="Element displaying field help" />
23334
+ <Text id="ShowFieldHelp0" />
23335
+ <FlexBox id="ParentWithFieldHelpDisplay">
23336
+ <Label labelFor="Amount0" text="Label for both amount and currency" />
23337
+ <Input id="Amount0" value="{
23338
+ mode: 'TwoWay',
23339
+ parts: [{
23340
+ constraints: {precision: 16, scale: 3},
23341
+ path: 'GrossAmount',
23342
+ type: 'sap.ui.model.odata.type.Decimal'
23343
+ }, {
23344
+ constraints: {maxLength: 5},
23345
+ path: 'CurrencyCode',
23346
+ type: 'sap.ui.model.odata.type.String'
23347
+ }],
23348
+ type: 'sap.ui.model.type.Currency'
23349
+ }" />
23350
+ <Label labelFor="AmountOnly" text="Label for amount only" />
23351
+ <Input id="AmountOnly" value="{
23352
+ formatOptions: {showMeasure: false},
23353
+ mode: 'TwoWay',
23354
+ parts: [{
23355
+ constraints: {precision: 16, scale: 3},
23356
+ path: 'GrossAmount',
23357
+ type: 'sap.ui.model.odata.type.Decimal'
23358
+ }, {
23359
+ constraints: {maxLength: 5},
23360
+ path: 'CurrencyCode',
23361
+ type: 'sap.ui.model.odata.type.String'
23362
+ }],
23363
+ type: 'sap.ui.model.type.Currency'
23364
+ }" />
23365
+ <Label labelFor="Note" text="Label for Note" />
23366
+ <Input id="Note" value="{path: 'Note', type: 'sap.ui.model.odata.type.String'}" />
23367
+ </FlexBox>
23368
+ <Label labelFor="ShowFieldHelp1" text="Element displaying field help (OriginalParent)" />
23369
+ <Text id="ShowFieldHelp1" />
23370
+ <FlexBox id="ParentWithOriginalParentSymbol">
23371
+ <Label labelFor="Amount1" text="Label for both amount and currency" />
23372
+ <Input id="Amount1" value="{
23373
+ mode: 'TwoWay',
23374
+ parts: [{
23375
+ constraints: {precision: 16, scale: 3},
23376
+ path: 'GrossAmount',
23377
+ type: 'sap.ui.model.odata.type.Decimal'
23378
+ }, {
23379
+ constraints: {maxLength: 5},
23380
+ path: 'CurrencyCode',
23381
+ type: 'sap.ui.model.odata.type.String'
23382
+ }],
23383
+ type: 'sap.ui.model.type.Currency'
23384
+ }" />
23385
+ <Label labelFor="AmountOnly1" text="Label for amount only" />
23386
+ <Input id="AmountOnly1" value="{
23387
+ formatOptions: {showMeasure: false},
23388
+ mode: 'TwoWay',
23389
+ parts: [{
23390
+ constraints: {precision: 16, scale: 3},
23391
+ path: 'GrossAmount',
23392
+ type: 'sap.ui.model.odata.type.Decimal'
23393
+ }, {
23394
+ constraints: {maxLength: 5},
23395
+ path: 'CurrencyCode',
23396
+ type: 'sap.ui.model.odata.type.String'
23397
+ }],
23398
+ type: 'sap.ui.model.type.Currency'
23399
+ }" />
23400
+ <Label labelFor="Note1" text="Label for Note" />
23401
+ <Input id="Note1" value="{path: 'Note', type: 'sap.ui.model.odata.type.String'}" />
23402
+ </FlexBox>
23403
+ </FlexBox>`;
23404
+ let fnResolve;
23405
+ function updateCallback(aCurrentHotspots) {
23406
+ fnResolve(aCurrentHotspots);
23407
+ }
23408
+ function waitForUpdate(aHotspots, sTestTitle) {
23409
+ const aExpectedHotspots = aHotspots;
23410
+ return new Promise((resolve) => {
23411
+ fnResolve = resolve;
23412
+ }).then((aCurrentHotspots) => {
23413
+ assert.deepEqual(aCurrentHotspots.sort(compareHotspots), aExpectedHotspots.sort(compareHotspots),
23414
+ "Update called: " + sTestTitle);
23415
+ });
23416
+ }
23417
+
23418
+ this.expectHeadRequest()
23419
+ .expectRequest("SalesOrderSet('1')", {
23420
+ __metadata: {uri: "SalesOrderSet('1')"},
23421
+ CurrencyCode: "EUR",
23422
+ DeliveryStatus: "N",
23423
+ GrossAmount: "1.23",
23424
+ Note: "Sales Order Note",
23425
+ SalesOrderID: "1"
23426
+ })
23427
+ .expectValue("Amount0", "1.23")
23428
+ .expectValue("AmountOnly", "1.23")
23429
+ .expectValue("Amount0", "1.23\xa0EUR")
23430
+ .expectValue("Note", "Sales Order Note");
23431
+
23432
+ return this.createView(assert, sView, {undefined: oModel, filter: new JSONModel({filter: "42"})}).then(() => {
23433
+ const oView = this.oView;
23434
+ oView.byId("ParentWithFieldHelpDisplay").setFieldHelpDisplay(oView.byId("ShowFieldHelp0"));
23435
+ oView.byId("ParentWithOriginalParentSymbol")[BindingInfo.OriginalParent] = oView.byId("ShowFieldHelp1");
23436
+ const aExpectedHotspots = [{
23437
+ "backendHelpKey": {id: "GROSSAMOUNT", type: "DTEL"},
23438
+ "hotspotId": oView.byId("ShowFieldHelp0").getId(),
23439
+ "labelText": "Element displaying field help"
23440
+ }, {
23441
+ "backendHelpKey": {id: "/FOO/CURRENCY", type: "DTEL"},
23442
+ "hotspotId": oView.byId("ShowFieldHelp0").getId(),
23443
+ "labelText": "Element displaying field help"
23444
+ }, {
23445
+ "backendHelpKey": {id: "NOTE", origin: "MyOrigin", type: "DTEL"},
23446
+ "hotspotId": oView.byId("ShowFieldHelp0").getId(),
23447
+ "labelText": "Element displaying field help"
23448
+ },{
23449
+ "backendHelpKey": {id: "GROSSAMOUNT", type: "DTEL"},
23450
+ "hotspotId": oView.byId("ShowFieldHelp1").getId(),
23451
+ "labelText": "Element displaying field help (OriginalParent)"
23452
+ }, {
23453
+ "backendHelpKey": {id: "/FOO/CURRENCY", type: "DTEL"},
23454
+ "hotspotId": oView.byId("ShowFieldHelp1").getId(),
23455
+ "labelText": "Element displaying field help (OriginalParent)"
23456
+ }, {
23457
+ "backendHelpKey": {id: "NOTE", origin: "MyOrigin", type: "DTEL"},
23458
+ "hotspotId": oView.byId("ShowFieldHelp1").getId(),
23459
+ "labelText": "Element displaying field help (OriginalParent)"
23460
+ }];
23461
+ const oUpdateCalledPromise = waitForUpdate(aExpectedHotspots, "initial activation");
23462
+
23463
+ // code under test
23464
+ FieldHelp.getInstance().activate(updateCallback);
23465
+
23466
+ return Promise.all([
23467
+ oUpdateCalledPromise,
23468
+ this.waitForChanges(assert, "Initial activation")
23469
+ ]);
23470
+ }).finally(() => {
23471
+ FieldHelp.getInstance().deactivate();
23472
+ });
23473
+ });
23474
+
23475
+ //*********************************************************************************************
23476
+ // Scenario: Server responds with 503 HTTP status code and "Retry-after" response header
23477
+ // 1) $batch with GET request answered with 503, no error no change, callback waiting
23478
+ // 1a) Deferred binding request data, no request happen because pending promise, callback not called again,
23479
+ // callback promise reused.
23480
+ // 2) Callback resolves promise -> first $batch repeated, second $batch for deferred binding also sent
23481
+ // 3) ODataBinding#refresh results in different $batches, first $batch response processing reuses already
23482
+ // existing promise of 2nd $batch which responded faster with 503.
23483
+ // 3a) Callback rejects promise with supplied error -> requests rejected, error reported only once
23484
+ // 4) 3 $batch, 2nd and 3rd answered with 503, 1st answer pending
23485
+ // 4a) 1st $batch gets 503 answer, reuses already existing retry-after promise
23486
+ // 4b) resolve retry-after promise and see all 3 $batch repeated
23487
+ // 5) Callback rejects promise with own Error reason
23488
+ // 5a) preparation, GET and MERGE request answered with 503
23489
+ // 5b) reject with own reason, error is not reported, only logged
23490
+ // 5c) after rejection the change is still present and can be repeated via #submitChanges wereas GET is not repeated
23491
+ //
23492
+ // JIRA: CPOUI5MODELS-1750
23493
+ QUnit.test("503 retry-after handling", function (assert) {
23494
+ let iCallbackCounter = 0;
23495
+ let bCallbackWaiting = false;
23496
+ let iErrorHandlerCalled = 0;
23497
+ const mParameters = {
23498
+ error() {
23499
+ assert.ok(true);
23500
+ iErrorHandlerCalled += 1;
23501
+ },
23502
+ success() {
23503
+ assert.ok(false);
23504
+ }};
23505
+ let fnRejectRetryAfter;
23506
+ let pRetryAfterFinished;
23507
+ let fnResolveRetryAfter;
23508
+ let fnRolveLate503Response;
23509
+ let oSuppliedError;
23510
+ const oModel = createSalesOrdersModel({refreshAfterChange : false});
23511
+ const sView = `
23512
+ <FlexBox id="objectPage1" binding="{/SalesOrderSet('1')}">
23513
+ <Text id="note1" text="{Note}" />
23514
+ </FlexBox>
23515
+ <FlexBox id="objectPage2">
23516
+ <Text id="note2" text="{Note}" />
23517
+ </FlexBox>
23518
+ <FlexBox id="objectPage3">
23519
+ <Text id="note3" text="{Note}" />
23520
+ </FlexBox>`;
23521
+
23522
+ oModel.setRetryAfterHandler((oError) => {
23523
+ iCallbackCounter += 1;
23524
+ bCallbackWaiting = true;
23525
+ oSuppliedError = oError;
23526
+ assert.ok(oError instanceof Error);
23527
+ assert.strictEqual(oError.message, "HTTP request failed");
23528
+ assert.ok(oError.retryAfter instanceof Date);
23529
+ const pRetryAfter = new Promise((resolve, reject) => {
23530
+ fnResolveRetryAfter = resolve;
23531
+ fnRejectRetryAfter = reject;
23532
+ });
23533
+ pRetryAfterFinished = pRetryAfter.catch(() => {}).finally(() => {bCallbackWaiting = false;});
23534
+ return pRetryAfter;
23535
+ });
23536
+
23537
+ function create503ErrorResponse(sCode) {
23538
+ return createErrorResponse({
23539
+ crashBatch : true,
23540
+ message : "Service Unavailable",
23541
+ statusCode : 503,
23542
+ headers : {"retry-after" : 5},
23543
+ messageCode : sCode
23544
+ });
23545
+ }
23546
+
23547
+ this.expectHeadRequest()
23548
+ .expectRequest("SalesOrderSet('1')", create503ErrorResponse("1)"));
23549
+
23550
+ // code under test (1)
23551
+ return this.createView(assert, sView, oModel).then(() => {
23552
+ assert.ok(bCallbackWaiting);
23553
+ assert.strictEqual(iCallbackCounter, 1);
23554
+
23555
+ // code under test
23556
+ this.oView.byId("objectPage2").bindObject("/SalesOrderSet('2')");
23557
+
23558
+ // waitForChanges only needed for progress output
23559
+ return this.waitForChanges(assert, "1a) reuse callback promise, no request");
23560
+ }).then(() => {
23561
+ assert.ok(bCallbackWaiting);
23562
+ assert.strictEqual(iCallbackCounter, 1);
23563
+
23564
+ this.expectRequest("SalesOrderSet('1')", {
23565
+ SalesOrderID : "1", Note : "Foo1"
23566
+ })
23567
+ .expectRequest("SalesOrderSet('2')", {
23568
+ SalesOrderID : "2", Note : "Foo2"
23569
+ })
23570
+ .expectValue("note1", "Foo1")
23571
+ .expectValue("note2", "Foo2");
23572
+
23573
+ // code under test
23574
+ fnResolveRetryAfter();
23575
+
23576
+ return Promise.all([
23577
+ pRetryAfterFinished,
23578
+ this.waitForChanges(assert, "2) resolve -> both batches repeated")
23579
+ ]);
23580
+ }).then(() => {
23581
+ assert.notOk(bCallbackWaiting);
23582
+ assert.strictEqual(iCallbackCounter, 1);
23583
+
23584
+ this.expectRequest("SalesOrderSet('1')", resolveLater(() => {
23585
+ // process 503 a little later than 2nd request's response, callback promise reused
23586
+ assert.ok(bCallbackWaiting);
23587
+ assert.strictEqual(iCallbackCounter, 2);
23588
+ return {response : create503ErrorResponse("3) late")};
23589
+ }))
23590
+ .expectRequest("SalesOrderSet('2')", create503ErrorResponse("3) early"));
23591
+
23592
+ // code under test (refresh via different groups in order to get separate batches)
23593
+ this.oView.byId("objectPage1").getElementBinding().refresh(true, "refresh1");
23594
+ this.oView.byId("objectPage2").getElementBinding().refresh(true, "refresh2");
23595
+
23596
+ return Promise.all([
23597
+ resolveLater(), // wait until error processing for 1st $batch is done
23598
+ this.waitForChanges(assert, "3) refresh answered with 503, callback only once")
23599
+ ]);
23600
+ }).then(() => {
23601
+ assert.ok(bCallbackWaiting);
23602
+ assert.strictEqual(iCallbackCounter, 2);
23603
+
23604
+ this.expectValue("note1", "")
23605
+ .expectValue("note2", "")
23606
+ .expectMessages([{
23607
+ code : "3) late", // 3) early was overwritten because same target "/batch"
23608
+ message : "Service Unavailable",
23609
+ persistent : false,
23610
+ fullTarget : "/$batch",
23611
+ target : "/$batch",
23612
+ technical : true,
23613
+ type : "Error"
23614
+ }]);
23615
+
23616
+ this.oLogMock.expects("error")
23617
+ .withExactArgs("Request failed with status code 503: "
23618
+ + "POST /sap/opu/odata/sap/ZUI5_GWSAMPLE_BASIC/$batch", sinon.match("3) early"),
23619
+ sODataMessageParserClassName);
23620
+ this.oLogMock.expects("error")
23621
+ .withExactArgs("Request failed with status code 503: "
23622
+ + "POST /sap/opu/odata/sap/ZUI5_GWSAMPLE_BASIC/$batch", sinon.match("3) late"),
23623
+ sODataMessageParserClassName);
23624
+
23625
+ // code under test
23626
+ fnRejectRetryAfter(oSuppliedError);
23627
+
23628
+ return Promise.all([
23629
+ pRetryAfterFinished,
23630
+ this.waitForChanges(assert, "3a) callback rejects promise with reason oSuppliedError")
23631
+ ]);
23632
+ }).then(() => {
23633
+ assert.notOk(bCallbackWaiting);
23634
+ assert.strictEqual(iCallbackCounter, 2);
23635
+ this.removePersistentAndTechnicalMessages(); // reset messages
23636
+
23637
+ this.expectRequest("SalesOrderSet('1')", new Promise((resolve) => {fnRolveLate503Response = resolve;}))
23638
+ .expectRequest("SalesOrderSet('2')", create503ErrorResponse("3) for SalesOrder 2"))
23639
+ .expectRequest("SalesOrderSet('3')", create503ErrorResponse("3) for SalesOrder 3"))
23640
+ .expectMessages([]);
23641
+
23642
+ // code under test
23643
+ this.oView.byId("objectPage1").getElementBinding().refresh(true, "refresh1");
23644
+ this.oView.byId("objectPage2").getElementBinding().refresh(true, "refresh2");
23645
+ this.oView.byId("objectPage3").bindObject("/SalesOrderSet('3')");
23646
+
23647
+ return this.waitForChanges(assert, "4) tree $batch, 2nd+3rd answered with 503, 1st answer pending");
23648
+ }).then(() => {
23649
+ assert.ok(bCallbackWaiting);
23650
+ assert.strictEqual(iCallbackCounter, 3);
23651
+
23652
+ // code under test
23653
+ fnRolveLate503Response({response : create503ErrorResponse("4) for SalesOrder 1")});
23654
+
23655
+ return Promise.all([
23656
+ resolveLater(), // wait until error processing for 1st $batch is done
23657
+ this.waitForChanges(assert, "4a) 1st $batch now answered also with 503")
23658
+ ]);
23659
+ }).then(() => {
23660
+ assert.ok(bCallbackWaiting);
23661
+ assert.strictEqual(iCallbackCounter, 3);
23662
+
23663
+ this.expectRequest("SalesOrderSet('1')", {SalesOrderID : "1", Note : "Bar1"})
23664
+ .expectRequest("SalesOrderSet('2')", {SalesOrderID : "2", Note : "Bar2"})
23665
+ .expectRequest("SalesOrderSet('3')", {SalesOrderID : "3", Note : "Bar3"});
23666
+
23667
+ this.expectValue("note1", "Bar1")
23668
+ .expectValue("note2", "Bar2")
23669
+ .expectValue("note3", "Bar3")
23670
+ .expectMessages([]);
23671
+
23672
+ fnResolveRetryAfter();
23673
+
23674
+ return Promise.all([
23675
+ pRetryAfterFinished,
23676
+ this.waitForChanges(assert, "4b) see $batches once retry-after resolved")
23677
+ ]);
23678
+ }).then(() => {
23679
+ assert.notOk(bCallbackWaiting);
23680
+ assert.strictEqual(iCallbackCounter, 3);
23681
+
23682
+ this.removePersistentAndTechnicalMessages(); // reset messages
23683
+ this.expectRequest("SalesOrderSet('2')", create503ErrorResponse("5)"))
23684
+ .expectMessages([]);
23685
+
23686
+ this.oView.byId("objectPage2").getElementBinding().refresh(true, "refresh2");
23687
+
23688
+ return Promise.all([
23689
+ resolveLater(), // we have to wait until error processing for $batch is done
23690
+ this.waitForChanges(assert, "5a) preparation")
23691
+ ]);
23692
+ }).then(() => {
23693
+ assert.ok(bCallbackWaiting);
23694
+ assert.strictEqual(iCallbackCounter, 4);
23695
+
23696
+ this.expectValue("note1", "Note1 5)");
23697
+
23698
+ // code under test
23699
+ oModel.setProperty("/SalesOrderSet('1')/Note", "Note1 5)");
23700
+ oModel.submitChanges(mParameters);
23701
+
23702
+ return this.waitForChanges(assert, "5a) preparation (2nd request queued)");
23703
+ }).then(() => {
23704
+ assert.ok(bCallbackWaiting);
23705
+ assert.strictEqual(iCallbackCounter, 4);
23706
+
23707
+ this.expectValue("note3", "Note3 5)");
23708
+
23709
+ // code under test
23710
+ oModel.setProperty("/SalesOrderSet('3')/Note", "Note3 5)");
23711
+ oModel.submitChanges(mParameters);
23712
+
23713
+ return this.waitForChanges(assert, "5a) preparation (3nd request queued)");
23714
+ }).then(() => {
23715
+ assert.ok(bCallbackWaiting);
23716
+ assert.strictEqual(iCallbackCounter, 4);
23717
+
23718
+ this.expectValue("note2", "")
23719
+ .expectMessages([]);
23720
+ this.oLogMock.expects("error")
23721
+ .withExactArgs("Retry-After handler rejected with: Rejected by User",
23722
+ sinon.match.string, sODataModelClassName);
23723
+
23724
+ // code under test
23725
+ fnRejectRetryAfter(new Error("Rejected by User"));
23726
+
23727
+ return Promise.all([
23728
+ pRetryAfterFinished,
23729
+ this.waitForChanges(assert, "5b) rejection with own error, only logged")
23730
+ ]);
23731
+ }).then(() => {
23732
+ assert.strictEqual(iErrorHandlerCalled, 2);
23733
+ assert.strictEqual(oModel.hasPendingChanges(true), true);
23734
+
23735
+ this.expectRequest({
23736
+ data : {
23737
+ __metadata : {uri : "SalesOrderSet('3')"},
23738
+ Note : "Note3 5)"
23739
+ },
23740
+ key : "SalesOrderSet('3')",
23741
+ method : "MERGE",
23742
+ requestUri : "SalesOrderSet('3')"
23743
+ }, NO_CONTENT)
23744
+ .expectRequest({
23745
+ data : {
23746
+ __metadata : {uri : "SalesOrderSet('1')"},
23747
+ Note : "Note1 5)"
23748
+ },
23749
+ key : "SalesOrderSet('1')",
23750
+ method : "MERGE",
23751
+ requestUri : "SalesOrderSet('1')"
23752
+ }, NO_CONTENT)
23753
+ .expectMessages([]);
23754
+
23755
+ // code under test
23756
+ oModel.submitChanges();
23757
+
23758
+ return this.waitForChanges(assert, "5c) changes still present and sent");
23759
+ }).then(() => {
23760
+ assert.strictEqual(oModel.hasPendingChanges(true), false);
23761
+ });
23762
+ });
23763
+
23764
+ //*********************************************************************************************
23765
+ // Scenario: HTTP status 503 retry-after handling in combination with sequentializeRequests
23766
+ // 503 and retry-after handling in combination with sequentializeRequests model parameter not
23767
+ // supported -> is treated as normal error
23768
+ // JIRA: CPOUI5MODELS-1750
23769
+ QUnit.test("503 retry-after handling (sequentializeRequests)", function (assert) {
23770
+ const oModel = createSalesOrdersModel({refreshAfterChange : false, sequentializeRequests : true});
23771
+ const sView = `
23772
+ <FlexBox id="objectPage1" binding="{/SalesOrderSet('1')}">
23773
+ <Text id="note1" text="{Note}"/>
23774
+ </FlexBox>`;
23775
+
23776
+ oModel.setRetryAfterHandler(() => {
23777
+ assert.ok(false, "must be not called!");
23778
+ });
23779
+
23780
+ this.expectHeadRequest()
23781
+ .expectRequest("SalesOrderSet('1')", createErrorResponse({
23782
+ crashBatch : true,
23783
+ message : "Service Unavailable",
23784
+ statusCode : 503,
23785
+ headers : {"retry-after" : 5},
23786
+ messageCode : "HTTP 503"
23787
+ }))
23788
+ .expectMessages([{
23789
+ code : "HTTP 503",
23790
+ message : "Service Unavailable",
23791
+ persistent : false,
23792
+ fullTarget : "/$batch",
23793
+ target : "/$batch",
23794
+ technical : true,
23795
+ type : "Error"
23796
+ }]);
23797
+ this.oLogMock.expects("error").withExactArgs("Request failed with status code 503: "
23798
+ + "POST /sap/opu/odata/sap/ZUI5_GWSAMPLE_BASIC/$batch", sinon.match.string,
23799
+ sODataMessageParserClassName);
23800
+
23801
+ // code under test
23802
+ return this.createView(assert, sView, oModel);
23803
+ });
23314
23804
  });