@openui5/sap.ui.core 1.119.1 → 1.120.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (968) hide show
  1. package/THIRDPARTY.txt +6 -6
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +40 -111
  4. package/src/jquery.sap.properties.js +7 -1
  5. package/src/jquery.sap.resources.js +1 -1
  6. package/src/jquery.sap.script.js +5 -3
  7. package/src/jquery.sap.storage.js +6 -3
  8. package/src/sap/base/Event.js +32 -78
  9. package/src/sap/base/Eventing.js +114 -271
  10. package/src/sap/base/Log.js +21 -1
  11. package/src/sap/base/config.js +14 -9
  12. package/src/sap/base/i18n/Formatting.js +400 -256
  13. package/src/sap/base/i18n/LanguageTag.js +64 -66
  14. package/src/sap/base/i18n/Localization.js +125 -87
  15. package/src/sap/base/i18n/ResourceBundle.js +1 -1
  16. package/src/sap/base/i18n/date/CalendarType.js +2 -2
  17. package/src/sap/base/i18n/date/CalendarWeekNumbering.js +2 -2
  18. package/src/sap/base/i18n/date/TimezoneUtils.js +43 -6
  19. package/src/sap/base/util/LoaderExtensions.js +8 -2
  20. package/src/sap/base/util/mixedFetch.js +1 -0
  21. package/src/sap/base/util/resolveReference.js +31 -13
  22. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  23. package/src/sap/base/util/restricted/_castArray.js +1 -1
  24. package/src/sap/base/util/restricted/_compact.js +1 -1
  25. package/src/sap/base/util/restricted/_curry.js +1 -1
  26. package/src/sap/base/util/restricted/_debounce.js +1 -1
  27. package/src/sap/base/util/restricted/_difference.js +1 -1
  28. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  29. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  30. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  31. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  32. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  33. package/src/sap/base/util/restricted/_flatten.js +1 -1
  34. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  35. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  36. package/src/sap/base/util/restricted/_intersection.js +1 -1
  37. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  38. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  39. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  40. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  41. package/src/sap/base/util/restricted/_isNil.js +1 -1
  42. package/src/sap/base/util/restricted/_max.js +1 -1
  43. package/src/sap/base/util/restricted/_merge.js +1 -1
  44. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  45. package/src/sap/base/util/restricted/_min.js +1 -1
  46. package/src/sap/base/util/restricted/_omit.js +1 -1
  47. package/src/sap/base/util/restricted/_pick.js +1 -1
  48. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  49. package/src/sap/base/util/restricted/_throttle.js +1 -1
  50. package/src/sap/base/util/restricted/_toArray.js +1 -1
  51. package/src/sap/base/util/restricted/_union.js +1 -1
  52. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  53. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  54. package/src/sap/base/util/restricted/_uniq.js +1 -1
  55. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  56. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  57. package/src/sap/base/util/restricted/_without.js +1 -1
  58. package/src/sap/base/util/restricted/_xor.js +1 -1
  59. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  60. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  61. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  62. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  63. package/src/sap/base/util/syncFetch.js +1 -0
  64. package/src/sap/ui/Device.js +3 -3
  65. package/src/sap/ui/Global.js +6 -7
  66. package/src/sap/ui/base/BindingInfo.js +3 -3
  67. package/src/sap/ui/base/BindingParser.js +5 -2
  68. package/src/sap/ui/base/DataType.js +57 -1
  69. package/src/sap/ui/base/DesignTime.js +69 -0
  70. package/src/sap/ui/base/Event.js +2 -2
  71. package/src/sap/ui/base/EventProvider.js +1 -1
  72. package/src/sap/ui/base/ExpressionParser.js +25 -4
  73. package/src/sap/ui/base/Interface.js +1 -1
  74. package/src/sap/ui/base/ManagedObject.js +102 -85
  75. package/src/sap/ui/base/ManagedObjectMetadata.js +53 -31
  76. package/src/sap/ui/base/ManagedObjectObserver.js +1 -0
  77. package/src/sap/ui/base/Metadata.js +3 -3
  78. package/src/sap/ui/base/Object.js +19 -1
  79. package/src/sap/ui/base/ObjectPool.js +1 -1
  80. package/src/sap/ui/core/.library +3 -3
  81. package/src/sap/ui/core/AnimationMode.js +2 -2
  82. package/src/sap/ui/core/AppCacheBuster.js +30 -18
  83. package/src/sap/ui/core/BusyIndicator.js +1 -1
  84. package/src/sap/ui/core/CalendarType.js +6 -0
  85. package/src/sap/ui/core/Component.js +175 -86
  86. package/src/sap/ui/core/ComponentContainer.js +6 -5
  87. package/src/sap/ui/core/ComponentMetadata.js +3 -4
  88. package/src/sap/ui/core/ComponentSupport.js +1 -1
  89. package/src/sap/ui/core/Configuration.js +395 -709
  90. package/src/sap/ui/core/Control.js +1 -1
  91. package/src/sap/ui/core/ControlBehavior.js +37 -28
  92. package/src/sap/ui/core/Core.js +338 -216
  93. package/src/sap/ui/core/CustomData.js +1 -1
  94. package/src/sap/ui/core/DeclarativeSupport.js +3 -1
  95. package/src/sap/ui/core/Element.js +24 -10
  96. package/src/sap/ui/core/ElementMetadata.js +1 -1
  97. package/src/sap/ui/core/EnabledPropagator.js +3 -2
  98. package/src/sap/ui/core/EventBus.js +1 -1
  99. package/src/sap/ui/core/Fragment.js +3 -3
  100. package/src/sap/ui/core/HTML.js +1 -1
  101. package/src/sap/ui/core/History.js +1 -1
  102. package/src/sap/ui/core/Icon.js +1 -1
  103. package/src/sap/ui/core/IndicationColorSupport.js +13 -1
  104. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  105. package/src/sap/ui/core/InvisibleMessage.js +2 -3
  106. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  107. package/src/sap/ui/core/InvisibleText.js +17 -1
  108. package/src/sap/ui/core/Item.js +1 -1
  109. package/src/sap/ui/core/LabelEnablement.js +8 -1
  110. package/src/sap/ui/core/LayoutData.js +1 -1
  111. package/src/sap/ui/core/Lib.js +253 -57
  112. package/src/sap/ui/core/ListItem.js +1 -1
  113. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  114. package/src/sap/ui/core/Locale.js +1 -1
  115. package/src/sap/ui/core/LocaleData.js +118 -32
  116. package/src/sap/ui/core/Manifest.js +4 -2
  117. package/src/sap/ui/core/Message.js +1 -1
  118. package/src/sap/ui/core/Placeholder.js +18 -0
  119. package/src/sap/ui/core/Popup.js +5 -0
  120. package/src/sap/ui/core/RenderManager.js +21 -17
  121. package/src/sap/ui/core/Renderer.js +1 -1
  122. package/src/sap/ui/core/Rendering.js +51 -47
  123. package/src/sap/ui/core/ResizeHandler.js +2 -2
  124. package/src/sap/ui/core/ScrollBar.js +1 -1
  125. package/src/sap/ui/core/SeparatorItem.js +1 -1
  126. package/src/sap/ui/core/Shortcut.js +5 -3
  127. package/src/sap/ui/core/Supportability.js +146 -0
  128. package/src/sap/ui/core/Theming.js +130 -88
  129. package/src/sap/ui/core/Title.js +1 -1
  130. package/src/sap/ui/core/TooltipBase.js +4 -3
  131. package/src/sap/ui/core/UIArea.js +5 -4
  132. package/src/sap/ui/core/UIComponent.js +38 -12
  133. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  134. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  135. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  136. package/src/sap/ui/core/XMLComposite.js +1 -1
  137. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  138. package/src/sap/ui/core/XMLTemplateProcessor.js +3 -3
  139. package/src/sap/ui/core/_IconRegistry.js +13 -6
  140. package/src/sap/ui/core/cldr/ar.json +143 -137
  141. package/src/sap/ui/core/cldr/ar_EG.json +143 -137
  142. package/src/sap/ui/core/cldr/ar_SA.json +143 -137
  143. package/src/sap/ui/core/cldr/bg.json +423 -423
  144. package/src/sap/ui/core/cldr/ca.json +541 -494
  145. package/src/sap/ui/core/cldr/cs.json +475 -364
  146. package/src/sap/ui/core/cldr/cy.json +656 -477
  147. package/src/sap/ui/core/cldr/da.json +334 -275
  148. package/src/sap/ui/core/cldr/de.json +388 -291
  149. package/src/sap/ui/core/cldr/de_AT.json +388 -291
  150. package/src/sap/ui/core/cldr/de_CH.json +394 -297
  151. package/src/sap/ui/core/cldr/el.json +169 -166
  152. package/src/sap/ui/core/cldr/el_CY.json +169 -166
  153. package/src/sap/ui/core/cldr/en.json +558 -521
  154. package/src/sap/ui/core/cldr/en_AU.json +558 -520
  155. package/src/sap/ui/core/cldr/en_GB.json +476 -439
  156. package/src/sap/ui/core/cldr/en_HK.json +520 -482
  157. package/src/sap/ui/core/cldr/en_IE.json +486 -448
  158. package/src/sap/ui/core/cldr/en_IN.json +466 -428
  159. package/src/sap/ui/core/cldr/en_NZ.json +506 -468
  160. package/src/sap/ui/core/cldr/en_PG.json +506 -468
  161. package/src/sap/ui/core/cldr/en_SG.json +506 -468
  162. package/src/sap/ui/core/cldr/en_ZA.json +486 -448
  163. package/src/sap/ui/core/cldr/es.json +473 -468
  164. package/src/sap/ui/core/cldr/es_AR.json +445 -440
  165. package/src/sap/ui/core/cldr/es_BO.json +479 -474
  166. package/src/sap/ui/core/cldr/es_CL.json +469 -464
  167. package/src/sap/ui/core/cldr/es_CO.json +387 -381
  168. package/src/sap/ui/core/cldr/es_MX.json +502 -497
  169. package/src/sap/ui/core/cldr/es_PE.json +455 -450
  170. package/src/sap/ui/core/cldr/es_UY.json +479 -474
  171. package/src/sap/ui/core/cldr/es_VE.json +499 -494
  172. package/src/sap/ui/core/cldr/et.json +378 -320
  173. package/src/sap/ui/core/cldr/fa.json +104 -104
  174. package/src/sap/ui/core/cldr/fi.json +401 -315
  175. package/src/sap/ui/core/cldr/fr.json +391 -385
  176. package/src/sap/ui/core/cldr/fr_BE.json +391 -385
  177. package/src/sap/ui/core/cldr/fr_CA.json +499 -493
  178. package/src/sap/ui/core/cldr/fr_CH.json +334 -328
  179. package/src/sap/ui/core/cldr/fr_LU.json +391 -385
  180. package/src/sap/ui/core/cldr/he.json +291 -159
  181. package/src/sap/ui/core/cldr/hi.json +157 -128
  182. package/src/sap/ui/core/cldr/hr.json +514 -461
  183. package/src/sap/ui/core/cldr/hu.json +287 -257
  184. package/src/sap/ui/core/cldr/id.json +463 -416
  185. package/src/sap/ui/core/cldr/it.json +468 -413
  186. package/src/sap/ui/core/cldr/it_CH.json +468 -413
  187. package/src/sap/ui/core/cldr/ja.json +98 -61
  188. package/src/sap/ui/core/cldr/kk.json +631 -571
  189. package/src/sap/ui/core/cldr/ko.json +79 -71
  190. package/src/sap/ui/core/cldr/lt.json +361 -270
  191. package/src/sap/ui/core/cldr/lv.json +234 -242
  192. package/src/sap/ui/core/cldr/ms.json +463 -408
  193. package/src/sap/ui/core/cldr/nb.json +176 -143
  194. package/src/sap/ui/core/cldr/nl.json +463 -393
  195. package/src/sap/ui/core/cldr/nl_BE.json +463 -393
  196. package/src/sap/ui/core/cldr/pl.json +633 -344
  197. package/src/sap/ui/core/cldr/pt.json +447 -336
  198. package/src/sap/ui/core/cldr/pt_PT.json +488 -449
  199. package/src/sap/ui/core/cldr/ro.json +477 -383
  200. package/src/sap/ui/core/cldr/ru.json +367 -332
  201. package/src/sap/ui/core/cldr/ru_UA.json +361 -326
  202. package/src/sap/ui/core/cldr/sk.json +502 -537
  203. package/src/sap/ui/core/cldr/sl.json +168 -161
  204. package/src/sap/ui/core/cldr/sr.json +276 -225
  205. package/src/sap/ui/core/cldr/sr_Latn.json +972 -907
  206. package/src/sap/ui/core/cldr/sv.json +420 -346
  207. package/src/sap/ui/core/cldr/th.json +117 -94
  208. package/src/sap/ui/core/cldr/tr.json +413 -359
  209. package/src/sap/ui/core/cldr/uk.json +395 -368
  210. package/src/sap/ui/core/cldr/vi.json +392 -379
  211. package/src/sap/ui/core/cldr/zh_CN.json +91 -33
  212. package/src/sap/ui/core/cldr/zh_HK.json +90 -32
  213. package/src/sap/ui/core/cldr/zh_SG.json +90 -32
  214. package/src/sap/ui/core/cldr/zh_TW.json +75 -51
  215. package/src/sap/ui/core/date/CalendarWeekNumbering.js +6 -0
  216. package/src/sap/ui/core/date/Islamic.js +4 -4
  217. package/src/sap/ui/core/date/UI5Date.js +1 -1
  218. package/src/sap/ui/core/date/_Calendars.js +5 -2
  219. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  220. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  221. package/src/sap/ui/core/dnd/DragAndDrop.js +3 -2
  222. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  223. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  224. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  225. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  226. package/src/sap/ui/core/format/DateFormat.js +33 -21
  227. package/src/sap/ui/core/format/NumberFormat.js +3 -2
  228. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  229. package/src/sap/ui/core/getCompatibilityVersion.js +2 -2
  230. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  231. package/src/sap/ui/core/library.js +128 -8
  232. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  233. package/src/sap/ui/core/message/Message.js +2 -2
  234. package/src/sap/ui/core/message/MessageManager.js +1 -1
  235. package/src/sap/ui/core/message/MessageParser.js +1 -1
  236. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  237. package/src/sap/ui/core/message/MessageType.js +2 -1
  238. package/src/sap/ui/core/messagebundle.properties +24 -0
  239. package/src/sap/ui/core/messagebundle_ar.properties +15 -3
  240. package/src/sap/ui/core/messagebundle_bg.properties +14 -2
  241. package/src/sap/ui/core/messagebundle_ca.properties +13 -1
  242. package/src/sap/ui/core/messagebundle_cs.properties +15 -3
  243. package/src/sap/ui/core/messagebundle_cy.properties +16 -4
  244. package/src/sap/ui/core/messagebundle_da.properties +15 -3
  245. package/src/sap/ui/core/messagebundle_de.properties +15 -3
  246. package/src/sap/ui/core/messagebundle_el.properties +16 -4
  247. package/src/sap/ui/core/messagebundle_en.properties +12 -0
  248. package/src/sap/ui/core/messagebundle_en_GB.properties +16 -4
  249. package/src/sap/ui/core/messagebundle_es.properties +15 -3
  250. package/src/sap/ui/core/messagebundle_es_MX.properties +15 -3
  251. package/src/sap/ui/core/messagebundle_et.properties +15 -3
  252. package/src/sap/ui/core/messagebundle_fi.properties +15 -3
  253. package/src/sap/ui/core/messagebundle_fr.properties +15 -3
  254. package/src/sap/ui/core/messagebundle_fr_CA.properties +14 -2
  255. package/src/sap/ui/core/messagebundle_hi.properties +16 -4
  256. package/src/sap/ui/core/messagebundle_hr.properties +14 -2
  257. package/src/sap/ui/core/messagebundle_hu.properties +16 -4
  258. package/src/sap/ui/core/messagebundle_id.properties +15 -3
  259. package/src/sap/ui/core/messagebundle_it.properties +17 -5
  260. package/src/sap/ui/core/messagebundle_iw.properties +15 -3
  261. package/src/sap/ui/core/messagebundle_ja.properties +25 -13
  262. package/src/sap/ui/core/messagebundle_kk.properties +15 -3
  263. package/src/sap/ui/core/messagebundle_ko.properties +14 -2
  264. package/src/sap/ui/core/messagebundle_lt.properties +15 -3
  265. package/src/sap/ui/core/messagebundle_lv.properties +15 -3
  266. package/src/sap/ui/core/messagebundle_mk.properties +352 -0
  267. package/src/sap/ui/core/messagebundle_ms.properties +15 -3
  268. package/src/sap/ui/core/messagebundle_nl.properties +15 -3
  269. package/src/sap/ui/core/messagebundle_no.properties +14 -2
  270. package/src/sap/ui/core/messagebundle_pl.properties +15 -3
  271. package/src/sap/ui/core/messagebundle_pt.properties +15 -3
  272. package/src/sap/ui/core/messagebundle_pt_PT.properties +14 -2
  273. package/src/sap/ui/core/messagebundle_ro.properties +15 -3
  274. package/src/sap/ui/core/messagebundle_ru.properties +15 -3
  275. package/src/sap/ui/core/messagebundle_sh.properties +43 -31
  276. package/src/sap/ui/core/messagebundle_sk.properties +16 -4
  277. package/src/sap/ui/core/messagebundle_sl.properties +15 -3
  278. package/src/sap/ui/core/messagebundle_sv.properties +22 -10
  279. package/src/sap/ui/core/messagebundle_th.properties +15 -3
  280. package/src/sap/ui/core/messagebundle_tr.properties +15 -3
  281. package/src/sap/ui/core/messagebundle_uk.properties +18 -6
  282. package/src/sap/ui/core/messagebundle_vi.properties +18 -6
  283. package/src/sap/ui/core/messagebundle_zh_CN.properties +15 -3
  284. package/src/sap/ui/core/messagebundle_zh_TW.properties +15 -3
  285. package/src/sap/ui/core/mvc/Controller.js +22 -16
  286. package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +1 -1
  287. package/src/sap/ui/core/mvc/EventHandlerResolver.js +5 -15
  288. package/src/sap/ui/core/mvc/HTMLView.js +2 -2
  289. package/src/sap/ui/core/mvc/JSONView.js +4 -1
  290. package/src/sap/ui/core/mvc/JSONViewRenderer.js +1 -0
  291. package/src/sap/ui/core/mvc/JSView.js +1 -1
  292. package/src/sap/ui/core/mvc/OverrideExecution.js +4 -4
  293. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  294. package/src/sap/ui/core/mvc/View.js +25 -15
  295. package/src/sap/ui/core/mvc/ViewType.js +2 -0
  296. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  297. package/src/sap/ui/core/plugin/DeclarativeSupport.js +2 -1
  298. package/src/sap/ui/core/plugin/LessSupport.js +3 -1
  299. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  300. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  301. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  302. package/src/sap/ui/core/routing/Router.js +2 -4
  303. package/src/sap/ui/core/routing/Target.js +1 -3
  304. package/src/sap/ui/core/routing/Targets.js +2 -3
  305. package/src/sap/ui/core/routing/Views.js +2 -3
  306. package/src/sap/ui/core/routing/async/Target.js +1 -1
  307. package/src/sap/ui/core/rules/Config.support.js +11 -17
  308. package/src/sap/ui/core/search/OpenSearchProvider.js +2 -1
  309. package/src/sap/ui/core/search/SearchProvider.js +2 -1
  310. package/src/sap/ui/core/service/Service.js +1 -1
  311. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  312. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  313. package/src/sap/ui/core/support/Hotkeys.js +5 -3
  314. package/src/sap/ui/core/support/Plugin.js +1 -1
  315. package/src/sap/ui/core/support/RuleEngineOpaExtension.js +1 -3
  316. package/src/sap/ui/core/support/Support.js +3 -5
  317. package/src/sap/ui/core/support/ToolsAPI.js +15 -11
  318. package/src/sap/ui/core/support/plugins/ControlTree.js +2 -2
  319. package/src/sap/ui/core/support/plugins/Interaction.js +4 -4
  320. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  321. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  322. package/src/sap/ui/core/support/plugins/Selector.js +7 -5
  323. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  324. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  325. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  326. package/src/sap/ui/core/support/techinfo/TechnicalInfo.js +3 -1
  327. package/src/sap/ui/core/syncStyleClass.js +2 -2
  328. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  329. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  330. package/src/sap/ui/core/themes/base/global.less +9 -9
  331. package/src/sap/ui/core/theming/Parameters.js +18 -19
  332. package/src/sap/ui/core/theming/ThemeManager.js +23 -4
  333. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  334. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  335. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  336. package/src/sap/ui/core/tmpl/Template.js +1 -1
  337. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  338. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  339. package/src/sap/ui/core/util/Export.js +1 -1
  340. package/src/sap/ui/core/util/ExportCell.js +1 -1
  341. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  342. package/src/sap/ui/core/util/ExportRow.js +1 -1
  343. package/src/sap/ui/core/util/ExportType.js +1 -1
  344. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  345. package/src/sap/ui/core/util/File.js +1 -1
  346. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  347. package/src/sap/ui/core/util/MockServer.js +1 -1
  348. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  349. package/src/sap/ui/core/util/XMLPreprocessor.js +3 -0
  350. package/src/sap/ui/core/util/_LocalizationHelper.js +122 -0
  351. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  352. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  353. package/src/sap/ui/core/util/serializer/ViewSerializer.js +4 -4
  354. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  355. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  356. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  357. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  358. package/src/sap/ui/core/webc/WebComponent.js +1 -1
  359. package/src/sap/ui/core/webc/WebComponentMetadata.js +1 -1
  360. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  361. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  362. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  363. package/src/sap/ui/debug/ControlTree.js +1 -1
  364. package/src/sap/ui/debug/DebugEnv.js +29 -7
  365. package/src/sap/ui/debug/PropertyList.js +1 -1
  366. package/src/sap/ui/model/ClientListBinding.js +9 -4
  367. package/src/sap/ui/model/ClientModel.js +1 -1
  368. package/src/sap/ui/model/ClientTreeBinding.js +9 -4
  369. package/src/sap/ui/model/CompositeDataState.js +1 -1
  370. package/src/sap/ui/model/CompositeType.js +1 -1
  371. package/src/sap/ui/model/DataState.js +2 -2
  372. package/src/sap/ui/model/Filter.js +39 -1
  373. package/src/sap/ui/model/FilterProcessor.js +15 -5
  374. package/src/sap/ui/model/ListBinding.js +5 -0
  375. package/src/sap/ui/model/ManagedObjectBindingSupport.js +4 -4
  376. package/src/sap/ui/model/MetaModel.js +1 -1
  377. package/src/sap/ui/model/Model.js +14 -8
  378. package/src/sap/ui/model/SelectionModel.js +1 -1
  379. package/src/sap/ui/model/SimpleType.js +1 -1
  380. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  381. package/src/sap/ui/model/TreeBinding.js +3 -0
  382. package/src/sap/ui/model/Type.js +1 -1
  383. package/src/sap/ui/model/analytics/AnalyticalBinding.js +3 -1
  384. package/src/sap/ui/model/json/JSONListBinding.js +3 -1
  385. package/src/sap/ui/model/json/JSONModel.js +1 -1
  386. package/src/sap/ui/model/json/JSONTreeBinding.js +3 -2
  387. package/src/sap/ui/model/message/MessageListBinding.js +3 -0
  388. package/src/sap/ui/model/message/MessageModel.js +1 -1
  389. package/src/sap/ui/model/odata/AnnotationHelper.js +9 -3
  390. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  391. package/src/sap/ui/model/odata/ODataListBinding.js +8 -2
  392. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  393. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  394. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  395. package/src/sap/ui/model/odata/ODataModel.js +9 -5
  396. package/src/sap/ui/model/odata/ODataPropertyBinding.js +1 -2
  397. package/src/sap/ui/model/odata/ODataTreeBinding.js +2 -0
  398. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +9 -14
  399. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  400. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  401. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  402. package/src/sap/ui/model/odata/type/Date.js +1 -1
  403. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  404. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  405. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  406. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +1 -1
  407. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  408. package/src/sap/ui/model/odata/type/Double.js +1 -1
  409. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  410. package/src/sap/ui/model/odata/type/Int.js +1 -1
  411. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  412. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  413. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  414. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  415. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  416. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  417. package/src/sap/ui/model/odata/type/Single.js +1 -1
  418. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  419. package/src/sap/ui/model/odata/type/String.js +1 -1
  420. package/src/sap/ui/model/odata/type/Time.js +1 -1
  421. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  422. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  423. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  424. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  425. package/src/sap/ui/model/odata/v2/ODataListBinding.js +40 -15
  426. package/src/sap/ui/model/odata/v2/ODataModel.js +26 -62
  427. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +38 -4
  428. package/src/sap/ui/model/odata/v4/Context.js +81 -7
  429. package/src/sap/ui/model/odata/v4/ODataBinding.js +3 -0
  430. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +1 -1
  431. package/src/sap/ui/model/odata/v4/ODataListBinding.js +217 -75
  432. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +2 -2
  433. package/src/sap/ui/model/odata/v4/ODataModel.js +6 -6
  434. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +1 -1
  435. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +406 -199
  436. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +12 -7
  437. package/src/sap/ui/model/odata/v4/lib/_Cache.js +53 -30
  438. package/src/sap/ui/model/odata/v4/lib/_Helper.js +6 -4
  439. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +6 -6
  440. package/src/sap/ui/model/resource/ResourceModel.js +5 -6
  441. package/src/sap/ui/model/type/Boolean.js +1 -1
  442. package/src/sap/ui/model/type/Currency.js +1 -1
  443. package/src/sap/ui/model/type/Date.js +1 -1
  444. package/src/sap/ui/model/type/DateInterval.js +1 -1
  445. package/src/sap/ui/model/type/DateTime.js +1 -1
  446. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  447. package/src/sap/ui/model/type/FileSize.js +1 -1
  448. package/src/sap/ui/model/type/Float.js +1 -1
  449. package/src/sap/ui/model/type/Integer.js +1 -1
  450. package/src/sap/ui/model/type/String.js +1 -1
  451. package/src/sap/ui/model/type/Time.js +1 -1
  452. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  453. package/src/sap/ui/model/type/Unit.js +1 -1
  454. package/src/sap/ui/model/xml/XMLListBinding.js +3 -0
  455. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  456. package/src/sap/ui/model/xml/XMLTreeBinding.js +3 -0
  457. package/src/sap/ui/performance/BeaconRequest.js +2 -2
  458. package/src/sap/ui/performance/trace/Interaction.js +20 -16
  459. package/src/sap/ui/qunit/QUnitUtils.js +64 -45
  460. package/src/sap/ui/qunit/qunit-coverage.js +6 -0
  461. package/src/sap/ui/qunit/utils/ControlIterator.js +31 -1
  462. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  463. package/src/sap/ui/security/Security.js +128 -0
  464. package/src/sap/ui/test/BlanketReporter.js +2 -3
  465. package/src/sap/ui/test/BlanketReporterUI.view.xml +1 -1
  466. package/src/sap/ui/test/BranchTracking.js +2 -3
  467. package/src/sap/ui/test/ModuleTracking.js +48 -20
  468. package/src/sap/ui/test/OpaExtension.js +3 -3
  469. package/src/sap/ui/test/OpaPlugin.js +16 -6
  470. package/src/sap/ui/test/TestUtils.js +7 -4
  471. package/src/sap/ui/test/_BrowserLogCollector.js +1 -0
  472. package/src/sap/ui/test/_ControlFinder.js +3 -2
  473. package/src/sap/ui/test/_LogCollector.js +1 -0
  474. package/src/sap/ui/test/_UsageReport.js +115 -114
  475. package/src/sap/ui/test/actions/EnterText.js +24 -2
  476. package/src/sap/ui/test/autowaiter/WaiterBase.js +1 -0
  477. package/src/sap/ui/test/autowaiter/_moduleWaiter.js +1 -2
  478. package/src/sap/ui/test/autowaiter/_timeoutWaiter.js +1 -1
  479. package/src/sap/ui/test/generic/GenericTestCollection.js +5 -0
  480. package/src/sap/ui/test/generic/TestBase.js +1 -1
  481. package/src/sap/ui/test/generic/Utils.js +1 -1
  482. package/src/sap/ui/test/matchers/LabelFor.js +2 -12
  483. package/src/sap/ui/test/matchers/Matcher.js +1 -1
  484. package/src/sap/ui/test/pipelines/PipelineFactory.js +1 -0
  485. package/src/sap/ui/test/selectors/_Selector.js +1 -1
  486. package/src/sap/ui/util/Storage.js +1 -1
  487. package/src/ui5loader-autoconfig.js +84 -11
  488. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/manifest.json +3 -10
  489. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/package.json +13 -0
  490. package/test/sap/ui/core/demokit/sample/MessageManager/ODataBackendMessagesComp/ui5.yaml +11 -0
  491. package/test/sap/ui/core/demokit/sample/RoutingNestedComponent/localService/mockserver.js +3 -4
  492. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/ChartAnnotation.fragment.xml +7 -7
  493. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Component.js +2 -3
  494. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Detail.view.xml +12 -13
  495. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Facets.fragment.xml +4 -4
  496. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Field.fragment.xml +8 -8
  497. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/FormFacet.fragment.xml +3 -5
  498. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/LabeledField.fragment.xml +3 -3
  499. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/Table.fragment.xml +10 -10
  500. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/TableFacet.fragment.xml +3 -3
  501. package/test/sap/ui/core/demokit/sample/ViewTemplate/scenario/extension/HeaderInfo.fragment.xml +1 -1
  502. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/Field.fragment.xml +2 -2
  503. package/test/sap/ui/core/demokit/sample/ViewTemplate/tiny/Template.view.xml +19 -21
  504. package/test/sap/ui/core/demokit/sample/ViewTemplate/types/TemplateV4.view.xml +2 -2
  505. package/test/sap/ui/core/demokit/sample/ViewTemplate/valuelist/Component.js +2 -3
  506. package/test/sap/ui/core/demokit/sample/common/SandboxModelHelper.js +2 -3
  507. package/test/sap/ui/core/demokit/sample/common/ValueHelp.js +2 -3
  508. package/test/sap/ui/core/demokit/sample/common/pages/Any.js +7 -8
  509. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/manifest.json +3 -11
  510. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/package.json +13 -0
  511. package/test/sap/ui/core/demokit/sample/matcher/BindingPath/ui5.yaml +11 -0
  512. package/test/sap/ui/core/demokit/sample/matcher/Descendant/Component.js +1 -1
  513. package/test/sap/ui/core/demokit/sample/matcher/Descendant/manifest.json +3 -11
  514. package/test/sap/ui/core/demokit/sample/matcher/Descendant/package.json +13 -0
  515. package/test/sap/ui/core/demokit/sample/matcher/Descendant/ui5.yaml +11 -0
  516. package/test/sap/ui/core/demokit/sample/matcher/I18NText/manifest.json +3 -11
  517. package/test/sap/ui/core/demokit/sample/matcher/I18NText/package.json +13 -0
  518. package/test/sap/ui/core/demokit/sample/matcher/I18NText/ui5.yaml +11 -0
  519. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/manifest.json +3 -11
  520. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/package.json +13 -0
  521. package/test/sap/ui/core/demokit/sample/matcher/LabelFor/ui5.yaml +11 -0
  522. package/test/sap/ui/core/demokit/sample/odata/v4/Ancestry/Main.controller.js +15 -6
  523. package/test/sap/ui/core/demokit/sample/odata/v4/DataAggregation/DataAggregation.controller.js +2 -3
  524. package/test/sap/ui/core/demokit/sample/odata/v4/FlatDataAggregation/FlatDataAggregation.controller.js +3 -4
  525. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.controller.js +39 -16
  526. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/Main.view.xml +18 -21
  527. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/data/all.json +509 -395
  528. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/data/metadata.xml +586 -422
  529. package/test/sap/ui/core/demokit/sample/odata/v4/HierarchyBindAction/manifest.json +1 -1
  530. package/test/sap/ui/core/demokit/sample/odata/v4/LateProperties/Main.controller.js +2 -3
  531. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Facets.fragment.xml +22 -23
  532. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/FormattedText.fragment.xml +2 -3
  533. package/test/sap/ui/core/demokit/sample/odata/v4/ListBindingTemplate/Main.view.xml +7 -7
  534. package/test/sap/ui/core/demokit/sample/odata/v4/MultipleInlineCreationRowsGrid/Main.controller.js +0 -3
  535. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.controller.js +54 -9
  536. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/RecursiveHierarchy.view.xml +34 -9
  537. package/test/sap/ui/core/demokit/sample/odata/v4/RecursiveHierarchy/SandboxModel.js +156 -23
  538. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrders/Main.view.xml +3 -2
  539. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Facets.fragment.xml +22 -23
  540. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/FormattedText.fragment.xml +2 -3
  541. package/test/sap/ui/core/demokit/sample/odata/v4/SalesOrdersTemplate/Main.view.xml +5 -5
  542. package/test/sap/ui/core/demokit/sample/odata/v4/ServerDrivenPaging/Main.controller.js +2 -3
  543. package/test/sap/ui/core/demokit/tutorial/databinding/01/Component.js +9 -25
  544. package/test/sap/ui/core/demokit/tutorial/databinding/01/manifest.json +20 -0
  545. package/test/sap/ui/core/demokit/tutorial/databinding/01/ui5.yaml +2 -2
  546. package/test/sap/ui/core/demokit/tutorial/databinding/01/webapp/manifest.json +5 -0
  547. package/test/sap/ui/core/demokit/tutorial/databinding/02/Component.js +9 -25
  548. package/test/sap/ui/core/demokit/tutorial/databinding/02/manifest.json +20 -0
  549. package/test/sap/ui/core/demokit/tutorial/databinding/02/ui5.yaml +2 -2
  550. package/test/sap/ui/core/demokit/tutorial/databinding/02/webapp/manifest.json +5 -0
  551. package/test/sap/ui/core/demokit/tutorial/databinding/03/Component.js +9 -25
  552. package/test/sap/ui/core/demokit/tutorial/databinding/03/manifest.json +20 -0
  553. package/test/sap/ui/core/demokit/tutorial/databinding/03/ui5.yaml +2 -2
  554. package/test/sap/ui/core/demokit/tutorial/databinding/03/webapp/manifest.json +5 -0
  555. package/test/sap/ui/core/demokit/tutorial/databinding/04/Component.js +9 -26
  556. package/test/sap/ui/core/demokit/tutorial/databinding/04/manifest.json +21 -0
  557. package/test/sap/ui/core/demokit/tutorial/databinding/04/ui5.yaml +2 -2
  558. package/test/sap/ui/core/demokit/tutorial/databinding/04/webapp/manifest.json +5 -0
  559. package/test/sap/ui/core/demokit/tutorial/databinding/05/Component.js +9 -26
  560. package/test/sap/ui/core/demokit/tutorial/databinding/05/manifest.json +21 -0
  561. package/test/sap/ui/core/demokit/tutorial/databinding/05/ui5.yaml +2 -2
  562. package/test/sap/ui/core/demokit/tutorial/databinding/05/webapp/manifest.json +5 -0
  563. package/test/sap/ui/core/demokit/tutorial/databinding/06/Component.js +9 -27
  564. package/test/sap/ui/core/demokit/tutorial/databinding/06/manifest.json +22 -0
  565. package/test/sap/ui/core/demokit/tutorial/databinding/06/ui5.yaml +2 -2
  566. package/test/sap/ui/core/demokit/tutorial/databinding/06/webapp/manifest.json +5 -0
  567. package/test/sap/ui/core/demokit/tutorial/databinding/07/Component.js +9 -28
  568. package/test/sap/ui/core/demokit/tutorial/databinding/07/manifest.json +23 -0
  569. package/test/sap/ui/core/demokit/tutorial/databinding/07/ui5.yaml +2 -2
  570. package/test/sap/ui/core/demokit/tutorial/databinding/07/webapp/manifest.json +5 -0
  571. package/test/sap/ui/core/demokit/tutorial/databinding/08/Component.js +9 -28
  572. package/test/sap/ui/core/demokit/tutorial/databinding/08/manifest.json +23 -0
  573. package/test/sap/ui/core/demokit/tutorial/databinding/08/ui5.yaml +2 -2
  574. package/test/sap/ui/core/demokit/tutorial/databinding/08/webapp/manifest.json +5 -0
  575. package/test/sap/ui/core/demokit/tutorial/databinding/09/Component.js +9 -29
  576. package/test/sap/ui/core/demokit/tutorial/databinding/09/manifest.json +24 -0
  577. package/test/sap/ui/core/demokit/tutorial/databinding/09/ui5.yaml +2 -2
  578. package/test/sap/ui/core/demokit/tutorial/databinding/09/webapp/manifest.json +5 -0
  579. package/test/sap/ui/core/demokit/tutorial/databinding/10/Component.js +9 -29
  580. package/test/sap/ui/core/demokit/tutorial/databinding/10/manifest.json +24 -0
  581. package/test/sap/ui/core/demokit/tutorial/databinding/10/ui5.yaml +2 -2
  582. package/test/sap/ui/core/demokit/tutorial/databinding/10/webapp/manifest.json +5 -0
  583. package/test/sap/ui/core/demokit/tutorial/databinding/11/Component.js +9 -29
  584. package/test/sap/ui/core/demokit/tutorial/databinding/11/manifest.json +24 -0
  585. package/test/sap/ui/core/demokit/tutorial/databinding/11/ui5.yaml +2 -2
  586. package/test/sap/ui/core/demokit/tutorial/databinding/11/webapp/manifest.json +5 -0
  587. package/test/sap/ui/core/demokit/tutorial/databinding/12/Component.js +9 -30
  588. package/test/sap/ui/core/demokit/tutorial/databinding/12/manifest.json +25 -0
  589. package/test/sap/ui/core/demokit/tutorial/databinding/12/ui5.yaml +2 -2
  590. package/test/sap/ui/core/demokit/tutorial/databinding/12/webapp/manifest.json +5 -0
  591. package/test/sap/ui/core/demokit/tutorial/databinding/13/Component.js +9 -30
  592. package/test/sap/ui/core/demokit/tutorial/databinding/13/manifest.json +25 -0
  593. package/test/sap/ui/core/demokit/tutorial/databinding/13/ui5.yaml +2 -2
  594. package/test/sap/ui/core/demokit/tutorial/databinding/13/webapp/manifest.json +5 -0
  595. package/test/sap/ui/core/demokit/tutorial/databinding/14/Component.js +9 -30
  596. package/test/sap/ui/core/demokit/tutorial/databinding/14/manifest.json +25 -0
  597. package/test/sap/ui/core/demokit/tutorial/databinding/14/ui5.yaml +2 -2
  598. package/test/sap/ui/core/demokit/tutorial/databinding/14/webapp/manifest.json +5 -0
  599. package/test/sap/ui/core/demokit/tutorial/databinding/15/Component.js +9 -32
  600. package/test/sap/ui/core/demokit/tutorial/databinding/15/manifest.json +27 -0
  601. package/test/sap/ui/core/demokit/tutorial/databinding/15/ui5.yaml +2 -2
  602. package/test/sap/ui/core/demokit/tutorial/databinding/15/webapp/manifest.json +5 -0
  603. package/test/sap/ui/core/demokit/tutorial/mockserver/01/Component.js +9 -30
  604. package/test/sap/ui/core/demokit/tutorial/mockserver/01/manifest.json +24 -0
  605. package/test/sap/ui/core/demokit/tutorial/mockserver/01/ui5.yaml +2 -2
  606. package/test/sap/ui/core/demokit/tutorial/mockserver/02/Component.js +9 -33
  607. package/test/sap/ui/core/demokit/tutorial/mockserver/02/manifest.json +27 -0
  608. package/test/sap/ui/core/demokit/tutorial/mockserver/02/ui5.yaml +2 -2
  609. package/test/sap/ui/core/demokit/tutorial/mockserver/03/Component.js +9 -33
  610. package/test/sap/ui/core/demokit/tutorial/mockserver/03/manifest.json +27 -0
  611. package/test/sap/ui/core/demokit/tutorial/mockserver/03/ui5.yaml +2 -2
  612. package/test/sap/ui/core/demokit/tutorial/mockserver/04/Component.js +9 -33
  613. package/test/sap/ui/core/demokit/tutorial/mockserver/04/manifest.json +27 -0
  614. package/test/sap/ui/core/demokit/tutorial/mockserver/04/ui5.yaml +2 -2
  615. package/test/sap/ui/core/demokit/tutorial/navigation/01/Component.js +9 -33
  616. package/test/sap/ui/core/demokit/tutorial/navigation/01/manifest.json +28 -0
  617. package/test/sap/ui/core/demokit/tutorial/navigation/01/ui5.yaml +2 -2
  618. package/test/sap/ui/core/demokit/tutorial/navigation/02/Component.js +9 -35
  619. package/test/sap/ui/core/demokit/tutorial/navigation/02/manifest.json +30 -0
  620. package/test/sap/ui/core/demokit/tutorial/navigation/02/ui5.yaml +2 -2
  621. package/test/sap/ui/core/demokit/tutorial/navigation/03/Component.js +9 -37
  622. package/test/sap/ui/core/demokit/tutorial/navigation/03/manifest.json +32 -0
  623. package/test/sap/ui/core/demokit/tutorial/navigation/03/ui5.yaml +2 -2
  624. package/test/sap/ui/core/demokit/tutorial/navigation/04/Component.js +9 -38
  625. package/test/sap/ui/core/demokit/tutorial/navigation/04/manifest.json +33 -0
  626. package/test/sap/ui/core/demokit/tutorial/navigation/04/ui5.yaml +2 -2
  627. package/test/sap/ui/core/demokit/tutorial/navigation/05/Component.js +9 -38
  628. package/test/sap/ui/core/demokit/tutorial/navigation/05/manifest.json +33 -0
  629. package/test/sap/ui/core/demokit/tutorial/navigation/05/ui5.yaml +2 -2
  630. package/test/sap/ui/core/demokit/tutorial/navigation/06/Component.js +9 -40
  631. package/test/sap/ui/core/demokit/tutorial/navigation/06/manifest.json +35 -0
  632. package/test/sap/ui/core/demokit/tutorial/navigation/06/ui5.yaml +2 -2
  633. package/test/sap/ui/core/demokit/tutorial/navigation/07/Component.js +9 -42
  634. package/test/sap/ui/core/demokit/tutorial/navigation/07/manifest.json +37 -0
  635. package/test/sap/ui/core/demokit/tutorial/navigation/07/ui5.yaml +2 -2
  636. package/test/sap/ui/core/demokit/tutorial/navigation/08/Component.js +9 -45
  637. package/test/sap/ui/core/demokit/tutorial/navigation/08/manifest.json +40 -0
  638. package/test/sap/ui/core/demokit/tutorial/navigation/08/ui5.yaml +2 -2
  639. package/test/sap/ui/core/demokit/tutorial/navigation/09/Component.js +9 -45
  640. package/test/sap/ui/core/demokit/tutorial/navigation/09/manifest.json +40 -0
  641. package/test/sap/ui/core/demokit/tutorial/navigation/09/ui5.yaml +2 -2
  642. package/test/sap/ui/core/demokit/tutorial/navigation/10/Component.js +9 -47
  643. package/test/sap/ui/core/demokit/tutorial/navigation/10/manifest.json +42 -0
  644. package/test/sap/ui/core/demokit/tutorial/navigation/10/ui5.yaml +2 -2
  645. package/test/sap/ui/core/demokit/tutorial/navigation/11/Component.js +9 -52
  646. package/test/sap/ui/core/demokit/tutorial/navigation/11/manifest.json +47 -0
  647. package/test/sap/ui/core/demokit/tutorial/navigation/11/ui5.yaml +2 -2
  648. package/test/sap/ui/core/demokit/tutorial/navigation/12/Component.js +9 -52
  649. package/test/sap/ui/core/demokit/tutorial/navigation/12/manifest.json +47 -0
  650. package/test/sap/ui/core/demokit/tutorial/navigation/12/ui5.yaml +2 -2
  651. package/test/sap/ui/core/demokit/tutorial/navigation/13/Component.js +9 -52
  652. package/test/sap/ui/core/demokit/tutorial/navigation/13/manifest.json +47 -0
  653. package/test/sap/ui/core/demokit/tutorial/navigation/13/ui5.yaml +2 -2
  654. package/test/sap/ui/core/demokit/tutorial/navigation/14/Component.js +9 -52
  655. package/test/sap/ui/core/demokit/tutorial/navigation/14/manifest.json +47 -0
  656. package/test/sap/ui/core/demokit/tutorial/navigation/14/ui5.yaml +2 -2
  657. package/test/sap/ui/core/demokit/tutorial/navigation/15/Component.js +9 -52
  658. package/test/sap/ui/core/demokit/tutorial/navigation/15/manifest.json +47 -0
  659. package/test/sap/ui/core/demokit/tutorial/navigation/15/ui5.yaml +2 -2
  660. package/test/sap/ui/core/demokit/tutorial/navigation/16/Component.js +9 -52
  661. package/test/sap/ui/core/demokit/tutorial/navigation/16/manifest.json +47 -0
  662. package/test/sap/ui/core/demokit/tutorial/navigation/16/ui5.yaml +2 -2
  663. package/test/sap/ui/core/demokit/tutorial/navigation/17/Component.js +9 -52
  664. package/test/sap/ui/core/demokit/tutorial/navigation/17/manifest.json +47 -0
  665. package/test/sap/ui/core/demokit/tutorial/navigation/17/ui5.yaml +2 -2
  666. package/test/sap/ui/core/demokit/tutorial/odatav4/01/Component.js +3 -27
  667. package/test/sap/ui/core/demokit/tutorial/odatav4/01/manifest.json +28 -0
  668. package/test/sap/ui/core/demokit/tutorial/odatav4/01/ui5.yaml +2 -2
  669. package/test/sap/ui/core/demokit/tutorial/odatav4/02/Component.js +3 -27
  670. package/test/sap/ui/core/demokit/tutorial/odatav4/02/manifest.json +28 -0
  671. package/test/sap/ui/core/demokit/tutorial/odatav4/02/ui5.yaml +2 -2
  672. package/test/sap/ui/core/demokit/tutorial/odatav4/03/Component.js +3 -27
  673. package/test/sap/ui/core/demokit/tutorial/odatav4/03/manifest.json +28 -0
  674. package/test/sap/ui/core/demokit/tutorial/odatav4/03/ui5.yaml +2 -2
  675. package/test/sap/ui/core/demokit/tutorial/odatav4/04/Component.js +3 -27
  676. package/test/sap/ui/core/demokit/tutorial/odatav4/04/manifest.json +28 -0
  677. package/test/sap/ui/core/demokit/tutorial/odatav4/04/ui5.yaml +2 -2
  678. package/test/sap/ui/core/demokit/tutorial/odatav4/05/Component.js +3 -27
  679. package/test/sap/ui/core/demokit/tutorial/odatav4/05/manifest.json +28 -0
  680. package/test/sap/ui/core/demokit/tutorial/odatav4/05/ui5.yaml +2 -2
  681. package/test/sap/ui/core/demokit/tutorial/odatav4/06/Component.js +3 -27
  682. package/test/sap/ui/core/demokit/tutorial/odatav4/06/manifest.json +28 -0
  683. package/test/sap/ui/core/demokit/tutorial/odatav4/06/ui5.yaml +2 -2
  684. package/test/sap/ui/core/demokit/tutorial/odatav4/07/Component.js +3 -27
  685. package/test/sap/ui/core/demokit/tutorial/odatav4/07/manifest.json +28 -0
  686. package/test/sap/ui/core/demokit/tutorial/odatav4/07/ui5.yaml +2 -2
  687. package/test/sap/ui/core/demokit/tutorial/odatav4/08/Component.js +3 -27
  688. package/test/sap/ui/core/demokit/tutorial/odatav4/08/manifest.json +28 -0
  689. package/test/sap/ui/core/demokit/tutorial/odatav4/08/ui5.yaml +2 -2
  690. package/test/sap/ui/core/demokit/tutorial/odatav4/09/Component.js +3 -27
  691. package/test/sap/ui/core/demokit/tutorial/odatav4/09/manifest.json +28 -0
  692. package/test/sap/ui/core/demokit/tutorial/odatav4/09/ui5.yaml +2 -2
  693. package/test/sap/ui/core/demokit/tutorial/odatav4/10/Component.js +3 -27
  694. package/test/sap/ui/core/demokit/tutorial/odatav4/10/manifest.json +28 -0
  695. package/test/sap/ui/core/demokit/tutorial/odatav4/10/ui5.yaml +2 -2
  696. package/test/sap/ui/core/demokit/tutorial/odatav4/11/Component.js +3 -27
  697. package/test/sap/ui/core/demokit/tutorial/odatav4/11/manifest.json +28 -0
  698. package/test/sap/ui/core/demokit/tutorial/odatav4/11/ui5.yaml +2 -2
  699. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/Component.js +9 -29
  700. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/manifest.json +25 -0
  701. package/test/sap/ui/core/demokit/tutorial/troubleshooting/01/ui5.yaml +2 -2
  702. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Component.js +2 -3
  703. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/Main.view.xml +1 -1
  704. package/test/sap/ui/core/internal/samples/odata/v2/SalesOrders/SandboxModel.js +2 -3
  705. package/test/sap/ui/core/qunit/ClientModel.qunit.js +28 -28
  706. package/test/sap/ui/core/qunit/CompositeBinding.qunit.js +18 -0
  707. package/test/sap/ui/core/qunit/ControlRenderer.qunit.js +4 -3
  708. package/test/sap/ui/core/qunit/Core.qunit.js +5 -14
  709. package/test/sap/ui/core/qunit/Core_libraryPreloadFiles.qunit.js +4 -4
  710. package/test/sap/ui/core/qunit/Core_libraryPreloadFiles_unavoidablyUsingEval.qunit.js +6 -6
  711. package/test/sap/ui/core/qunit/Core_unavoidablyUsingEval.qunit.js +31 -30
  712. package/test/sap/ui/core/qunit/DataState.qunit.js +7 -4
  713. package/test/sap/ui/core/qunit/DuplicateIds.qunit.js +3 -0
  714. package/test/sap/ui/core/qunit/DuplicateIds_noError.qunit.js +4 -0
  715. package/test/sap/ui/core/qunit/Element_metadata_renderer.qunit.js +6 -0
  716. package/test/sap/ui/core/qunit/ExpressionParser.qunit.js +144 -85
  717. package/test/sap/ui/core/qunit/HTML.qunit.js +87 -84
  718. package/test/sap/ui/core/qunit/InvisibleText.qunit.js +22 -1
  719. package/test/sap/ui/core/qunit/LRUPersistentCache.qunit.js +4 -4
  720. package/test/sap/ui/core/qunit/Lib.qunit.js +64 -1
  721. package/test/sap/ui/core/qunit/ListBinding.qunit.js +14 -1
  722. package/test/sap/ui/core/qunit/ManagedObject.qunit.js +90 -4
  723. package/test/sap/ui/core/qunit/ManagedObjectMetadata.qunit.js +41 -40
  724. package/test/sap/ui/core/qunit/ManagedObjectModel.qunit.js +2 -1
  725. package/test/sap/ui/core/qunit/{ManagedObject_noBoot.qunit.js → ManagedObject_BindingParser.qunit.js} +10 -9
  726. package/test/sap/ui/core/qunit/Object.qunit.js +36 -0
  727. package/test/sap/ui/core/qunit/RenderManager.qunit.js +86 -94
  728. package/test/sap/ui/core/qunit/ShortcutHints.qunit.js +11 -97
  729. package/test/sap/ui/core/qunit/StaticBinding.qunit.js +3 -0
  730. package/test/sap/ui/core/qunit/UIArea.qunit.js +34 -35
  731. package/test/sap/ui/core/qunit/analytics/AnalyticalTreeBindingAdapter.qunit.js +3 -0
  732. package/test/sap/ui/core/qunit/analytics/ODataModelAdapter.qunit.js +3 -0
  733. package/test/sap/ui/core/qunit/analytics/odata4analytics.qunit.js +3 -0
  734. package/test/sap/ui/core/qunit/app/DesignMode_controllerDeactivated.qunit.js +5 -6
  735. package/test/sap/ui/core/qunit/app/DesignMode_suppressedDeactivation.qunit.js +5 -6
  736. package/test/sap/ui/core/qunit/app/MessageListBinding.qunit.js +3 -0
  737. package/test/sap/ui/core/qunit/app/_createDesignModeTests_legacyAPIs.qunit.js +8 -10
  738. package/test/sap/ui/core/qunit/base/Config_cascade.qunit.js +2 -2
  739. package/test/sap/ui/core/qunit/base/i18n/Formatting.qunit.js +49 -30
  740. package/test/sap/ui/core/qunit/base/i18n/ResourceBundle.qunit.js +123 -10
  741. package/test/sap/ui/core/qunit/base/util/resolveReference.qunit.js +9 -0
  742. package/test/sap/ui/core/qunit/base/util/testdata/MyModule.js +5 -0
  743. package/test/sap/ui/core/qunit/bootstrap/BootstrapCustomBootTaskPreloadCss.beforeBootstrap.qunit.js +4 -2
  744. package/test/sap/ui/core/qunit/bootstrap/BootstrapMinimal.qunit.html +1 -0
  745. package/test/sap/ui/core/qunit/bootstrap/BootstrapPreload.qunit.js +9 -10
  746. package/test/sap/ui/core/qunit/bootstrap/BootstrapPreload_legacyAPIs.qunit.js +0 -2
  747. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithinBody.qunit.html +2 -1
  748. package/test/sap/ui/core/qunit/bootstrap/BootstrapWithinHead.qunit.html +2 -1
  749. package/test/sap/ui/core/qunit/bootstrap/Configuration.qunit.js +122 -266
  750. package/test/sap/ui/core/qunit/bootstrap/ConfigurationFlexibility_LibConfigured.qunit.html +22 -0
  751. package/test/sap/ui/core/qunit/bootstrap/ConfigurationFlexibility_LibConfigured.qunit.js +22 -0
  752. package/test/sap/ui/core/qunit/bootstrap/ConfigurationFlexibility_LibLoaded.qunit.html +22 -0
  753. package/test/sap/ui/core/qunit/bootstrap/ConfigurationFlexibility_LibLoaded.qunit.js +16 -0
  754. package/test/sap/ui/core/qunit/bootstrap/ConfigurationFlexibility_LibNotLoaded.qunit.html +22 -0
  755. package/test/sap/ui/core/qunit/bootstrap/ConfigurationFlexibility_LibNotLoaded.qunit.js +14 -0
  756. package/test/sap/ui/core/qunit/bootstrap/ControlBehavior.qunit.js +110 -0
  757. package/test/sap/ui/core/qunit/bootstrap/PreloadCfg.qunit.js +4 -3
  758. package/test/sap/ui/core/qunit/bootstrap/ResourceRoot_ResourcesURL_Standard.qunit.html +1 -1
  759. package/test/sap/ui/core/qunit/bootstrap/ThemeVersion.beforeBootstrap.qunit.js +2 -3
  760. package/test/sap/ui/core/qunit/bootstrap/_checkCoreAndLibraryBooted.qunit.js +39 -34
  761. package/test/sap/ui/core/qunit/bootstrap/_checkCoreAndLibraryBooted_legacyAPIs.qunit.js +5 -1
  762. package/test/sap/ui/core/qunit/bootstrap/testsuite.bootstrap.qunit.js +51 -15
  763. package/test/sap/ui/core/qunit/compat_legacyAPIs/jquery-compat.qunit.html +23 -0
  764. package/test/sap/ui/core/qunit/compat_legacyAPIs/jquery-compat.qunit.js +1 -1
  765. package/test/sap/ui/core/qunit/compat_legacyAPIs/jquery.sap.stubs.qunit.js +16 -20
  766. package/test/sap/ui/core/qunit/compat_legacyAPIs/testsuite.compat.qunit.js +1 -4
  767. package/test/sap/ui/core/qunit/component/Component.qunit.js +100 -7
  768. package/test/sap/ui/core/qunit/component/Models.qunit.js +3 -1
  769. package/test/sap/ui/core/qunit/component/Preloading.qunit.js +8 -12
  770. package/test/sap/ui/core/qunit/component/UIComponent.qunit.js +8 -2
  771. package/test/sap/ui/core/qunit/component/testdata/routerPreloading/Component.js +23 -0
  772. package/test/sap/ui/core/qunit/component/testdata/routerPreloading/Main.view.xml +8 -0
  773. package/test/sap/ui/core/qunit/component/testdata/routerPreloading/manifest.json +34 -0
  774. package/test/sap/ui/core/qunit/component/testdata/targetsPreloading/Component.js +23 -0
  775. package/test/sap/ui/core/qunit/component/testdata/targetsPreloading/Main.view.xml +8 -0
  776. package/test/sap/ui/core/qunit/component/testdata/targetsPreloading/manifest.json +28 -0
  777. package/test/sap/ui/core/qunit/date/_Calendars.qunit.js +52 -0
  778. package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaks.qunit.js +18 -0
  779. package/test/sap/ui/core/qunit/generic/legacy/ControlMemoryLeaksUsingIterator.qunit.js +3 -4
  780. package/test/sap/ui/core/qunit/generic/legacy/DuplicateIdCheck.qunit.js +18 -0
  781. package/test/sap/ui/core/qunit/generic/legacy/SettersContextReturn.qunit.js +15 -0
  782. package/test/sap/ui/core/qunit/generic/testsuite.generic.qunit.js +21 -0
  783. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessAmbiguous.js +2 -3
  784. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessDuplicate.js +2 -3
  785. package/test/sap/ui/core/qunit/gherkin/fixture/testHarnessFailing.js +2 -3
  786. package/test/sap/ui/core/qunit/gherkin/opa5TestHarness.qunit.html +16 -0
  787. package/test/sap/ui/core/qunit/gherkin/opa5TestHarness.qunit.js +1 -1
  788. package/test/sap/ui/core/qunit/gherkin/qUnitTestHarness.qunit.html +16 -0
  789. package/test/sap/ui/core/qunit/gherkin/qUnitTestHarness.qunit.js +1 -1
  790. package/test/sap/ui/core/qunit/gherkin/testsuite.gherkin.qunit.js +3 -2
  791. package/test/sap/ui/core/qunit/i18n/Buddhist.qunit.js +3 -0
  792. package/test/sap/ui/core/qunit/i18n/GenericLocaleData.qunit.js +217 -114
  793. package/test/sap/ui/core/qunit/i18n/Islamic.qunit.js +7 -4
  794. package/test/sap/ui/core/qunit/i18n/Japanese.qunit.js +3 -0
  795. package/test/sap/ui/core/qunit/i18n/LocaleData.qunit.js +341 -7
  796. package/test/sap/ui/core/qunit/i18n/Persian.qunit.js +3 -0
  797. package/test/sap/ui/core/qunit/i18n/UniversalDate.qunit.js +3 -0
  798. package/test/sap/ui/core/qunit/i18n/UniversalDateUtils.qunit.js +10 -1
  799. package/test/sap/ui/core/qunit/i18n/helper/_timezones.js +17 -11
  800. package/test/sap/ui/core/qunit/i18n/testsuite.i18n.qunit.js +7 -1
  801. package/test/sap/ui/core/qunit/internal/1Ring.qunit.html +5 -1
  802. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.html +2 -2
  803. package/test/sap/ui/core/qunit/internal/1RingModels.qunit.js +1 -0
  804. package/test/sap/ui/core/qunit/internal/AnnotationParser.qunit.html +1 -2
  805. package/test/sap/ui/core/qunit/internal/ODataV4.qunit.html +6 -1
  806. package/test/sap/ui/core/qunit/internal/testsuite.feature-odata-v4.qunit.js +2 -1
  807. package/test/sap/ui/core/qunit/jquery.sap.global-config.qunit.html +24 -0
  808. package/test/sap/ui/core/qunit/jquery.sap.global-config.qunit.js +12 -6
  809. package/test/sap/ui/core/qunit/jquery.sap.global-config_beforeBootstrap.qunit.js +1 -1
  810. package/test/sap/ui/core/qunit/json/JSONListBinding.qunit.js +30 -0
  811. package/test/sap/ui/core/qunit/loader/exposeAsAMDLoader.qunit.html +1 -0
  812. package/test/sap/ui/core/qunit/model/Binding.qunit.js +3 -0
  813. package/test/sap/ui/core/qunit/model/ClientListBinding.qunit.js +5 -2
  814. package/test/sap/ui/core/qunit/model/ClientPropertyBinding.qunit.js +3 -0
  815. package/test/sap/ui/core/qunit/model/ClientTreeBinding.qunit.js +5 -2
  816. package/test/sap/ui/core/qunit/model/ClientTreeBindingAdapter.qunit.js +6 -0
  817. package/test/sap/ui/core/qunit/model/CompositeDataState.qunit.js +3 -0
  818. package/test/sap/ui/core/qunit/model/Context.qunit.js +3 -0
  819. package/test/sap/ui/core/qunit/model/ContextBinding.qunit.js +3 -0
  820. package/test/sap/ui/core/qunit/model/Filter.qunit.js +49 -0
  821. package/test/sap/ui/core/qunit/model/FilterProcessor.qunit.js +68 -1
  822. package/test/sap/ui/core/qunit/model/ListBinding.qunit.js +23 -5
  823. package/test/sap/ui/core/qunit/model/Model.qunit.js +46 -2
  824. package/test/sap/ui/core/qunit/model/PropertyBinding.qunit.js +3 -0
  825. package/test/sap/ui/core/qunit/model/Sorter.qunit.js +3 -0
  826. package/test/sap/ui/core/qunit/model/TreeBinding.qunit.js +43 -3
  827. package/test/sap/ui/core/qunit/model/TreeBindingAdapter.qunit.js +3 -0
  828. package/test/sap/ui/core/qunit/mvc/Controller.qunit.js +107 -93
  829. package/test/sap/ui/core/qunit/mvc/View.qunit.js +3 -0
  830. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessor.qunit.js +17 -14
  831. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorAsync.qunit.js +23 -12
  832. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML.qunit.js +29 -82
  833. package/test/sap/ui/core/qunit/mvc/XMLTemplateProcessorRequireXML_unavoidablySync.qunit.js +123 -0
  834. package/test/sap/ui/core/qunit/mvc/extensions/Controllerextensions.qunit.js +4 -0
  835. package/test/sap/ui/core/qunit/mvc/extensions/Controllerextensions_legacy.qunit.js +4 -0
  836. package/test/sap/ui/core/qunit/mvc/testsuite.mvc.qunit.js +16 -0
  837. package/test/sap/ui/core/qunit/mvc/viewprocessing/ViewProcessing.qunit.js +408 -419
  838. package/test/sap/ui/core/qunit/odata/AnnotationHelper.qunit.js +6 -4
  839. package/test/sap/ui/core/qunit/odata/ODataAnnotations.qunit.js +16 -0
  840. package/test/sap/ui/core/qunit/odata/ODataMetaModel.qunit.js +8 -1
  841. package/test/sap/ui/core/qunit/odata/ODataModel_legacyAPIs.qunit.js +22 -22
  842. package/test/sap/ui/core/qunit/odata/ODataTreeBindingAdapter.qunit.js +1 -1
  843. package/test/sap/ui/core/qunit/odata/ODataUtils.qunit.js +5 -1
  844. package/test/sap/ui/core/qunit/odata/type/DateTimeBase.qunit.js +4 -4
  845. package/test/sap/ui/core/qunit/odata/type/DateTimeWithTimezone.qunit.js +6 -6
  846. package/test/sap/ui/core/qunit/odata/type/Time.qunit.js +3 -4
  847. package/test/sap/ui/core/qunit/odata/type/TimeOfDay.qunit.js +4 -4
  848. package/test/sap/ui/core/qunit/odata/v2/ODataListBindingNoFakeService.qunit.js +52 -29
  849. package/test/sap/ui/core/qunit/odata/v2/ODataModel.integration.qunit.js +952 -292
  850. package/test/sap/ui/core/qunit/odata/v2/ODataModelNoFakeService.qunit.js +8 -15
  851. package/test/sap/ui/core/qunit/odata/v2/ODataPropertyBindingNoFakeService.qunit.js +6 -7
  852. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingFlatNoFakeService.qunit.js +215 -1
  853. package/test/sap/ui/core/qunit/odata/v2/ODataTreeBindingNoFakeService.qunit.js +211 -20
  854. package/test/sap/ui/core/qunit/odata/v2/ODataV2Model.qunit.js +32 -36
  855. package/test/sap/ui/core/qunit/odata/v2/V2ODataModelDataState.qunit.js +3 -2
  856. package/test/sap/ui/core/qunit/odata/v4/Context.qunit.js +69 -2
  857. package/test/sap/ui/core/qunit/odata/v4/ODataBinding.qunit.js +19 -9
  858. package/test/sap/ui/core/qunit/odata/v4/ODataListBinding.qunit.js +601 -99
  859. package/test/sap/ui/core/qunit/odata/v4/ODataMetaModel.qunit.js +5 -5
  860. package/test/sap/ui/core/qunit/odata/v4/ODataModel.integration.qunit.js +1896 -407
  861. package/test/sap/ui/core/qunit/odata/v4/ODataModel.qunit.js +7 -5
  862. package/test/sap/ui/core/qunit/odata/v4/ODataModel.realOData.qunit.js +4 -4
  863. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationCache.qunit.js +909 -422
  864. package/test/sap/ui/core/qunit/odata/v4/lib/_AggregationHelper.qunit.js +21 -6
  865. package/test/sap/ui/core/qunit/odata/v4/lib/_Cache.qunit.js +104 -33
  866. package/test/sap/ui/core/qunit/odata/v4/lib/_Helper.qunit.js +8 -0
  867. package/test/sap/ui/core/qunit/odata/v4/lib/_MetadataRequestor.qunit.js +4 -4
  868. package/test/sap/ui/core/qunit/odata/v4/lib/_Requestor.qunit.js +9 -9
  869. package/test/sap/ui/core/qunit/odata/v4/lib/_V2MetadataConverter.qunit.js +3 -3
  870. package/test/sap/ui/core/qunit/odata/v4/lib/_V4MetadataConverter.qunit.js +3 -3
  871. package/test/sap/ui/core/qunit/opa/OpaPlugin.qunit.js +16 -0
  872. package/test/sap/ui/core/qunit/opa/_LogCollector.qunit.js +17 -9
  873. package/test/sap/ui/core/qunit/opa/actions/EnterText.qunit.js +66 -3
  874. package/test/sap/ui/core/qunit/opa/autowaiter/_cssAnimationWaiter.js +3 -3
  875. package/test/sap/ui/core/qunit/opa/autowaiter/_cssTransitionWaiter.js +3 -3
  876. package/test/sap/ui/core/qunit/opa/autowaiter/_jsAnimationWaiter.js +3 -3
  877. package/test/sap/ui/core/qunit/opa/autowaiter/_timeoutWaiter.js +11 -0
  878. package/test/sap/ui/core/qunit/opa/fixture/miniUI5Site.js +14 -8
  879. package/test/sap/ui/core/qunit/opa/fixture/uncaughtError.js +18 -12
  880. package/test/sap/ui/core/qunit/performance/BeaconRequest.qunit.js +18 -2
  881. package/test/sap/ui/core/qunit/performance/trace/FESR.qunit.js +11 -2
  882. package/test/sap/ui/core/qunit/performance/trace/Interaction.qunit.js +4 -7
  883. package/test/sap/ui/core/qunit/resource/ResourceBinding.qunit.js +1 -0
  884. package/test/sap/ui/core/qunit/resource/ResourceModel.qunit.js +5 -4
  885. package/test/sap/ui/core/qunit/routing/async/Target.qunit.js +20 -18
  886. package/test/sap/ui/core/qunit/routing/async/Targets.qunit.js +1 -4
  887. package/test/sap/ui/core/qunit/routing/fixture/routingConfig/Component.js +2 -25
  888. package/test/sap/ui/core/qunit/routing/fixture/routingConfig/manifest.json +28 -0
  889. package/test/sap/ui/core/qunit/rule/misc/silentEventBus.qunit.js +1 -2
  890. package/test/sap/ui/core/qunit/testdata/libraries/scenario11/lib1/library.js +11 -0
  891. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib1/library-preload.js +3 -1
  892. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib1/library.js +3 -1
  893. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib2/library-preload.js +3 -1
  894. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib2/library.js +3 -1
  895. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib3/library-preload.js +2 -1
  896. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib3/library.js +2 -1
  897. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib5/library-preload.js +2 -1
  898. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib5/library.js +2 -1
  899. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib6/library-preload.js +2 -1
  900. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib6/library.js +2 -1
  901. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib8/library-preload.js +2 -1
  902. package/test/sap/ui/core/qunit/testdata/libraries/scenario14/lib8/library.js +2 -1
  903. package/test/sap/ui/core/qunit/testdata/libraries/terminologies/integration/lib/library-preload.js +1 -1
  904. package/test/sap/ui/core/qunit/testdata/shortcutHints/Component.js +9 -0
  905. package/test/sap/ui/core/qunit/testdata/shortcutHints/RootView.controller.js +8 -0
  906. package/test/sap/ui/core/qunit/testdata/shortcutHints/RootView.view.xml +16 -0
  907. package/test/sap/ui/core/qunit/testdata/shortcutHints/lib/MyControl.js +27 -0
  908. package/test/sap/ui/core/qunit/testdata/shortcutHints/manifest.json +26 -0
  909. package/test/sap/ui/core/qunit/testdata/uilib-custom-theme-fallback/library.js +4 -5
  910. package/test/sap/ui/core/qunit/testdata/uilib-failing-css-import/library.js +5 -6
  911. package/test/sap/ui/core/qunit/testdata/xml-require/view/XMLTemplateProcessorAsync_require_expression.controller.js +2 -1
  912. package/test/sap/ui/core/qunit/testdata/xml-require/view/XMLTemplateProcessorAsync_require_expression.view.xml +18 -1
  913. package/test/sap/ui/core/qunit/testsuite.core.framework.qunit.js +3 -0
  914. package/test/sap/ui/core/qunit/testsuites/testsuite.control.framework.qunit.js +0 -4
  915. package/test/sap/ui/core/qunit/testsuites/testsuite.foundation.enablement.qunit.js +6 -1
  916. package/test/sap/ui/core/qunit/testsuites/testsuite.managed.object.qunit.js +4 -1
  917. package/test/sap/ui/core/qunit/testsuites/testsuite.modular.core.qunit.js +1 -1
  918. package/test/sap/ui/core/qunit/testsuites/testsuite.security.qunit.js +3 -9
  919. package/test/sap/ui/core/qunit/types/DataType.qunit.js +14 -3
  920. package/test/sap/ui/core/qunit/types/Date.qunit.js +3 -0
  921. package/test/sap/ui/core/qunit/types/DateFormat.qunit.js +391 -147
  922. package/test/sap/ui/core/qunit/types/DateFormatTimezones.qunit.js +32 -29
  923. package/test/sap/ui/core/qunit/types/DateInterval.qunit.js +7 -4
  924. package/test/sap/ui/core/qunit/types/FileSizeFormat.qunit.js +5 -1
  925. package/test/sap/ui/core/qunit/types/ListFormat.qunit.js +3 -0
  926. package/test/sap/ui/core/qunit/types/NumberFormat.qunit.js +4 -3
  927. package/test/sap/ui/core/qunit/types/NumberFormatCurrencies.qunit.js +5 -4
  928. package/test/sap/ui/core/qunit/types/NumberFormatCurrenciesTrailing.qunit.js +4 -3
  929. package/test/sap/ui/core/qunit/types/SimpleType.qunit.js +3 -0
  930. package/test/sap/ui/core/qunit/types/TimezoneUtil.qunit.js +23 -0
  931. package/test/sap/ui/core/qunit/types/Types.qunit.js +44 -10
  932. package/test/sap/ui/core/qunit/types/testsuite.types.qunit.js +3 -0
  933. package/test/sap/ui/core/qunit/util/InvisibleMessage.qunit.js +4 -4
  934. package/test/sap/ui/core/qunit/util/XMLPreprocessor.qunit.js +592 -83
  935. package/test/sap/ui/core/qunit/util/beforeBootstrap/jQuery.sap.FrameOptions-allowlist.js +7 -0
  936. package/test/sap/ui/core/qunit/util/beforeBootstrap/jQuery.sap.FrameOptions-frameOptions.js +7 -0
  937. package/test/sap/ui/core/qunit/{bootstrap/CfgFromGlobalObject.qunit.html → util/jQuery.sap.FrameOptions-meta-tag-override-mode.qunit.html} +7 -11
  938. package/test/sap/ui/core/qunit/util/jQuery.sap.FrameOptions-meta-tag-override-mode.qunit.js +3 -4
  939. package/test/sap/ui/core/qunit/util/jQuery.sap.FrameOptions-meta-tag-override-service.qunit.html +26 -0
  940. package/test/sap/ui/core/qunit/util/jQuery.sap.FrameOptions-meta-tag-override-service.qunit.js +3 -4
  941. package/test/sap/ui/core/qunit/{bootstrap/CfgDefaults.qunit.html → util/jQuery.sap.FrameOptions-meta-tag.qunit.html} +5 -8
  942. package/test/sap/ui/core/qunit/util/jQuery.sap.FrameOptions-meta-tag.qunit.js +3 -4
  943. package/test/sap/ui/core/qunit/util/jQuery.sap.Version.qunit.js +10 -10
  944. package/test/sap/ui/core/qunit/util/jquery.sap.logger.qunit.html +18 -0
  945. package/test/sap/ui/core/qunit/util/jquery.sap.resources.qunit.js +1 -1
  946. package/test/sap/ui/core/qunit/util/testsuite.util.qunit.js +1 -3
  947. package/test/sap/ui/core/qunit/xml/XMLListBinding.qunit.js +3 -0
  948. package/test/sap/ui/core/qunit/xml/XMLModel.qunit.js +3 -0
  949. package/test/sap/ui/core/qunit/xml/XMLPropertyBinding.qunit.js +3 -0
  950. package/test/sap/ui/core/qunit/xml/XMLTreeBinding.qunit.js +3 -0
  951. package/test/sap/ui/core/relnotes/changes-1.119.json +1 -12
  952. package/test/sap/ui/core/relnotes/changes-1.120.json +442 -0
  953. package/test/sap/ui/core/terminologies/App.controller.js +2 -3
  954. package/test/sap/ui/core/terminologies/main.js +2 -3
  955. package/test/sap/ui/test/qunit/TestUtils.qunit.js +3 -3
  956. package/src/sap/ui/core/ConfigTest.js +0 -17
  957. package/src/sap/ui/core/_ConfigurationProvider.js +0 -187
  958. package/test/sap/ui/core/ComponentExtensibility_CustomizingDisabled.html +0 -57
  959. package/test/sap/ui/core/qunit/bootstrap/CfgDefaults.qunit.js +0 -71
  960. package/test/sap/ui/core/qunit/bootstrap/CfgFromConfigAttribute.qunit.html +0 -29
  961. package/test/sap/ui/core/qunit/bootstrap/CfgFromConfigAttribute.qunit.js +0 -40
  962. package/test/sap/ui/core/qunit/bootstrap/CfgFromGlobalObject.beforeBootstrap.qunit.js +0 -20
  963. package/test/sap/ui/core/qunit/bootstrap/CfgFromGlobalObject.qunit.js +0 -40
  964. package/test/sap/ui/core/qunit/bootstrap/CfgFromTagAttributes.qunit.html +0 -42
  965. package/test/sap/ui/core/qunit/bootstrap/CfgFromTagAttributes.qunit.js +0 -49
  966. package/test/sap/ui/core/qunit/util/BusyIndicatorNoCore.qunit.js +0 -96
  967. package/test/sap/ui/core/qunit/util/beforeBootstrap/jQuery.sap.FrameOptions-meta-tag.js +0 -10
  968. package/test/sap/ui/core/samples/mvc/JSONView.html +0 -65
@@ -386,6 +386,7 @@ sap.ui.define([
386
386
  for (j = aChildNodes.length - 1; j >= 0; j -= 1) {
387
387
  oChildNode = aChildNodes[j];
388
388
  if (oChildNode.nodeType === Node.ELEMENT_NODE
389
+ && oChildNode.localName !== "AnalyticalColumn"
389
390
  && oChildNode.localName !== "Column"
390
391
  && oChildNode.localName !== "rowMode") {
391
392
  oColumn = document.createElementNS("sap.ui.table", "Column");
@@ -399,6 +400,7 @@ sap.ui.define([
399
400
  }
400
401
  }
401
402
 
403
+ convertElements(oDocument.getElementsByTagNameNS("sap.ui.table", "AnalyticalTable"));
402
404
  convertElements(oDocument.getElementsByTagNameNS("sap.ui.table", "Table"));
403
405
  convertElements(oDocument.getElementsByTagNameNS("sap.ui.table", "TreeTable"));
404
406
  }
@@ -517,9 +519,6 @@ sap.ui.define([
517
519
  this.mChanges = {};
518
520
  // counter for OData messages created during a test
519
521
  this.iODataMessageCount = 0;
520
- // {map<string, true>}
521
- // If an ID is in this.mIgnoredChanges, change events with null are ignored
522
- this.mIgnoredChanges = {};
523
522
  // {map<string, string[][]>}
524
523
  // this.mListChanges["id"][i] is a list of expected changes for the property "text" of
525
524
  // the control with ID "id" in row i
@@ -667,9 +666,7 @@ sap.ui.define([
667
666
  sVisibleId = iRow === undefined ? sControlId : sControlId + "[" + iRow + "]";
668
667
 
669
668
  if (!aExpectedValues || !aExpectedValues.length) {
670
- if (!(sControlId in this.mIgnoredChanges && sValue === null)) {
671
- assert.ok(false, sVisibleId + ": " + JSON.stringify(sValue) + " (unexpected)");
672
- }
669
+ assert.ok(false, sVisibleId + ": " + JSON.stringify(sValue) + " (unexpected)");
673
670
  } else {
674
671
  sExpectedValue = aExpectedValues.shift();
675
672
  // Note: avoid bad performance of assert.strictEqual(), e.g. DOM manipulation
@@ -779,6 +776,8 @@ sap.ui.define([
779
776
  * @param {object} oHandler The request handler object
780
777
  * @param {object} oHttpClient The HttpClient object
781
778
  * @param {object} oMetadata The metadata object
779
+ * @returns {object}
780
+ * An object with a property <code>abort</code>, containing a function to abort the request
782
781
  */
783
782
  function checkRequest(oRequest, fnSuccess, fnError, oHandler, oHttpClient, oMetadata) {
784
783
  if (oRequest.requestUri.includes("$batch")) {
@@ -1113,7 +1112,7 @@ sap.ui.define([
1113
1112
  // esp. for the table.Table this is essential.
1114
1113
  that.oView.placeAt("qunit-fixture");
1115
1114
 
1116
- return that.waitForChanges(assert);
1115
+ return that.waitForChanges(assert, "create view");
1117
1116
  });
1118
1117
  },
1119
1118
 
@@ -1486,19 +1485,6 @@ sap.ui.define([
1486
1485
  return this;
1487
1486
  },
1488
1487
 
1489
- /**
1490
- * Allows that the property "text" of the control with the given ID is set to undefined or
1491
- * null. This may happen when bindings are initialized before the model value is available.
1492
- *
1493
- * @param {string} sControlId The control ID
1494
- * @returns {object} The test instance for chaining
1495
- */
1496
- ignoreNullChanges : function (sControlId) {
1497
- this.mIgnoredChanges[sControlId] = true;
1498
-
1499
- return this;
1500
- },
1501
-
1502
1488
  /**
1503
1489
  * Observes and checks value changes for a control. In case the test uses {#expectChange},
1504
1490
  * checks the model internal value by attaching a formatter; if the test uses
@@ -1697,15 +1683,17 @@ sap.ui.define([
1697
1683
  * states.
1698
1684
  *
1699
1685
  * @param {object} assert The QUnit assert object
1700
- * @param {number} [iTimeout=3000] The timeout time in milliseconds
1686
+ * @param {string} [sTitle] Title for this section of a test
1687
+ * @param {number} [iWaitTimeout=3000] The timeout time in milliseconds
1701
1688
  * @returns {Promise} A promise that is resolved when all requests have been responded,
1702
1689
  * all expected values for controls have been set, all expected messages and all value
1703
1690
  * states have been checked
1704
1691
  */
1705
- waitForChanges : function (assert, iTimeout) {
1692
+ waitForChanges : function (assert, sTitle, iWaitTimeout) {
1706
1693
  var oPromise,
1707
1694
  that = this;
1708
1695
 
1696
+ iWaitTimeout = iWaitTimeout || 3000;
1709
1697
  oPromise = new SyncPromise(function (resolve) {
1710
1698
  that.resolve = resolve;
1711
1699
  // After three seconds everything should have run through
@@ -1713,11 +1701,11 @@ sap.ui.define([
1713
1701
  setTimeout(function () {
1714
1702
  if (oPromise.isPending()) {
1715
1703
  assert.ok(false, "Timeout in waitForChanges");
1716
- resolve();
1704
+ resolve(true);
1717
1705
  }
1718
- }, iTimeout || 3000);
1706
+ }, iWaitTimeout);
1719
1707
  that.checkFinish(assert);
1720
- }).then(function () {
1708
+ }).then(function (bTimeout) {
1721
1709
  var sControlId, aExpectedValuesPerRow, i, j;
1722
1710
 
1723
1711
  // Report missing requests
@@ -1743,8 +1731,8 @@ sap.ui.define([
1743
1731
  }
1744
1732
  }
1745
1733
  that.checkMessages(assert);
1746
- return that.aValueStates.length === 0
1747
- ? undefined
1734
+ return (that.aValueStates.length === 0
1735
+ ? SyncPromise.resolve()
1748
1736
  // Checks the controls' value state after waiting some time for the control to
1749
1737
  // set it.
1750
1738
  : resolveLater(function () {
@@ -1760,6 +1748,9 @@ sap.ui.define([
1760
1748
  + oControl.getValueStateText());
1761
1749
  });
1762
1750
  that.aValueStates = [];
1751
+ })).then(() => {
1752
+ assert.ok(!bTimeout, "waitForChanges(" + (sTitle || "") + "): "
1753
+ + (bTimeout ? "Timeout (" + iWaitTimeout + " ms)" : "Done"));
1763
1754
  });
1764
1755
  });
1765
1756
 
@@ -5037,7 +5028,7 @@ usePreliminaryContext : false}}">\
5037
5028
  }]
5038
5029
  })
5039
5030
  .expectValue("connectionID", ["10"])
5040
- .expectValue("flightDate", ["5/30/15, 1:47 PM"])
5031
+ .expectValue("flightDate", ["5/30/15, 1:47\u202FPM"])
5041
5032
  .expectMessage(oFlight10PriceError, "/FlightCollection",
5042
5033
  "/CarrierCollection('1')/carrierFlights")
5043
5034
  .expectMessage(oFlight20PriceWarning, "/FlightCollection",
@@ -5054,7 +5045,7 @@ usePreliminaryContext : false}}">\
5054
5045
  });
5055
5046
  }).then(function (oFilter) {
5056
5047
  that.expectValue("connectionID", ["20"])
5057
- .expectValue("flightDate", ["6/30/15, 1:47 PM"]);
5048
+ .expectValue("flightDate", ["6/30/15, 1:47\u202FPM"]);
5058
5049
 
5059
5050
  oItemsBinding.filter(oFilter);
5060
5051
 
@@ -5319,7 +5310,7 @@ usePreliminaryContext : false}}">\
5319
5310
  that.expectRequest({
5320
5311
  created : true,
5321
5312
  data : {
5322
- __metadata : {type : "GWSAMPLE_BASIC.SalesOrderLineItem"}
5313
+ __metadata : {type : "GWSAMPLE_BASIC.SalesOrderLineItem"}
5323
5314
  },
5324
5315
  method : "POST",
5325
5316
  requestUri : "SalesOrderSet('1')/ToLineItems"
@@ -5449,7 +5440,7 @@ usePreliminaryContext : false}}">\
5449
5440
  }).then(function () {
5450
5441
  var oResetPromise;
5451
5442
 
5452
- if (bWithFailedPOST && bPersistTechnicalMessages && !bDeleteCreatedEntities) {
5443
+ if (bWithFailedPOST && bPersistTechnicalMessages) {
5453
5444
  that.expectMessages([{
5454
5445
  code : "UF0",
5455
5446
  fullTarget : "/SalesOrderSet('1')/ToLineItems('~key~')",
@@ -8248,11 +8239,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
8248
8239
  ID : "1",
8249
8240
  TimezoneID : "America/New_York"
8250
8241
  }, {"sap-message" : getMessageHeader(oDateWarning)})
8251
- .expectValue("dateAndTime", "Jan 17, 2022, 4:54:48 AM")
8242
+ .expectValue("dateAndTime", "Jan 17, 2022, 4:54:48\u202FAM")
8252
8243
  .expectValue("date", "Jan 17, 2022")
8253
- .expectValue("time", "4:54:48 AM")
8244
+ .expectValue("time", "4:54:48\u202FAM")
8254
8245
  .expectValue("timezone", "Americas, New York")
8255
- .expectValue("default", "Jan 17, 2022, 4:54:48 AM Americas, New York")
8246
+ .expectValue("default", "Jan 17, 2022, 4:54:48\u202FAM Americas, New York")
8256
8247
  .expectMessage(oDateWarning, "/DateTimeWithTimezoneSet('1')/")
8257
8248
  .expectValueState("dateAndTime", "Warning", "Foo")
8258
8249
  .expectValueState("date", "Warning", "Foo")
@@ -10332,8 +10323,8 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10332
10323
  threshold="0"\
10333
10324
  visibleRowCount="1">\
10334
10325
  <Text id="maintenanceOrder" text="{MaintenanceOrder}" />\
10335
- </t:TreeTable>',
10336
- that = this;
10326
+ </t:TreeTable>';
10327
+ let oTable;
10337
10328
 
10338
10329
  this.expectHeadRequest()
10339
10330
  .expectRequest({
@@ -10354,12 +10345,15 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10354
10345
  MaintenanceOrder : "Foo"
10355
10346
  }]
10356
10347
  })
10357
- .expectValue("person", "Alice")
10358
- .ignoreNullChanges("maintenanceOrder") //FIXME: unexpected change occurring in testsuite
10359
- .expectValue("maintenanceOrder", ["Foo"]);
10348
+ .expectValue("person", "Alice");
10360
10349
 
10361
- return this.createView(assert, sView, oModel).then(function () {
10362
- that.expectRequest({
10350
+ return this.createView(assert, sView, oModel).then(() => {
10351
+ oTable = this.oView.byId("table");
10352
+
10353
+ // don't use expectValue to avoid timing issues causing flaky tests
10354
+ assert.deepEqual(getTableContent(oTable), [["Foo"]]);
10355
+
10356
+ this.expectRequest({
10363
10357
  batchNo : 3,
10364
10358
  data : {
10365
10359
  __metadata : {uri : "C_RSHMaintSchedSmltdOrdAndOp('1')"},
@@ -10379,16 +10373,17 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10379
10373
  __metadata : {uri : "C_RSHMaintSchedSmltdOrdAndOp('1')"},
10380
10374
  MaintenanceOrder : "Bar"
10381
10375
  }]
10382
- })
10383
- .expectValue("maintenanceOrder", ["Bar"]);
10376
+ });
10384
10377
 
10385
10378
  // code under test
10386
10379
  oModel.setProperty("/C_RSHMaintSchedSmltdOrdAndOp('1')/MaintenanceOrder", "Bar");
10387
10380
  oModel.submitChanges();
10388
10381
 
10389
- return that.waitForChanges(assert);
10390
- }).then(function () {
10391
- that.expectRequest({
10382
+ return this.waitForChanges(assert);
10383
+ }).then(() => {
10384
+ assert.deepEqual(getTableContent(oTable), [["Bar"]]);
10385
+
10386
+ this.expectRequest({
10392
10387
  batchNo : 4,
10393
10388
  data : {
10394
10389
  Person : "Bob"
@@ -10408,7 +10403,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10408
10403
  // code under test: scenario 2
10409
10404
  oModel.update("/I_UserContactCard('foo')", {"Person" : "Bob"});
10410
10405
 
10411
- return that.waitForChanges(assert);
10406
+ return this.waitForChanges(assert);
10412
10407
  });
10413
10408
  });
10414
10409
 
@@ -10805,8 +10800,10 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10805
10800
  // Scenario: TreeTable#collapseAll for a table using ODataTreeBindingAdapter resets the number
10806
10801
  // of levels expanded automatically in subsequent read requests to 0.
10807
10802
  // BCP: 66039 / 2021
10803
+ // Scenario: ODataTreeBinding#expandNodeToLevel expands all children up to the given level.
10804
+ // JIRA: CPOUI5MODELS-1437
10808
10805
  QUnit.test("ODataTreeBindingAdapter: collapseToLevel prevents auto expand of child nodes with"
10809
- + " higher level", function (assert) {
10806
+ + " higher level and expandNodeToLevel works as expected", function (assert) {
10810
10807
  var oModel = createSpecialCasesModel(),
10811
10808
  oTable,
10812
10809
  sView = '\
@@ -10827,8 +10824,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10827
10824
  threshold="0"\
10828
10825
  visibleRowCount="2">\
10829
10826
  <Text id="maintenanceOrder" text="{MaintenanceOrder}" />\
10830
- </t:TreeTable>',
10831
- that = this;
10827
+ </t:TreeTable>';
10832
10828
 
10833
10829
  this.expectHeadRequest()
10834
10830
  .expectRequest("C_RSHMaintSchedSmltdOrdAndOp?$filter=OrderOperationRowLevel eq 0"
@@ -10869,22 +10865,23 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10869
10865
  OrderOperationRowID : "id-0.1",
10870
10866
  OrderOperationRowLevel : 1
10871
10867
  }]
10872
- })
10873
- .expectValue("maintenanceOrder", ["0", "1"])
10874
- .expectValue("maintenanceOrder", "0.0", 1);
10868
+ });
10875
10869
 
10876
- return this.createView(assert, sView, oModel).then(function () {
10877
- oTable = that.oView.byId("table");
10870
+ return this.createView(assert, sView, oModel).then(() => {
10871
+ oTable = this.oView.byId("table");
10878
10872
 
10879
- that.expectValue("maintenanceOrder", "1", 1);
10873
+ // don't use expectValue to avoid timing issues causing flaky tests
10874
+ assert.deepEqual(getTableContent(oTable), [["0"], ["0.0"]]);
10880
10875
 
10881
10876
  // code under test
10882
10877
  oTable.collapseAll();
10883
10878
 
10884
- return that.waitForChanges(assert);
10885
- }).then(function () {
10879
+ return this.waitForChanges(assert);
10880
+ }).then(() => {
10881
+ assert.deepEqual(getTableContent(oTable), [["0"], ["1"]]);
10882
+
10886
10883
  //TODO expect $top=2 instead of $top=4, check TreeBindingAdapter#_getContextsOrNodes?
10887
- that.expectRequest("C_RSHMaintSchedSmltdOrdAndOp"
10884
+ this.expectRequest("C_RSHMaintSchedSmltdOrdAndOp"
10888
10885
  + "?$filter=OrderOperationRowLevel eq 0&$skip=2&$top=4",
10889
10886
  {
10890
10887
  results : [{
@@ -10900,17 +10897,192 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
10900
10897
  OrderOperationRowID : "id-3",
10901
10898
  OrderOperationRowLevel : 0
10902
10899
  }]
10903
- })
10904
- .expectValue("maintenanceOrder", "", 2)
10905
- .expectValue("maintenanceOrder", "", 3)
10906
- .expectValue("maintenanceOrder", "2", 2)
10907
- .expectValue("maintenanceOrder", "3", 3);
10900
+ });
10908
10901
 
10909
10902
  // code under test
10910
10903
  // scroll down shows additional level 0 nodes, but must NOT load or show their children
10911
10904
  oTable.setFirstVisibleRow(2);
10912
10905
 
10913
- return that.waitForChanges(assert);
10906
+ return this.waitForChanges(assert);
10907
+ }).then(() => {
10908
+ assert.deepEqual(getTableContent(oTable), [["2"], ["3"]]);
10909
+
10910
+ this.expectRequest(
10911
+ "C_RSHMaintSchedSmltdOrdAndOp?$filter=OrderOperationRowID eq 'id-2' and OrderOperationRowLevel le 2",
10912
+ {
10913
+ results : [{
10914
+ __metadata : {uri : "C_RSHMaintSchedSmltdOrdAndOp('id-2')"},
10915
+ MaintenanceOrder : "2",
10916
+ OrderOperationIsExpanded : "expanded",
10917
+ OrderOperationRowID : "id-2",
10918
+ OrderOperationRowLevel : 0
10919
+ }, {
10920
+ __metadata : {uri : "C_RSHMaintSchedSmltdOrdAndOp('id-2.0')"},
10921
+ MaintenanceOrder : "2.0",
10922
+ OrderOperationIsExpanded : "leaf",
10923
+ OrderOperationParentRowID : "id-2",
10924
+ OrderOperationRowID : "id-2.0",
10925
+ OrderOperationRowLevel : 1
10926
+ }]
10927
+ });
10928
+
10929
+ return Promise.all([
10930
+ // code under test
10931
+ oTable.getBinding("rows").expandNodeToLevel(2, 2),
10932
+ this.waitForChanges(assert)
10933
+ ]);
10934
+ }).then(() => {
10935
+ assert.deepEqual(getTableContent(oTable), [["2"], ["2.0"]]);
10936
+ });
10937
+ });
10938
+
10939
+ //*********************************************************************************************
10940
+ // Scenario: All read requests of the tree binding except $count requests, consider "transitionMessagesOnly"
10941
+ // parameter.
10942
+ // JIRA: CPOUI5MODELS-1437
10943
+ QUnit.test("ODataTreeBinding: transtionMessagesOnly", function (assert) {
10944
+ const oModel = createSpecialCasesModel();
10945
+ let oTable;
10946
+ const sView = '\
10947
+ <t:TreeTable id="table"\
10948
+ rows="{\
10949
+ parameters: {\
10950
+ countMode : \'Request\',\
10951
+ numberOfExpandedLevels: 1,\
10952
+ transitionMessagesOnly: true,\
10953
+ treeAnnotationProperties: {\
10954
+ hierarchyDrillStateFor: \'OrderOperationIsExpanded\',\
10955
+ hierarchyLevelFor: \'OrderOperationRowLevel\',\
10956
+ hierarchyNodeFor: \'OrderOperationRowID\',\
10957
+ hierarchyParentNodeFor: \'OrderOperationParentRowID\'\
10958
+ }\
10959
+ },\
10960
+ path: \'/C_RSHMaintSchedSmltdOrdAndOp\'\
10961
+ }"\
10962
+ threshold="0"\
10963
+ visibleRowCount="2">\
10964
+ <Text id="maintenanceOrder" text="{MaintenanceOrder}" />\
10965
+ </t:TreeTable>';
10966
+
10967
+ this.expectHeadRequest()
10968
+ // triggered by ODataTreeBinding#_getCountForNodeId
10969
+ .expectRequest("C_RSHMaintSchedSmltdOrdAndOp/$count?$filter=OrderOperationRowLevel eq 0", "273")
10970
+ .expectRequest({ // triggered by ODataTreeBinding#_loadSubNodes
10971
+ headers: {"sap-messages": "transientOnly"},
10972
+ requestUri: "C_RSHMaintSchedSmltdOrdAndOp?$filter=OrderOperationRowLevel eq 0&$skip=0&$top=2"
10973
+ }, {
10974
+ results: [{
10975
+ __metadata: {uri: "C_RSHMaintSchedSmltdOrdAndOp('id-0')"},
10976
+ MaintenanceOrder: "0",
10977
+ OrderOperationIsExpanded: "collapsed",
10978
+ OrderOperationRowID: "id-0",
10979
+ OrderOperationRowLevel: 0
10980
+ }, {
10981
+ __metadata: {uri: "C_RSHMaintSchedSmltdOrdAndOp('id-1')"},
10982
+ MaintenanceOrder: "1",
10983
+ OrderOperationIsExpanded: "leaf",
10984
+ OrderOperationRowID: "id-1",
10985
+ OrderOperationRowLevel: 0
10986
+ }]
10987
+ })
10988
+ // triggered by ODataTreeBinding#_getCountForNodeId
10989
+ .expectRequest("C_RSHMaintSchedSmltdOrdAndOp/$count?$filter=OrderOperationParentRowID eq 'id-0'", "5")
10990
+ .expectRequest({ // triggered by ODataTreeBinding#_loadSubNodes
10991
+ headers: {"sap-messages": "transientOnly"},
10992
+ requestUri: "C_RSHMaintSchedSmltdOrdAndOp?$filter=OrderOperationParentRowID eq 'id-0'"
10993
+ + "&$skip=0&$top=2"
10994
+ }, {
10995
+ results: [{
10996
+ __metadata: {uri: "C_RSHMaintSchedSmltdOrdAndOp('id-0.0')"},
10997
+ MaintenanceOrder: "0.0",
10998
+ OrderOperationIsExpanded: "leaf",
10999
+ OrderOperationParentRowID: "id-0",
11000
+ OrderOperationRowID: "id-0.0",
11001
+ OrderOperationRowLevel: 1
11002
+ }, {
11003
+ __metadata: {uri: "C_RSHMaintSchedSmltdOrdAndOp('id-0.1')"},
11004
+ MaintenanceOrder: "0.1",
11005
+ OrderOperationIsExpanded: "leaf",
11006
+ OrderOperationParentRowID: "id-0",
11007
+ OrderOperationRowID: "id-0.1",
11008
+ OrderOperationRowLevel: 1
11009
+ }]
11010
+ });
11011
+
11012
+ return this.createView(assert, sView, oModel).then(() => {
11013
+ oTable = this.oView.byId("table");
11014
+
11015
+ // don't use expectValue to avoid timing issues causing flaky tests
11016
+ assert.deepEqual(getTableContent(oTable), [["0"], ["0.0"]]);
11017
+
11018
+ // code under test
11019
+ oTable.collapseAll();
11020
+
11021
+ return this.waitForChanges(assert, "collapse all nodes");
11022
+ }).then(() => {
11023
+ assert.deepEqual(getTableContent(oTable), [["0"], ["1"]]);
11024
+
11025
+ this.expectRequest({ // triggered by ODataTreeBinding#_loadSubNodes
11026
+ headers: {"sap-messages": "transientOnly"},
11027
+ requestUri: "C_RSHMaintSchedSmltdOrdAndOp?$filter=OrderOperationRowLevel eq 0&$skip=2&$top=4"
11028
+ }, {
11029
+ results: [{
11030
+ __metadata: {uri: "C_RSHMaintSchedSmltdOrdAndOp('id-2')"},
11031
+ MaintenanceOrder: "2",
11032
+ OrderOperationIsExpanded: "collapsed",
11033
+ OrderOperationRowID: "id-2",
11034
+ OrderOperationRowLevel: 0
11035
+ }, {
11036
+ __metadata: {uri: "C_RSHMaintSchedSmltdOrdAndOp('id-3')"},
11037
+ MaintenanceOrder: "3",
11038
+ OrderOperationIsExpanded: "leaf",
11039
+ OrderOperationRowID: "id-3",
11040
+ OrderOperationRowLevel: 0
11041
+ }]
11042
+ });
11043
+
11044
+ // code under test
11045
+ oTable.setFirstVisibleRow(2);
11046
+
11047
+ return this.waitForChanges(assert, "scroll down");
11048
+ }).then(() => {
11049
+ assert.deepEqual(getTableContent(oTable), [["2"], ["3"]]);
11050
+
11051
+ this.expectRequest({ // triggered by ODataTreeBinding#_loadSubTree
11052
+ headers: {"sap-messages": "transientOnly"},
11053
+ requestUri: "C_RSHMaintSchedSmltdOrdAndOp?"
11054
+ + "$filter=OrderOperationRowID eq 'id-2' and OrderOperationRowLevel le 2"
11055
+ }, {
11056
+ results: [{
11057
+ __metadata: {uri: "C_RSHMaintSchedSmltdOrdAndOp('id-2')"},
11058
+ MaintenanceOrder: "2",
11059
+ OrderOperationIsExpanded: "expanded",
11060
+ OrderOperationRowID: "id-2",
11061
+ OrderOperationRowLevel: 0
11062
+ }, {
11063
+ __metadata: {uri: "C_RSHMaintSchedSmltdOrdAndOp('id-2.0')"},
11064
+ MaintenanceOrder: "2.0",
11065
+ OrderOperationIsExpanded: "leaf",
11066
+ OrderOperationParentRowID: "id-2",
11067
+ OrderOperationRowID: "id-2.0",
11068
+ OrderOperationRowLevel: 1
11069
+ }]
11070
+ });
11071
+
11072
+ return Promise.all([
11073
+ // code under test
11074
+ oTable.getBinding("rows").expandNodeToLevel(2, 2),
11075
+ this.waitForChanges(assert, "expand node to level 2")
11076
+ ]);
11077
+ }).then(() => {
11078
+ assert.deepEqual(getTableContent(oTable), [["2"], ["2.0"]]);
11079
+
11080
+ // code under test
11081
+ oTable.setFirstVisibleRow(0);
11082
+
11083
+ return this.waitForChanges(assert, "scroll up again");
11084
+ }).then(() => {
11085
+ assert.deepEqual(getTableContent(oTable), [["0"], ["1"]]);
10914
11086
  });
10915
11087
  });
10916
11088
 
@@ -17986,8 +18158,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
17986
18158
  }"\
17987
18159
  visibleRowCount="3">\
17988
18160
  <Text id="itemName" text="{ErhaOrderItemName}" />\
17989
- </t:TreeTable>',
17990
- that = this;
18161
+ </t:TreeTable>';
17991
18162
 
17992
18163
  this.expectHeadRequest()
17993
18164
  .expectRequest({
@@ -17997,34 +18168,36 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
17997
18168
  }, {
17998
18169
  __count : "1",
17999
18170
  results : [oNode100]
18000
- })
18001
- .expectValue("itemName", ["foo", "", ""]);
18171
+ });
18002
18172
 
18003
- return this.createView(assert, sView, oModel).then(function () {
18004
- oTable = that.oView.byId("table");
18173
+ return this.createView(assert, sView, oModel).then(() => {
18174
+ oTable = this.oView.byId("table");
18005
18175
 
18006
- that.expectRequest({
18176
+ // don't use expectValue to avoid timing issues causing flaky tests
18177
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""]]);
18178
+
18179
+ this.expectRequest({
18007
18180
  batchNo : 2,
18008
18181
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18009
18182
  + "&$filter=HierarchyParentNode eq '100'"
18010
18183
  }, {
18011
18184
  __count : "2",
18012
18185
  results : [oNode200, oNode300]
18013
- })
18014
- .expectValue("itemName", ["bar", "baz"], 1);
18186
+ });
18015
18187
 
18016
18188
  oTable.expand(0);
18017
18189
 
18018
- return that.waitForChanges(assert);
18019
- }).then(function () {
18190
+ return this.waitForChanges(assert);
18191
+ }).then(() => {
18020
18192
  oBinding = oTable.getBinding("rows");
18021
18193
 
18022
- that.expectRequest({
18194
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], ["baz"]]);
18195
+
18196
+ this.expectRequest({
18023
18197
  batchNo : 3,
18024
18198
  method : "DELETE",
18025
18199
  requestUri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='300')"
18026
18200
  }, NO_CONTENT)
18027
- .expectValue("itemName", "", 2)
18028
18201
  .expectRequest({
18029
18202
  batchNo : 4,
18030
18203
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=1&$inlinecount=allpages"
@@ -18046,10 +18219,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18046
18219
  oBinding.removeContext(oTable.getContextByIndex(2));
18047
18220
  oModel.submitChanges();
18048
18221
 
18049
- return that.waitForChanges(assert);
18050
- }).then(function () {
18051
- that.expectValue("itemName", "bar: renamed", 1)
18052
- .expectRequest({
18222
+ return this.waitForChanges(assert);
18223
+ }).then(() => {
18224
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], [""]]);
18225
+
18226
+ this.expectRequest({
18053
18227
  batchNo : 5,
18054
18228
  data : {
18055
18229
  __metadata : {uri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"},
@@ -18064,7 +18238,9 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18064
18238
  oModel.setProperty("ErhaOrderItemName", "bar: renamed", oTable.getContextByIndex(1));
18065
18239
  oModel.submitChanges();
18066
18240
 
18067
- return that.waitForChanges(assert);
18241
+ return this.waitForChanges(assert);
18242
+ }).then(() => {
18243
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar: renamed"], [""]]);
18068
18244
  });
18069
18245
  });
18070
18246
  });
@@ -18136,8 +18312,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18136
18312
  }"\
18137
18313
  visibleRowCount="3">\
18138
18314
  <Text id="itemName" text="{ErhaOrderItemName}" />\
18139
- </t:TreeTable>',
18140
- that = this;
18315
+ </t:TreeTable>';
18141
18316
 
18142
18317
  this.expectHeadRequest()
18143
18318
  .expectRequest({
@@ -18147,34 +18322,36 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18147
18322
  }, {
18148
18323
  __count : "1",
18149
18324
  results : [oNode100]
18150
- })
18151
- .expectValue("itemName", ["foo", "", ""]);
18325
+ });
18152
18326
 
18153
- return this.createView(assert, sView, oModel).then(function () {
18154
- oTable = that.oView.byId("table");
18327
+ return this.createView(assert, sView, oModel).then(() => {
18328
+ oTable = this.oView.byId("table");
18155
18329
 
18156
- that.expectRequest({
18330
+ // don't use expectValue to avoid timing issues causing flaky tests
18331
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""]]);
18332
+
18333
+ this.expectRequest({
18157
18334
  batchNo : 2,
18158
18335
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18159
18336
  + "&$filter=HierarchyParentNode eq '100'"
18160
18337
  }, {
18161
18338
  __count : "2",
18162
18339
  results : [oNode200, oNode300]
18163
- })
18164
- .expectValue("itemName", ["bar", "baz"], 1);
18340
+ });
18165
18341
 
18166
18342
  oTable.expand(0);
18167
18343
 
18168
- return that.waitForChanges(assert);
18169
- }).then(function () {
18344
+ return this.waitForChanges(assert);
18345
+ }).then(() => {
18170
18346
  oBinding = oTable.getBinding("rows");
18171
18347
 
18172
- that.expectRequest({
18348
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], ["baz"]]);
18349
+
18350
+ this.expectRequest({
18173
18351
  batchNo : 3,
18174
18352
  method : "DELETE",
18175
18353
  requestUri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='300')"
18176
18354
  }, NO_CONTENT)
18177
- .expectValue("itemName", "", 2)
18178
18355
  .expectRequest({
18179
18356
  batchNo : 4,
18180
18357
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=1&$inlinecount=allpages"
@@ -18196,10 +18373,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18196
18373
  oBinding.removeContext(oTable.getContextByIndex(2));
18197
18374
  oBinding.submitChanges();
18198
18375
 
18199
- return that.waitForChanges(assert);
18200
- }).then(function () {
18201
- that.expectValue("itemName", "bar: renamed", 1)
18202
- .expectRequest({
18376
+ return this.waitForChanges(assert);
18377
+ }).then(() => {
18378
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], [""]]);
18379
+
18380
+ this.expectRequest({
18203
18381
  batchNo : 5,
18204
18382
  data : {
18205
18383
  __metadata : {uri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"},
@@ -18208,9 +18386,8 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18208
18386
  key : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')",
18209
18387
  method : "MERGE",
18210
18388
  requestUri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"
18211
- }, NO_CONTENT);
18212
-
18213
- that.expectRequest({
18389
+ }, NO_CONTENT)
18390
+ .expectRequest({
18214
18391
  batchNo : 6,
18215
18392
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=1&$inlinecount=allpages"
18216
18393
  + "&$filter=HierarchyDistanceFromRoot le 0"
@@ -18231,7 +18408,9 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18231
18408
  oModel.setProperty("ErhaOrderItemName", "bar: renamed", oTable.getContextByIndex(1));
18232
18409
  oBinding.submitChanges();
18233
18410
 
18234
- return that.waitForChanges(assert);
18411
+ return this.waitForChanges(assert);
18412
+ }).then(() => {
18413
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar: renamed"], [""]]);
18235
18414
  });
18236
18415
  });
18237
18416
  });
@@ -18298,8 +18477,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18298
18477
  }"\
18299
18478
  visibleRowCount="3">\
18300
18479
  <Text id="itemName" text="{ErhaOrderItemName}" />\
18301
- </t:TreeTable>',
18302
- that = this;
18480
+ </t:TreeTable>';
18303
18481
 
18304
18482
  this.expectHeadRequest()
18305
18483
  .expectRequest({
@@ -18309,34 +18487,36 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18309
18487
  }, {
18310
18488
  __count : "1",
18311
18489
  results : [oNode100]
18312
- })
18313
- .expectValue("itemName", ["foo", "", ""]);
18490
+ });
18314
18491
 
18315
- return this.createView(assert, sView, oModel).then(function () {
18316
- oTable = that.oView.byId("table");
18492
+ return this.createView(assert, sView, oModel).then(() => {
18493
+ oTable = this.oView.byId("table");
18317
18494
 
18318
- that.expectRequest({
18495
+ // don't use expectValue to avoid timing issues causing flaky tests
18496
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""]]);
18497
+
18498
+ this.expectRequest({
18319
18499
  batchNo : 2,
18320
18500
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18321
18501
  + "&$filter=HierarchyParentNode eq '100'"
18322
18502
  }, {
18323
18503
  __count : "2",
18324
18504
  results : [oNode200, oNode300]
18325
- })
18326
- .expectValue("itemName", ["bar", "baz"], 1);
18505
+ });
18327
18506
 
18328
18507
  oTable.expand(0);
18329
18508
 
18330
- return that.waitForChanges(assert);
18331
- }).then(function () {
18509
+ return this.waitForChanges(assert);
18510
+ }).then(() => {
18332
18511
  oBinding = oTable.getBinding("rows");
18333
18512
 
18334
- that.expectRequest({
18513
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], ["baz"]]);
18514
+
18515
+ this.expectRequest({
18335
18516
  batchNo : 3,
18336
18517
  method : "DELETE",
18337
18518
  requestUri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='300')"
18338
18519
  }, NO_CONTENT)
18339
- .expectValue("itemName", "", 2)
18340
18520
  .expectRequest({
18341
18521
  batchNo : 4,
18342
18522
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
@@ -18344,34 +18524,34 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18344
18524
  }, {
18345
18525
  __count : "1",
18346
18526
  results : [oNode100]
18347
- })
18348
- .expectValue("itemName", "", 1); // binding gets refreshed, no restore tree state
18527
+ });
18349
18528
 
18350
18529
  // code under test: hierarchy change
18351
18530
  oBinding.removeContext(oTable.getContextByIndex(2));
18352
18531
  oModel.submitChanges();
18353
18532
 
18354
- return that.waitForChanges(assert);
18355
- }).then(function () {
18356
- oTable = that.oView.byId("table");
18533
+ return this.waitForChanges(assert);
18534
+ }).then(() => {
18535
+ // binding gets refreshed, no restore tree state
18536
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""]]);
18357
18537
 
18358
- that.expectRequest({
18538
+ this.expectRequest({
18359
18539
  batchNo : 5,
18360
18540
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18361
18541
  + "&$filter=HierarchyParentNode eq '100'"
18362
18542
  }, {
18363
18543
  __count : "1",
18364
18544
  results : [oNode200]
18365
- })
18366
- .expectValue("itemName", "bar", 1);
18545
+ });
18367
18546
 
18368
18547
  // manually expand the node again
18369
18548
  oTable.expand(0);
18370
18549
 
18371
- return that.waitForChanges(assert);
18372
- }).then(function () {
18373
- that.expectValue("itemName", "bar: renamed", 1)
18374
- .expectRequest({
18550
+ return this.waitForChanges(assert);
18551
+ }).then(() => {
18552
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], [""]]);
18553
+
18554
+ this.expectRequest({
18375
18555
  batchNo : 6,
18376
18556
  data : {
18377
18557
  __metadata : {uri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"},
@@ -18386,7 +18566,9 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18386
18566
  oModel.setProperty("ErhaOrderItemName", "bar: renamed", oTable.getContextByIndex(1));
18387
18567
  oModel.submitChanges();
18388
18568
 
18389
- return that.waitForChanges(assert);
18569
+ return this.waitForChanges(assert);
18570
+ }).then(() => {
18571
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar: renamed"], [""]]);
18390
18572
  });
18391
18573
  });
18392
18574
 
@@ -18453,8 +18635,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18453
18635
  }"\
18454
18636
  visibleRowCount="3">\
18455
18637
  <Text id="itemName" text="{ErhaOrderItemName}" />\
18456
- </t:TreeTable>',
18457
- that = this;
18638
+ </t:TreeTable>';
18458
18639
 
18459
18640
  this.expectHeadRequest()
18460
18641
  .expectRequest({
@@ -18464,34 +18645,36 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18464
18645
  }, {
18465
18646
  __count : "1",
18466
18647
  results : [oNode100]
18467
- })
18468
- .expectValue("itemName", ["foo", "", ""]);
18648
+ });
18469
18649
 
18470
- return this.createView(assert, sView, oModel).then(function () {
18471
- oTable = that.oView.byId("table");
18650
+ return this.createView(assert, sView, oModel).then(() => {
18651
+ oTable = this.oView.byId("table");
18472
18652
 
18473
- that.expectRequest({
18653
+ // don't use expectValue to avoid timing issues causing flaky tests
18654
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""]]);
18655
+
18656
+ this.expectRequest({
18474
18657
  batchNo : 2,
18475
18658
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18476
18659
  + "&$filter=HierarchyParentNode eq '100'"
18477
18660
  }, {
18478
18661
  __count : "2",
18479
18662
  results : [oNode200, oNode300]
18480
- })
18481
- .expectValue("itemName", ["bar", "baz"], 1);
18663
+ });
18482
18664
 
18483
18665
  oTable.expand(0);
18484
18666
 
18485
- return that.waitForChanges(assert);
18486
- }).then(function () {
18667
+ return this.waitForChanges(assert);
18668
+ }).then(() => {
18487
18669
  oBinding = oTable.getBinding("rows");
18488
18670
 
18489
- that.expectRequest({
18671
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], ["baz"]]);
18672
+
18673
+ this.expectRequest({
18490
18674
  batchNo : 3,
18491
18675
  method : "DELETE",
18492
18676
  requestUri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='300')"
18493
18677
  }, NO_CONTENT)
18494
- .expectValue("itemName", "", 2)
18495
18678
  .expectRequest({
18496
18679
  batchNo : 4,
18497
18680
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
@@ -18499,34 +18682,34 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18499
18682
  }, {
18500
18683
  __count : "1",
18501
18684
  results : [oNode100]
18502
- })
18503
- .expectValue("itemName", "", 1); // binding gets refreshed, no restore tree state
18685
+ });
18504
18686
 
18505
18687
  // code under test: hierarchy change
18506
18688
  oBinding.removeContext(oTable.getContextByIndex(2));
18507
18689
  oBinding.submitChanges();
18508
18690
 
18509
- return that.waitForChanges(assert);
18510
- }).then(function () {
18511
- oTable = that.oView.byId("table");
18691
+ return this.waitForChanges(assert);
18692
+ }).then(() => {
18693
+ // binding gets refreshed, no restore tree state
18694
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""]]);
18512
18695
 
18513
- that.expectRequest({
18696
+ this.expectRequest({
18514
18697
  batchNo : 5,
18515
18698
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18516
18699
  + "&$filter=HierarchyParentNode eq '100'"
18517
18700
  }, {
18518
18701
  __count : "1",
18519
18702
  results : [oNode200]
18520
- })
18521
- .expectValue("itemName", "bar", 1);
18703
+ });
18522
18704
 
18523
18705
  // manually expand the node again
18524
18706
  oTable.expand(0);
18525
18707
 
18526
- return that.waitForChanges(assert);
18527
- }).then(function () {
18528
- that.expectValue("itemName", "bar: renamed", 1)
18529
- .expectRequest({
18708
+ return this.waitForChanges(assert);
18709
+ }).then(() => {
18710
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], [""]]);
18711
+
18712
+ this.expectRequest({
18530
18713
  batchNo : 6,
18531
18714
  data : {
18532
18715
  __metadata : {uri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"},
@@ -18535,24 +18718,24 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18535
18718
  key : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')",
18536
18719
  method : "MERGE",
18537
18720
  requestUri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"
18538
- }, NO_CONTENT);
18539
-
18540
- that.expectRequest({
18541
- batchNo : 7,
18542
- requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18543
- + "&$filter=HierarchyDistanceFromRoot le 0"
18544
- }, {
18545
- __count : "1",
18546
- results : [oNode100]
18547
- })
18548
- // binding gets refreshed, no restore tree state
18549
- .expectValue("itemName", "", 1);
18721
+ }, NO_CONTENT)
18722
+ .expectRequest({
18723
+ batchNo : 7,
18724
+ requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18725
+ + "&$filter=HierarchyDistanceFromRoot le 0"
18726
+ }, {
18727
+ __count : "1",
18728
+ results : [oNode100]
18729
+ });
18550
18730
 
18551
18731
  // code under test: property change
18552
18732
  oModel.setProperty("ErhaOrderItemName", "bar: renamed", oTable.getContextByIndex(1));
18553
18733
  oBinding.submitChanges();
18554
18734
 
18555
- return that.waitForChanges(assert);
18735
+ return this.waitForChanges(assert);
18736
+ }).then(() => {
18737
+ // binding gets refreshed, no restore tree state
18738
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""]]);
18556
18739
  });
18557
18740
  });
18558
18741
 
@@ -18615,8 +18798,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18615
18798
  }"\
18616
18799
  visibleRowCount="3">\
18617
18800
  <Text id="itemName" text="{ErhaOrderItemName}" />\
18618
- </t:TreeTable>',
18619
- that = this;
18801
+ </t:TreeTable>';
18620
18802
 
18621
18803
  this.expectHeadRequest()
18622
18804
  .expectRequest({
@@ -18626,48 +18808,50 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18626
18808
  }, {
18627
18809
  __count : "1",
18628
18810
  results : [oNode100]
18629
- })
18630
- .expectValue("itemName", ["foo", "", ""]);
18811
+ });
18631
18812
 
18632
- return this.createView(assert, sView, oModel).then(function () {
18633
- oTable = that.oView.byId("table");
18813
+ return this.createView(assert, sView, oModel).then(() => {
18814
+ oTable = this.oView.byId("table");
18634
18815
 
18635
- that.expectRequest({
18816
+ // don't use expectValue to avoid timing issues causing flaky tests
18817
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""]]);
18818
+
18819
+ this.expectRequest({
18636
18820
  batchNo : 2,
18637
18821
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18638
18822
  + "&$filter=HierarchyParentNode eq '100'"
18639
18823
  }, {
18640
18824
  __count : "1",
18641
18825
  results : [oNode200]
18642
- })
18643
- .expectValue("itemName", "bar", 1);
18826
+ });
18644
18827
 
18645
18828
  oTable.expand(0);
18646
18829
 
18647
- return that.waitForChanges(assert);
18648
- }).then(function () {
18649
- oTable = that.oView.byId("table");
18830
+ return this.waitForChanges(assert);
18831
+ }).then(() => {
18832
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], [""]]);
18650
18833
 
18651
- that.expectRequest({
18834
+ this.expectRequest({
18652
18835
  batchNo : 3,
18653
18836
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18654
18837
  + "&$filter=HierarchyParentNode eq '200'"
18655
18838
  }, {
18656
18839
  __count : "1",
18657
18840
  results : [oNode300]
18658
- })
18659
- .expectValue("itemName", "baz", 2);
18841
+ });
18660
18842
 
18661
18843
  oTable.expand(1);
18662
18844
 
18663
- return that.waitForChanges(assert);
18664
- }).then(function () {
18845
+ return this.waitForChanges(assert);
18846
+ }).then(() => {
18665
18847
  var oMoveContext = oTable.getContextByIndex(2),
18666
18848
  oParentContext = oTable.getContextByIndex(0);
18667
18849
 
18668
18850
  oBinding = oTable.getBinding("rows");
18669
18851
 
18670
- that.expectRequest({
18852
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], ["baz"]]);
18853
+
18854
+ this.expectRequest({
18671
18855
  batchNo : 4,
18672
18856
  data : {
18673
18857
  __metadata : {uri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='300')"},
@@ -18677,7 +18861,6 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18677
18861
  method : "MERGE",
18678
18862
  requestUri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='300')"
18679
18863
  }, NO_CONTENT)
18680
- .expectValue("itemName", ["baz", "bar"], 1)
18681
18864
  .expectRequest({
18682
18865
  batchNo : 4,
18683
18866
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
@@ -18685,35 +18868,35 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18685
18868
  }, {
18686
18869
  __count : "1",
18687
18870
  results : [oNode100]
18688
- })
18689
- .expectValue("itemName", ["", ""], 1); // binding gets refreshed
18871
+ }); // binding gets refreshed
18690
18872
 
18691
18873
  // code under test: hierarchy change
18692
18874
  oBinding.removeContext(oMoveContext);
18693
18875
  oBinding.addContexts(oParentContext, [oMoveContext]);
18694
18876
  oModel.submitChanges();
18695
18877
 
18696
- return that.waitForChanges(assert);
18697
- }).then(function () {
18698
- oTable = that.oView.byId("table");
18878
+ return this.waitForChanges(assert);
18879
+ }).then(() => {
18880
+ // binding gets refreshed
18881
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""]]);
18699
18882
 
18700
- that.expectRequest({
18883
+ this.expectRequest({
18701
18884
  batchNo : 5,
18702
18885
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages"
18703
18886
  + "&$filter=HierarchyParentNode eq '100'"
18704
18887
  }, {
18705
18888
  __count : "1",
18706
18889
  results : [oNode200]
18707
- })
18708
- .expectValue("itemName", "bar", 1);
18890
+ });
18709
18891
 
18710
18892
  // manually expand the node again
18711
18893
  oTable.expand(0);
18712
18894
 
18713
- return that.waitForChanges(assert);
18714
- }).then(function () {
18715
- that.expectValue("itemName", "bar: renamed", 1)
18716
- .expectRequest({
18895
+ return this.waitForChanges(assert);
18896
+ }).then(() => {
18897
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], [""]]);
18898
+
18899
+ this.expectRequest({
18717
18900
  batchNo : 6,
18718
18901
  data : {
18719
18902
  __metadata : {uri : "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='200')"},
@@ -18730,15 +18913,16 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18730
18913
  }, {
18731
18914
  __count : "1",
18732
18915
  results : [oNode100]
18733
- })
18734
- // binding gets refreshed, no restore tree state
18735
- .expectValue("itemName", "", 1);
18916
+ });
18736
18917
 
18737
18918
  // code under test: property change
18738
18919
  oModel.setProperty("ErhaOrderItemName", "bar: renamed", oTable.getContextByIndex(1));
18739
18920
  oModel.submitChanges();
18740
18921
 
18741
- return that.waitForChanges(assert);
18922
+ return this.waitForChanges(assert);
18923
+ }).then(() => {
18924
+ // binding gets refreshed, no restore tree state
18925
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""]]);
18742
18926
  });
18743
18927
  });
18744
18928
 
@@ -18879,8 +19063,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18879
19063
  }"\
18880
19064
  visibleRowCount="4">\
18881
19065
  <Text id="itemName" text="{ErhaOrderItemName}" />\
18882
- </t:TreeTable>',
18883
- that = this;
19066
+ </t:TreeTable>';
18884
19067
 
18885
19068
  this.expectHeadRequest()
18886
19069
  .expectRequest({
@@ -18890,34 +19073,34 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18890
19073
  }, {
18891
19074
  __count : "1",
18892
19075
  results : [oNode100]
18893
- })
18894
- .expectValue("itemName", ["foo", "", "", ""]);
19076
+ });
18895
19077
 
18896
- return this.createView(assert, sView, oModel).then(function () {
18897
- oTable = that.oView.byId("table");
19078
+ return this.createView(assert, sView, oModel).then(() => {
19079
+ oTable = this.oView.byId("table");
18898
19080
  oBinding = oTable.getBinding("rows");
18899
19081
 
18900
- that.expectRequest({
19082
+ // don't use expectValue to avoid timing issues causing flaky tests
19083
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""], [""], [""]]);
19084
+
19085
+ this.expectRequest({
18901
19086
  batchNo : 2,
18902
19087
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=104&$inlinecount=allpages"
18903
19088
  + "&$filter=HierarchyParentNode eq '100'"
18904
19089
  }, {
18905
19090
  __count : "2",
18906
19091
  results : [oNode200, oNode300]
18907
- })
18908
- .expectValue("itemName", ["bar", "baz"], 1);
19092
+ });
18909
19093
 
18910
19094
  oTable.expand(0);
18911
19095
 
18912
- return that.waitForChanges(assert);
18913
- }).then(function () {
19096
+ return this.waitForChanges(assert);
19097
+ }).then(() => {
18914
19098
  var oCreatedContext, oExpectedEntry;
18915
19099
 
19100
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], ["baz"], [""]]);
18916
19101
  assert.strictEqual(oModel.hasPendingChanges(), false);
18917
19102
  assert.deepEqual(oModel.getPendingChanges(), {});
18918
19103
 
18919
- that.expectValue("itemName", ["qux", "bar", "baz"], 1);
18920
-
18921
19104
  // code under test: add node
18922
19105
  oCreatedContext = oBinding.createEntry({properties : {ErhaOrderItemName : "qux"}});
18923
19106
  oBinding.addContexts(oTable.getContextByIndex(0), [oCreatedContext]);
@@ -18932,9 +19115,9 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18932
19115
  assert.deepEqual(oPendingChanges[sKey], oExpectedEntry);
18933
19116
  }
18934
19117
 
18935
- return that.waitForChanges(assert);
18936
- }).then(function () {
18937
- that.expectValue("itemName", ["bar", "baz", ""], 1);
19118
+ return this.waitForChanges(assert);
19119
+ }).then(() => {
19120
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["qux"], ["bar"], ["baz"]]);
18938
19121
 
18939
19122
  // code under test: reset added node
18940
19123
  oModel.resetChanges();
@@ -18942,11 +19125,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18942
19125
  assert.strictEqual(oModel.hasPendingChanges(), false);
18943
19126
  assert.deepEqual(oModel.getPendingChanges(), {});
18944
19127
 
18945
- return that.waitForChanges(assert);
18946
- }).then(function () {
19128
+ return this.waitForChanges(assert);
19129
+ }).then(() => {
18947
19130
  var oMovedContext = oTable.getContextByIndex(2);
18948
19131
 
18949
- that.expectValue("itemName", "", 2);
19132
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], ["baz"], [""]]);
18950
19133
 
18951
19134
  // code under test: move node
18952
19135
  oBinding.removeContext(oMovedContext);
@@ -18960,9 +19143,9 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18960
19143
  assert.deepEqual(oPendingChanges[sKey], {HierarchyParentNode : "200"});
18961
19144
  }
18962
19145
 
18963
- return that.waitForChanges(assert);
18964
- }).then(function () {
18965
- that.expectValue("itemName", "baz", 2);
19146
+ return this.waitForChanges(assert);
19147
+ }).then(() => {
19148
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], [""], [""]]);
18966
19149
 
18967
19150
  // code under test: reset moved node
18968
19151
  oModel.resetChanges();
@@ -18970,11 +19153,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18970
19153
  assert.strictEqual(oModel.hasPendingChanges(), false);
18971
19154
  assert.deepEqual(oModel.getPendingChanges(), {});
18972
19155
 
18973
- return that.waitForChanges(assert);
18974
- }).then(function () {
19156
+ return this.waitForChanges(assert);
19157
+ }).then(() => {
18975
19158
  var oRemovedContext = oTable.getContextByIndex(2);
18976
19159
 
18977
- that.expectValue("itemName", "", 2);
19160
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], ["baz"], [""]]);
18978
19161
 
18979
19162
  // code under test: remove node
18980
19163
  oBinding.removeContext(oRemovedContext);
@@ -18987,9 +19170,9 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18987
19170
  assert.deepEqual(oPendingChanges[sKey], {});
18988
19171
  }
18989
19172
 
18990
- return that.waitForChanges(assert);
18991
- }).then(function () {
18992
- that.expectValue("itemName", "baz", 2);
19173
+ return this.waitForChanges(assert);
19174
+ }).then(() => {
19175
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], [""], [""]]);
18993
19176
 
18994
19177
  // code under test: reset removed node
18995
19178
  oModel.resetChanges();
@@ -18997,9 +19180,9 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
18997
19180
  assert.strictEqual(oModel.hasPendingChanges(), false);
18998
19181
  assert.deepEqual(oModel.getPendingChanges(), {});
18999
19182
 
19000
- return that.waitForChanges(assert);
19001
- }).then(function () {
19002
- that.expectValue("itemName", ["qux2", "bar", "baz"], 1);
19183
+ return this.waitForChanges(assert);
19184
+ }).then(() => {
19185
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], ["baz"], [""]]);
19003
19186
 
19004
19187
  // code under test: cancelled creation (add)
19005
19188
  oCancelledContext = oBinding.createEntry({properties : {ErhaOrderItemName : "qux2"}});
@@ -19007,9 +19190,9 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
19007
19190
 
19008
19191
  // #hasPendingChanges and #getPendingChanges tested in "added case"
19009
19192
 
19010
- return that.waitForChanges(assert);
19011
- }).then(function () {
19012
- that.expectValue("itemName", ["bar", "baz", ""], 1);
19193
+ return this.waitForChanges(assert);
19194
+ }).then(() => {
19195
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["qux2"], ["bar"], ["baz"]]);
19013
19196
 
19014
19197
  // code under test: cancelled creation (remove)
19015
19198
  oBinding.removeContext(oCancelledContext);
@@ -19020,7 +19203,9 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
19020
19203
  // code under test: no request as created entry has been removed again
19021
19204
  oModel.submitChanges();
19022
19205
 
19023
- return that.waitForChanges(assert);
19206
+ return this.waitForChanges(assert);
19207
+ }).then(() => {
19208
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"], ["baz"], [""]]);
19024
19209
  });
19025
19210
  });
19026
19211
 
@@ -19043,8 +19228,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
19043
19228
  }"\
19044
19229
  visibleRowCount="3">\
19045
19230
  <Text id="itemName" text="{ErhaOrderItemName}" />\
19046
- </t:TreeTable>',
19047
- that = this;
19231
+ </t:TreeTable>';
19048
19232
 
19049
19233
  this.expectHeadRequest()
19050
19234
  .expectRequest({
@@ -19102,30 +19286,30 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
19102
19286
  HierarchyPreorderRank : 3,
19103
19287
  HierarchySiblingRank : 2
19104
19288
  }]
19105
- })
19106
- .expectValue("itemName", ["099", "100", "110"]);
19289
+ });
19107
19290
 
19108
- return this.createView(assert, sView, oModel).then(function () {
19109
- oTable = that.oView.byId("table");
19291
+ return this.createView(assert, sView, oModel).then(() => {
19292
+ oTable = this.oView.byId("table");
19110
19293
  oBinding = oTable.getBinding("rows");
19111
19294
 
19295
+ // don't use expectValue to avoid timing issues causing flaky tests
19296
+ assert.deepEqual(getTableContent(oTable), [["099"], ["100"], ["110"]]);
19112
19297
  assert.strictEqual(oBinding.isExpanded(1), true, "row 2 expanded");
19113
19298
  assert.strictEqual(oBinding.isExpanded(3), false, "row 4 collapsed");
19114
19299
  assert.strictEqual(oBinding.getLength(), 4, "initial binding length is 3");
19115
19300
 
19116
- return that.waitForChanges(assert);
19117
- }).then(function () {
19118
- that.expectValue("itemName", "200", 2);
19119
-
19301
+ return this.waitForChanges(assert);
19302
+ }).then(() => {
19120
19303
  // code under test
19121
19304
  oBinding.collapse(1);
19122
19305
 
19123
19306
  assert.strictEqual(oBinding.getLength(), 3,
19124
19307
  "first collapse reduces binding length to 3");
19125
19308
 
19126
- return that.waitForChanges(assert);
19127
- }).then(function () {
19128
- that.expectRequest({
19309
+ return this.waitForChanges(assert);
19310
+ }).then(() => {
19311
+ assert.deepEqual(getTableContent(oTable), [["099"], ["100"], ["200"]]);
19312
+ this.expectRequest({
19129
19313
  batchNo : 2,
19130
19314
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=103&$inlinecount=allpages&"
19131
19315
  + "$filter=HierarchyParentNode eq '200'"
@@ -19149,8 +19333,9 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
19149
19333
  // code under test
19150
19334
  oBinding.expand(2);
19151
19335
 
19152
- return that.waitForChanges(assert);
19153
- }).then(function () {
19336
+ return this.waitForChanges(assert);
19337
+ }).then(() => {
19338
+ assert.deepEqual(getTableContent(oTable), [["099"], ["100"], ["200"]]);
19154
19339
  assert.strictEqual(oBinding.isExpanded(2), true, "row 2 expanded");
19155
19340
  assert.strictEqual(oBinding.getLength(), 4,
19156
19341
  "expand of row 2 increases binding length to 4");
@@ -19177,8 +19362,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
19177
19362
  }"\
19178
19363
  visibleRowCount="2">\
19179
19364
  <Text id="itemName" text="{ErhaOrderItemName}" />\
19180
- </t:TreeTable>',
19181
- that = this;
19365
+ </t:TreeTable>';
19182
19366
 
19183
19367
  this.expectHeadRequest()
19184
19368
  .expectRequest({
@@ -19200,13 +19384,15 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
19200
19384
  HierarchyPreorderRank : 0,
19201
19385
  HierarchySiblingRank : 0
19202
19386
  }]
19203
- })
19204
- .expectValue("itemName", ["foo", ""]);
19387
+ });
19205
19388
 
19206
- return this.createView(assert, sView, oModel).then(function () {
19207
- oTable = that.oView.byId("table");
19389
+ return this.createView(assert, sView, oModel).then(() => {
19390
+ oTable = this.oView.byId("table");
19208
19391
  oBinding = oTable.getBinding("rows");
19209
19392
 
19393
+ // don't use expectValue to avoid timing issues causing flaky tests
19394
+ assert.deepEqual(getTableContent(oTable), [["foo"], [""]]);
19395
+
19210
19396
  // code under test: add node
19211
19397
  oCreatedContext = oBinding.createEntry({
19212
19398
  properties : {ErhaOrderItemName : "bar", HierarchyNode : "~key~"}});
@@ -19214,18 +19400,18 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
19214
19400
 
19215
19401
  assert.strictEqual(oBinding.isExpanded(0), false);
19216
19402
 
19217
- return that.waitForChanges(assert);
19218
- }).then(function () {
19219
- that.expectValue("itemName", ["bar"], 1);
19220
-
19403
+ return this.waitForChanges(assert);
19404
+ }).then(() => {
19221
19405
  // code under test
19222
19406
  oTable.expand(0);
19223
19407
 
19224
19408
  assert.strictEqual(oBinding.isExpanded(0), true);
19225
19409
 
19226
- return that.waitForChanges(assert);
19227
- }).then(function () {
19228
- that.expectRequest({ // POST for entity creation
19410
+ return this.waitForChanges(assert);
19411
+ }).then(() => {
19412
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"]]);
19413
+
19414
+ this.expectRequest({ // POST for entity creation
19229
19415
  batchNo : 2,
19230
19416
  created : true,
19231
19417
  data : {
@@ -19317,13 +19503,198 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
19317
19503
 
19318
19504
  return Promise.all([
19319
19505
  oCreatedContext.created(),
19320
- that.waitForChanges(assert)
19506
+ this.waitForChanges(assert)
19321
19507
  ]);
19322
19508
  }).then(function () {
19509
+ assert.deepEqual(getTableContent(oTable), [["foo"], ["bar"]]);
19323
19510
  assert.strictEqual(oBinding.isExpanded(0), true, "expanded state is restored");
19324
19511
  });
19325
19512
  });
19326
19513
 
19514
+ //*********************************************************************************************
19515
+ // Scenario: All read requests of the ODataTreeBindingFlat, consider "transitionMessagesOnly" parameter.
19516
+ // JIRA: CPOUI5MODELS-1437
19517
+ QUnit.test("ODataTreeBindingFlat: transitionMessagesOnly", function (assert) {
19518
+ const oModel = createHierarchyMaintenanceModel();
19519
+ let oTable;
19520
+ const sView = '\
19521
+ <t:TreeTable id="table"\
19522
+ rows="{\
19523
+ parameters: {countMode: \'Inline\', numberOfExpandedLevels: 1, transitionMessagesOnly: true},\
19524
+ path: \'/ErhaOrder(\\\'1\\\')/to_Item\'\
19525
+ }"\
19526
+ visibleRowCount="4">\
19527
+ <Text id="itemName" text="{ErhaOrderItemName}" />\
19528
+ </t:TreeTable>';
19529
+
19530
+ this.expectHeadRequest()
19531
+ .expectRequest({ // triggered by ODataTreeBindingFlat#_requestServerIndexNodes
19532
+ batchNo: 1,
19533
+ headers: {"sap-messages": "transientOnly"},
19534
+ requestUri: "ErhaOrder('1')/to_Item?$skip=0&$top=104&$inlinecount=allpages"
19535
+ + "&$filter=HierarchyDistanceFromRoot le 1"
19536
+ }, {
19537
+ __count: "4",
19538
+ results: [{
19539
+ __metadata: {uri: "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='0')"},
19540
+ ErhaOrder: "1",
19541
+ ErhaOrderItem: "0",
19542
+ ErhaOrderItemName: "0",
19543
+ HierarchyParentNode: "",
19544
+ HierarchyDescendantCount: 0,
19545
+ HierarchyDistanceFromRoot: 0,
19546
+ HierarchyDrillState: "leaf",
19547
+ HierarchyNode: "0",
19548
+ HierarchyPreorderRank: 0,
19549
+ HierarchySiblingRank: 0
19550
+ }, {
19551
+ __metadata: {uri: "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='1')"},
19552
+ ErhaOrder: "1",
19553
+ ErhaOrderItem: "1",
19554
+ ErhaOrderItemName: "1",
19555
+ HierarchyParentNode: "",
19556
+ HierarchyDescendantCount: 2,
19557
+ HierarchyDistanceFromRoot: 0,
19558
+ HierarchyDrillState: "expanded",
19559
+ HierarchyNode: "1",
19560
+ HierarchyPreorderRank: 1,
19561
+ HierarchySiblingRank: 1
19562
+ }, {
19563
+ __metadata: {uri: "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='1.0')"},
19564
+ ErhaOrder: "1",
19565
+ ErhaOrderItem: "1.0",
19566
+ ErhaOrderItemName: "1.0",
19567
+ HierarchyParentNode: "1",
19568
+ HierarchyDescendantCount: 0,
19569
+ HierarchyDistanceFromRoot: 1,
19570
+ HierarchyDrillState: "collapsed",
19571
+ HierarchyNode: "1.0",
19572
+ HierarchyPreorderRank: 2,
19573
+ HierarchySiblingRank: 0
19574
+ }, {
19575
+ __metadata: {uri: "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='1.1')"},
19576
+ ErhaOrder: "1",
19577
+ ErhaOrderItem: "1.1",
19578
+ ErhaOrderItemName: "1.1",
19579
+ HierarchyParentNode: "1",
19580
+ HierarchyDescendantCount: 0,
19581
+ HierarchyDistanceFromRoot: 1,
19582
+ HierarchyDrillState: "leaf",
19583
+ HierarchyNode: "1.1",
19584
+ HierarchyPreorderRank: 3,
19585
+ HierarchySiblingRank: 1
19586
+ }]
19587
+ });
19588
+
19589
+ return this.createView(assert, sView, oModel).then(() => {
19590
+ oTable = this.oView.byId("table");
19591
+
19592
+ // don't use expectValue to avoid timing issues causing flaky tests
19593
+ assert.deepEqual(getTableContent(oTable), [["0"], ["1"], ["1.0"], ["1.1"]]);
19594
+
19595
+ this.expectRequest({ // triggered by ODataTreeBindingFlat#_requestChildren
19596
+ batchNo: 2,
19597
+ headers: {"sap-messages": "transientOnly"},
19598
+ requestUri: "ErhaOrder('1')/to_Item?$skip=0&$top=104&$inlinecount=allpages"
19599
+ + "&$filter=HierarchyParentNode eq '1.0'"
19600
+ }, {
19601
+ __count: "1",
19602
+ results: [{
19603
+ __metadata: {uri: "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='1.0.0')"},
19604
+ ErhaOrder: "1",
19605
+ ErhaOrderItem: "1.0.0",
19606
+ ErhaOrderItemName: "1.0.0",
19607
+ HierarchyParentNode: "1.0",
19608
+ HierarchyDescendantCount: 0,
19609
+ HierarchyDistanceFromRoot: 2,
19610
+ HierarchyDrillState: "leaf",
19611
+ HierarchyNode: "1.0.0",
19612
+ HierarchyPreorderRank: 0,
19613
+ HierarchySiblingRank: 0
19614
+ }]
19615
+ });
19616
+
19617
+ // code under test
19618
+ oTable.expand(2);
19619
+
19620
+ return this.waitForChanges(assert, "expand node '1.0'");
19621
+ }).then(() => {
19622
+ assert.deepEqual(getTableContent(oTable), [["0"], ["1"], ["1.0"], ["1.0.0"]]);
19623
+
19624
+ // code under test
19625
+ oTable.collapse(1);
19626
+
19627
+ return this.waitForChanges(assert, "collapse node '1'");
19628
+ }).then(() => {
19629
+ assert.deepEqual(getTableContent(oTable), [["0"], ["1"], [""], [""]]);
19630
+
19631
+ this.expectRequest({ // triggered by ODataTreeBindingFlat#_requestSubTree
19632
+ batchNo: 3,
19633
+ headers: {"sap-messages": "transientOnly"},
19634
+ requestUri: "ErhaOrder('1')/to_Item?$filter=HierarchyNode eq '1' and HierarchyDistanceFromRoot le 2"
19635
+ }, {
19636
+ __count: "3",
19637
+ results: [{
19638
+ __metadata: {uri: "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='1')"},
19639
+ ErhaOrder: "1",
19640
+ ErhaOrderItem: "1",
19641
+ ErhaOrderItemName: "1",
19642
+ HierarchyParentNode: "",
19643
+ HierarchyDescendantCount: 3,
19644
+ HierarchyDistanceFromRoot: 0,
19645
+ HierarchyDrillState: "expanded",
19646
+ HierarchyNode: "1",
19647
+ HierarchyPreorderRank: 1,
19648
+ HierarchySiblingRank: 1
19649
+ }, {
19650
+ __metadata: {uri: "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='1.0')"},
19651
+ ErhaOrder: "1",
19652
+ ErhaOrderItem: "1.0",
19653
+ ErhaOrderItemName: "1.0",
19654
+ HierarchyParentNode: "1",
19655
+ HierarchyDescendantCount: 1,
19656
+ HierarchyDistanceFromRoot: 1,
19657
+ HierarchyDrillState: "expanded",
19658
+ HierarchyNode: "1.0",
19659
+ HierarchyPreorderRank: 2,
19660
+ HierarchySiblingRank: 0
19661
+ }, {
19662
+ __metadata: {uri: "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='1.0.0')"},
19663
+ ErhaOrder: "1",
19664
+ ErhaOrderItem: "1.0.0",
19665
+ ErhaOrderItemName: "1.0.0",
19666
+ HierarchyParentNode: "1.0",
19667
+ HierarchyDescendantCount: 0,
19668
+ HierarchyDistanceFromRoot: 2,
19669
+ HierarchyDrillState: "leaf",
19670
+ HierarchyNode: "1.0.0",
19671
+ HierarchyPreorderRank: 0,
19672
+ HierarchySiblingRank: 0
19673
+ }, {
19674
+ __metadata: {uri: "ErhaOrderItem(ErhaOrder='1',ErhaOrderItem='1.1')"},
19675
+ ErhaOrder: "1",
19676
+ ErhaOrderItem: "1.1",
19677
+ ErhaOrderItemName: "1.1",
19678
+ HierarchyParentNode: "1",
19679
+ HierarchyDescendantCount: 0,
19680
+ HierarchyDistanceFromRoot: 1,
19681
+ HierarchyDrillState: "leaf",
19682
+ HierarchyNode: "1.1",
19683
+ HierarchyPreorderRank: 3,
19684
+ HierarchySiblingRank: 1
19685
+ }]
19686
+ });
19687
+
19688
+ return Promise.all([
19689
+ // code under test
19690
+ oTable.getBinding("rows").expandNodeToLevel(1, 2),
19691
+ this.waitForChanges(assert, "expand node '1' to level 2")
19692
+ ]);
19693
+ }).then(() => {
19694
+ assert.deepEqual(getTableContent(oTable), [["0"], ["1"], ["1.0"], ["1.0.0"]]);
19695
+ });
19696
+ });
19697
+
19327
19698
  //*********************************************************************************************
19328
19699
  // Scenario: A table has an inactive created entity. After rebinding the table and activating
19329
19700
  // this inactive entity, the createActivate-event of the ODataListBinding is properly handled.
@@ -20079,7 +20450,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20079
20450
  ]
20080
20451
  })
20081
20452
  .expectValue("SalesOrderID", ["1", "2"])
20082
- .expectValue("CreatedAt", ["Jan 25, 2023, 12:00:00 AM", "Jan 29, 2023, 11:00:00 PM"]);
20453
+ .expectValue("CreatedAt", ["Jan 25, 2023, 12:00:00\u202FAM", "Jan 29, 2023, 11:00:00\u202FPM"]);
20083
20454
 
20084
20455
  return this.createView(assert, sView, mModels).then(function () {
20085
20456
  that.oView.byId("DateRangeSelection").setValue("Jan 30, 2023 - Jan 31, 2023");
@@ -20087,7 +20458,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20087
20458
  return that.waitForChanges(assert);
20088
20459
  }).then(function () {
20089
20460
  that.expectValue("SalesOrderID", ["3"])
20090
- .expectValue("CreatedAt", ["Jan 31, 2023, 11:00:00 PM"]);
20461
+ .expectValue("CreatedAt", ["Jan 31, 2023, 11:00:00\u202FPM"]);
20091
20462
 
20092
20463
  // code under test
20093
20464
  that.oView.byId("Table").getBinding("items").filter(new Filter({
@@ -20453,8 +20824,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20453
20824
  }"\
20454
20825
  visibleRowCount="4">\
20455
20826
  <Text id="itemName" text="{ErhaOrderItemName}" />\
20456
- </t:TreeTable>',
20457
- that = this;
20827
+ </t:TreeTable>';
20458
20828
 
20459
20829
  this.expectHeadRequest()
20460
20830
  .expectRequest({
@@ -20465,13 +20835,15 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20465
20835
  }, {
20466
20836
  __count : "1",
20467
20837
  results : [oNode050]
20468
- })
20469
- .expectValue("itemName", ["node050", "", "", ""]);
20838
+ });
20470
20839
 
20471
- return this.createView(assert, sView, oModel).then(function () {
20472
- oTable = that.oView.byId("table");
20840
+ return this.createView(assert, sView, oModel).then(() => {
20841
+ oTable = this.oView.byId("table");
20473
20842
 
20474
- that.expectRequest({
20843
+ // don't use expectValue to avoid timing issues causing flaky tests
20844
+ assert.deepEqual(getTableContent(oTable), [["node050"], [""], [""], [""]]);
20845
+
20846
+ this.expectRequest({
20475
20847
  batchNo : 2,
20476
20848
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=104&$inlinecount=allpages"
20477
20849
  + "&$filter=HierarchyDistanceFromRoot le 0"
@@ -20479,8 +20851,7 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20479
20851
  }, {
20480
20852
  __count : "1",
20481
20853
  results : [oNode100]
20482
- })
20483
- .expectValue("itemName", ["node100"], 0);
20854
+ });
20484
20855
 
20485
20856
  // code under test
20486
20857
  oTable.getBinding("rows").filter([
@@ -20488,9 +20859,11 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20488
20859
  new Filter("CreatedByUser", FilterOperator.EQ, "user3")
20489
20860
  ], FilterType.Application);
20490
20861
 
20491
- return that.waitForChanges(assert);
20492
- }).then(function () {
20493
- that.expectRequest({
20862
+ return this.waitForChanges(assert);
20863
+ }).then(() => {
20864
+ assert.deepEqual(getTableContent(oTable), [["node100"], [""], [""], [""]]);
20865
+
20866
+ this.expectRequest({
20494
20867
  batchNo : 3,
20495
20868
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=104&$inlinecount=allpages"
20496
20869
  + "&$filter=HierarchyParentNode eq '100'"
@@ -20498,27 +20871,29 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20498
20871
  }, {
20499
20872
  __count : "2",
20500
20873
  results : [oNode200, oNode300]
20501
- })
20502
- .expectValue("itemName", ["node200", "node300"], 1);
20874
+ });
20503
20875
 
20504
20876
  oTable.expand(0);
20505
20877
 
20506
- return that.waitForChanges(assert);
20507
- }).then(function () {
20508
- that.expectRequest({
20878
+ return this.waitForChanges(assert);
20879
+ }).then(() => {
20880
+ assert.deepEqual(getTableContent(oTable), [["node100"], ["node200"], ["node300"], [""]]);
20881
+
20882
+ this.expectRequest({
20509
20883
  batchNo : 4,
20510
20884
  requestUri : "ErhaOrder('1')/to_Item?$skip=0&$top=104&$inlinecount=allpages"
20511
20885
  + "&$filter=HierarchyDistanceFromRoot le 0"
20512
20886
  }, {
20513
20887
  __count : "2",
20514
20888
  results : [oNode050, oNode100NoFilter]
20515
- })
20516
- .expectValue("itemName", ["node050", "node100", ""]);
20889
+ });
20517
20890
 
20518
20891
  // code under test
20519
20892
  oTable.getBinding("rows").filter([], FilterType.Application);
20520
20893
 
20521
- return that.waitForChanges(assert);
20894
+ return this.waitForChanges(assert);
20895
+ }).then(() => {
20896
+ assert.deepEqual(getTableContent(oTable), [["node050"], ["node100"], [""], [""]]);
20522
20897
  });
20523
20898
  });
20524
20899
 
@@ -20814,11 +21189,14 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20814
21189
  checkServiceCache(["token0", "token1"]);
20815
21190
  }).finally(clearCaches);
20816
21191
  });
21192
+
20817
21193
  //*********************************************************************************************
20818
21194
  // Scenario: For a table where transient entries have messages, the filter returned by requestFilterForMessages does
20819
- // not refer to these entries. For the BCP incident, check the case no item loaded from the backend has a message:
20820
- // the filter is null then.
21195
+ // not refer to these entries. For the BCP incident, check the case that no item loaded from the backend has a
21196
+ // message: the filter is Filter.NONE then.
20821
21197
  // BCP: 2370088390
21198
+ // When the list is filtered only the transient entry is shown and no entries are requested.
21199
+ // JIRA: CPOUI5MODELS-1421
20822
21200
  QUnit.test("Filter table where only transient items have messages", function (assert) {
20823
21201
  let oCreatedContext, oRowsBinding;
20824
21202
  const oModel = createSalesOrdersModel({preliminaryContext : true});
@@ -20878,7 +21256,289 @@ ToProduct/ToSupplier/BusinessPartnerID\'}}">\
20878
21256
  this.waitForChanges(assert)
20879
21257
  ]);
20880
21258
  }).then((aResults) => {
20881
- assert.strictEqual(aResults[0], null, "no message filter, only transient item has message");
21259
+ assert.strictEqual(aResults[0], Filter.NONE, "Filter.NONE message filter, only transient item has message");
21260
+
21261
+ this.expectValue("itemPosition", "", 1)
21262
+ .expectValue("note", "", 1);
21263
+
21264
+ oRowsBinding.filter(aResults[0], FilterType.Application);
21265
+
21266
+ return this.waitForChanges(assert);
21267
+ });
21268
+ });
21269
+
21270
+ //*********************************************************************************************
21271
+ // Scenario: For a table where only transient entries have messages, the filter returned by requestFilterForMessages
21272
+ // is Filter.NONE. When the list is filtered, only the transient entries are shown and no $filter and no $count
21273
+ // request occurs. It is still possible to create new inactive entries. Check that count and length of the binding
21274
+ // is always correct.
21275
+ // JIRA:CPOUI5MODELS-1421
21276
+ ["Default", "Client"].forEach((sOperationMode) => {
21277
+ const sTitle = "Filter table where only transient items have messages: operation mode=" + sOperationMode;
21278
+ QUnit.test(sTitle, function (assert) {
21279
+ let oMessage, oRowsBinding, oTable;
21280
+ let aExpectedMessages = [];
21281
+ const oModel = createSalesOrdersModel({
21282
+ defaultBindingMode : BindingMode.TwoWay,
21283
+ defaultCountMode : CountMode.Request,
21284
+ defaultOperationMode : sOperationMode,
21285
+ preliminaryContext : true
21286
+ });
21287
+ const sView = '\
21288
+ <t:Table id="table" rows="{/SalesOrderSet(\'1\')/ToLineItems}" visibleRowCount="3">\
21289
+ <Input id="itemPosition" value="{ItemPosition}" />\
21290
+ <Input id="note" value="{Note}" />\
21291
+ </t:Table>';
21292
+ const that = this;
21293
+
21294
+ /* Prevents activation of passed inactive context, adds a message to the message model for
21295
+ this context, creates another inactive context at the end if ItemPosition is empty.*/
21296
+ function onCreateActivate(oEvent) {
21297
+ const oCreatedContext = oEvent.getParameter("context");
21298
+ if (!oCreatedContext.getObject("").ItemPosition) {
21299
+ oMessage = {
21300
+ message : "Item position is required",
21301
+ type : "Error",
21302
+ target : oCreatedContext.getPath() + "/ItemPosition",
21303
+ fullTarget : oCreatedContext.getDeepPath() + "/ItemPosition",
21304
+ processor : oModel
21305
+ };
21306
+ aExpectedMessages.push(oMessage);
21307
+ that.expectMessages(aExpectedMessages);
21308
+ Messaging.addMessages(new Message(oMessage));
21309
+ oEvent.preventDefault();
21310
+ } else {
21311
+ const aCurrentMessages = Messaging.getMessageModel().getObject("/");
21312
+ aCurrentMessages.some((oMessage) => {
21313
+ if (oMessage.getTargets()[0] === oCreatedContext.getPath() + "/ItemPosition") {
21314
+ Messaging.removeMessages(oMessage);
21315
+ aExpectedMessages = aExpectedMessages.slice(0, 1);
21316
+ return true;
21317
+ }
21318
+ return false;
21319
+ });
21320
+ that.expectMessages(aExpectedMessages);
21321
+
21322
+ return; // do not create another inactive row
21323
+ }
21324
+
21325
+ // code under test - create works also if binding length is not final but Filter.NONE is set
21326
+ oRowsBinding.create({}, /*bAtEnd*/ true, {inactive: true});
21327
+ }
21328
+
21329
+ this.expectHeadRequest()
21330
+ .expectRequest("SalesOrderSet('1')/ToLineItems/$count", "1")
21331
+ .expectRequest({
21332
+ requestUri : "SalesOrderSet('1')/ToLineItems"
21333
+ + (sOperationMode === "Default" ? "?$skip=0&$top=103" : "")
21334
+ }, {
21335
+ results : [{
21336
+ __metadata : {
21337
+ uri : "SalesOrderLineItemSet(SalesOrderID='1',ItemPosition='10')"
21338
+ },
21339
+ Note : "Bar",
21340
+ ItemPosition : "10",
21341
+ SalesOrderID : "1"
21342
+ }]
21343
+ })
21344
+ .expectValue("itemPosition", ["10", "", ""])
21345
+ .expectValue("note", ["Bar", "", ""]);
21346
+
21347
+ return this.createView(assert, sView, oModel).then(() => {
21348
+ oTable = this.oView.byId("table");
21349
+ oRowsBinding = oTable.getBinding("rows");
21350
+ oRowsBinding.attachCreateActivate(onCreateActivate);
21351
+ oRowsBinding.create({}, /*bAtEnd*/ true, {inactive: true});
21352
+
21353
+ assert.strictEqual(oRowsBinding.getCount(), 1, "1 active entry - count 1");
21354
+ assert.strictEqual(oRowsBinding.getLength(), 2, "length is 2");
21355
+
21356
+ return this.waitForChanges(assert);
21357
+ }).then(() => {
21358
+ this.expectValue("note", "Foo", 1)
21359
+ .expectValueState(oTable.getRows()[0].getCells()[0], "None", "")
21360
+ .expectValueState(oTable.getRows()[1].getCells()[0], "Error", "Item position is required")
21361
+ .expectValueState(oTable.getRows()[2].getCells()[0], "None", "");
21362
+
21363
+ oTable.getRows()[1].getCells()[1].setValue("Foo");
21364
+
21365
+ return this.waitForChanges(assert);
21366
+ }).then(() => {
21367
+ assert.strictEqual(oRowsBinding.getCount(), 1, "1 active entry - count 1");
21368
+ assert.strictEqual(oRowsBinding.getLength(), 3, "length is 3");
21369
+
21370
+ return Promise.all([
21371
+ oRowsBinding.requestFilterForMessages(),
21372
+ this.waitForChanges(assert)
21373
+ ]);
21374
+ }).then((aResults) => {
21375
+ assert.strictEqual(aResults[0], Filter.NONE, "only transient items have messages");
21376
+
21377
+ this.expectValue("itemPosition", "", 0)
21378
+ .expectValue("note", "Foo", 0)
21379
+ .expectValue("note", "", 1)
21380
+ .expectValueState(oTable.getRows()[0].getCells()[0], "Error", "Item position is required")
21381
+ .expectValueState(oTable.getRows()[1].getCells()[0], "None", "")
21382
+ .expectValueState(oTable.getRows()[2].getCells()[0], "None", "");
21383
+
21384
+ // code under test - no requests
21385
+ oRowsBinding.filter(aResults[0], FilterType.Application);
21386
+
21387
+ assert.strictEqual(oRowsBinding.getCount(), 0, "no active entry - count 0");
21388
+ assert.strictEqual(oRowsBinding.getLength(), 2, "length is 2");
21389
+
21390
+ return this.waitForChanges(assert);
21391
+ }).then(() => {
21392
+ this.expectValue("note", "Bar", 1)
21393
+ .expectValueState(oTable.getRows()[0].getCells()[0], "Error", "Item position is required")
21394
+ .expectValueState(oTable.getRows()[1].getCells()[0], "Error", "Item position is required")
21395
+ .expectValueState(oTable.getRows()[2].getCells()[0], "None", "");
21396
+
21397
+ oTable.getRows()[1].getCells()[1].setValue("Bar");
21398
+
21399
+ return this.waitForChanges(assert);
21400
+ }).then(() => {
21401
+ this.expectValue("itemPosition", "30", 1)
21402
+ .expectValueState(oTable.getRows()[0].getCells()[0], "Error", "Item position is required")
21403
+ .expectValueState(oTable.getRows()[1].getCells()[0], "None", "")
21404
+ .expectValueState(oTable.getRows()[2].getCells()[0], "None", "");
21405
+
21406
+ oTable.getRows()[1].getCells()[0].setValue("30");
21407
+
21408
+ return this.waitForChanges(assert);
21409
+ }).then(() => {
21410
+ assert.strictEqual(oRowsBinding.getCount(), 1, "one active entry - count 1");
21411
+ assert.strictEqual(oRowsBinding.getLength(), 3, "length is 3");
21412
+ if (sOperationMode === "Default" ) {
21413
+ this.expectRequest("SalesOrderSet('1')/ToLineItems/$count", "1")
21414
+ .expectRequest({
21415
+ requestUri : "SalesOrderSet('1')/ToLineItems?$skip=0&$top=103"
21416
+ }, {
21417
+ results : [{
21418
+ __metadata : {
21419
+ uri : "SalesOrderLineItemSet(SalesOrderID='1',ItemPosition='10')"
21420
+ },
21421
+ Note : "Bar",
21422
+ ItemPosition : "10",
21423
+ SalesOrderID : "1"
21424
+ }]
21425
+ });
21426
+ }
21427
+ this.expectValue("itemPosition", ["10", "", "30"])
21428
+ .expectValue("note", ["Bar", "Foo", "Bar"]);
21429
+
21430
+ // code under test
21431
+ oRowsBinding.filter([], FilterType.Application);
21432
+
21433
+ return this.waitForChanges(assert);
21434
+ }).then(() => {
21435
+ assert.strictEqual(oRowsBinding.getCount(), 2, "1 active entry - count 1");
21436
+ assert.strictEqual(oRowsBinding.getLength(), 4, "length is 4");
21437
+
21438
+ return Promise.all([
21439
+ // code under test (filter out all messages)
21440
+ oRowsBinding.requestFilterForMessages(() => false),
21441
+ this.waitForChanges(assert)
21442
+ ]);
21443
+ }).then((aResults) => {
21444
+ assert.strictEqual(aResults[0], null);
21445
+ });
21446
+ });
21447
+ });
21448
+
21449
+ //*********************************************************************************************
21450
+ // Scenario: The data state of a control in a table needs to be reevaluated if the row context changes but the
21451
+ // value of the property binding does not change.
21452
+ // JIRA: CPOUI5MODELS-1421
21453
+ QUnit.test("Filter table with messages, every line has the correct data state", function (assert) {
21454
+ let oRowsBinding, oTable;
21455
+ const oModel = createSalesOrdersModel({preliminaryContext : true});
21456
+ const oResponseMessage = this.createResponseMessage("(SalesOrderID='1',ItemPosition='20')/Note",
21457
+ "~errorMessage");
21458
+ const sView = '\
21459
+ <t:Table id="table" rows="{/SalesOrderSet(\'1\')/ToLineItems}" visibleRowCount="3">\
21460
+ <Input id="note" value="{Note}" />\
21461
+ </t:Table>';
21462
+
21463
+ this.expectHeadRequest()
21464
+ .expectRequest({
21465
+ requestUri : "SalesOrderSet('1')/ToLineItems?$skip=0&$top=103"
21466
+ }, {
21467
+ results : [{
21468
+ __metadata : {
21469
+ uri : "SalesOrderLineItemSet(SalesOrderID='1',ItemPosition='10')"
21470
+ },
21471
+ Note : "Bar",
21472
+ ItemPosition : "10",
21473
+ SalesOrderID : "1"
21474
+ }, {
21475
+ __metadata : {
21476
+ uri : "SalesOrderLineItemSet(SalesOrderID='1',ItemPosition='20')"
21477
+ },
21478
+ Note : "Baz",
21479
+ ItemPosition : "20",
21480
+ SalesOrderID : "1"
21481
+ }, {
21482
+ __metadata : {
21483
+ uri : "SalesOrderLineItemSet(SalesOrderID='1',ItemPosition='30')"
21484
+ },
21485
+ Note : "Baz", // same value as for 20
21486
+ ItemPosition : "30",
21487
+ SalesOrderID : "1"
21488
+ }]
21489
+ }, {
21490
+ "sap-message" : getMessageHeader(oResponseMessage)
21491
+ })
21492
+ .expectValue("note", ["Bar", "Baz", "Baz"])
21493
+ .expectMessage(oResponseMessage, "/SalesOrderLineItemSet", "/SalesOrderSet('1')/ToLineItems");
21494
+
21495
+ return this.createView(assert, sView, oModel).then(() => {
21496
+ oTable = this.oView.byId("table");
21497
+ oRowsBinding = oTable.getBinding("rows");
21498
+
21499
+ this.expectValueState(oTable.getRows()[0].getCells()[0], "None", "")
21500
+ .expectValueState(oTable.getRows()[1].getCells()[0], "Error", "~errorMessage")
21501
+ .expectValueState(oTable.getRows()[2].getCells()[0], "None", "");
21502
+
21503
+ return this.waitForChanges(assert);
21504
+ }).then(() => {
21505
+ this.expectRequest({
21506
+ requestUri : "SalesOrderSet('1')/ToLineItems?$skip=0&$top=103&$filter=ItemPosition gt '10'"
21507
+ }, {
21508
+ results : [{
21509
+ __metadata : {
21510
+ uri : "SalesOrderLineItemSet(SalesOrderID='1',ItemPosition='20')"
21511
+ },
21512
+ Note : "Baz",
21513
+ ItemPosition : "20",
21514
+ SalesOrderID : "1"
21515
+ }, {
21516
+ __metadata : {
21517
+ uri : "SalesOrderLineItemSet(SalesOrderID='1',ItemPosition='30')"
21518
+ },
21519
+ Note : "Baz", // same value as for 20
21520
+ ItemPosition : "30",
21521
+ SalesOrderID : "1"
21522
+ }]
21523
+ }, {
21524
+ "sap-message" : getMessageHeader(oResponseMessage)
21525
+ })
21526
+ .expectValue("note", "Baz", 0)
21527
+ .expectValue("note", "", 2)
21528
+ .expectMessage(oResponseMessage, "/SalesOrderLineItemSet", "/SalesOrderSet('1')/ToLineItems", true)
21529
+ .expectValueState(oTable.getRows()[0].getCells()[0], "Error", "~errorMessage")
21530
+ .expectValueState(oTable.getRows()[1].getCells()[0], "None", "")
21531
+ .expectValueState(oTable.getRows()[2].getCells()[0], "None", "");
21532
+
21533
+ // filter out item 10
21534
+ oRowsBinding.filter(new Filter({
21535
+ path : "ItemPosition",
21536
+ operator : FilterOperator.GT,
21537
+ value1 : "10"
21538
+ })
21539
+ );
21540
+
21541
+ return this.waitForChanges(assert);
20882
21542
  });
20883
21543
  });
20884
21544
  });