@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
@@ -1,5 +1,5 @@
1
- /*global QUnit, sinon */
2
1
  sap.ui.define([
2
+ "sap/base/Log",
3
3
  "sap/base/util/extend",
4
4
  "sap/ui/core/format/DateFormat",
5
5
  "sap/ui/core/Locale",
@@ -8,21 +8,30 @@ sap.ui.define([
8
8
  "sap/ui/core/date/UI5Date",
9
9
  "sap/ui/core/library",
10
10
  "sap/ui/core/Configuration",
11
+ "sap/ui/core/Supportability",
11
12
  "sap/ui/core/date/CalendarWeekNumbering",
12
- "sap/ui/test/TestUtils"
13
- ], function (extend, DateFormat, Locale, LocaleData, UniversalDate, UI5Date, library, Configuration,
14
- CalendarWeekNumbering, TestUtils) {
13
+ "sap/ui/test/TestUtils",
14
+ // load all required calendars in advance
15
+ "sap/ui/core/date/Buddhist",
16
+ "sap/ui/core/date/Gregorian",
17
+ "sap/ui/core/date/Islamic",
18
+ "sap/ui/core/date/Japanese",
19
+ "sap/ui/core/date/Persian"
20
+ ], function (Log, extend, DateFormat, Locale, LocaleData, UniversalDate, UI5Date, library, Configuration,
21
+ Supportability, CalendarWeekNumbering, TestUtils) {
15
22
  "use strict";
16
-
17
- // shortcut for sap.ui.core.CalendarType
18
- var CalendarType = library.CalendarType;
19
-
20
- var oDateTime = UI5Date.getInstance("Tue Sep 23 06:46:13 2000 GMT+0000"),
21
- oTZDateTime = UI5Date.getInstance("Tue Sep 23 03:46:13 2000 GMT+0530"),
22
- oDefaultDate = DateFormat.getInstance(),
23
- oDefaultDateTime = DateFormat.getDateTimeInstance(),
24
- oDefaultTime = DateFormat.getTimeInstance(),
25
- sDefaultTimezone = Configuration.getTimezone();
23
+ /* eslint-disable max-nested-callbacks */
24
+ /*global QUnit, sinon */
25
+
26
+ // shortcut for sap.ui.core.CalendarType
27
+ const CalendarType = library.CalendarType;
28
+ const oDateTime = UI5Date.getInstance("Tue Sep 23 06:46:13 2000 GMT+0000");
29
+ const oTZDateTime = UI5Date.getInstance("Tue Sep 23 03:46:13 2000 GMT+0530");
30
+ const oDefaultDate = DateFormat.getInstance();
31
+ const oDefaultDateTime = DateFormat.getDateTimeInstance();
32
+ const oDefaultTime = DateFormat.getTimeInstance();
33
+ const sDefaultTimezone = Configuration.getTimezone();
34
+ const sDefaultLanguage = Configuration.getLanguage();
26
35
 
27
36
  //*********************************************************************************************
28
37
  QUnit.module("DateFormat instantiation and parseCldrDatePattern");
@@ -184,7 +193,7 @@ sap.ui.define([
184
193
 
185
194
  assert.deepEqual(oFormat.intervalPatterns, [
186
195
  "M/d/y'...'M/d/y",
187
- "M/d/y – M/d/y",
196
+ "M/d/y\u2009\u2013\u2009M/d/y",
188
197
  "M/d/y",
189
198
  "M/d/y - M/d/y"
190
199
  ]);
@@ -250,31 +259,46 @@ sap.ui.define([
250
259
 
251
260
  QUnit.test("format default date", function (assert) {
252
261
  assert.strictEqual(oDefaultDate.format(oDateTime), "Sep 23, 2000", "default date");
253
- assert.strictEqual(oDefaultDateTime.format(oDateTime), "Sep 23, 2000, 8:46:13 AM", "default datetime");
254
- assert.strictEqual(oDefaultTime.format(oDateTime), "8:46:13 AM", "default time");
262
+ assert.strictEqual(oDefaultDateTime.format(oDateTime), "Sep 23, 2000, 8:46:13\u202fAM", "default datetime");
263
+ assert.strictEqual(oDefaultTime.format(oDateTime), "8:46:13\u202fAM", "default time");
255
264
  });
256
265
 
257
266
  QUnit.test("format default date UTC", function (assert) {
258
267
  assert.strictEqual(oDefaultDate.format(oTZDateTime, true), "Sep 22, 2000", "default date UTC");
259
- assert.strictEqual(oDefaultDateTime.format(oTZDateTime, true), "Sep 22, 2000, 10:16:13 PM", "default datetime UTC");
260
- assert.strictEqual(oDefaultTime.format(oTZDateTime, true), "10:16:13 PM", "default time UTC");
268
+ assert.strictEqual(oDefaultDateTime.format(oTZDateTime, true), "Sep 22, 2000, 10:16:13\u202fPM",
269
+ "default datetime UTC");
270
+ assert.strictEqual(oDefaultTime.format(oTZDateTime, true), "10:16:13\u202fPM", "default time UTC");
261
271
  });
262
272
 
263
273
  QUnit.test("format date with given style", function (assert) {
264
- assert.strictEqual(DateFormat.getDateInstance({ style: "short" }).format(oDateTime), "9/23/00", "short date");
265
- assert.strictEqual(DateFormat.getDateInstance({ style: "medium" }).format(oDateTime), "Sep 23, 2000", "medium date");
266
- assert.strictEqual(DateFormat.getDateInstance({ style: "long" }).format(oDateTime), "September 23, 2000", "long date");
267
- assert.strictEqual(DateFormat.getDateInstance({ style: "full" }).format(oDateTime), "Saturday, September 23, 2000", "full date");
268
- assert.strictEqual(DateFormat.getDateTimeInstance({ style: "short" }).format(oDateTime), "9/23/00, 8:46 AM", "short datetime");
269
- assert.strictEqual(DateFormat.getDateTimeInstance({ style: "medium" }).format(oDateTime), "Sep 23, 2000, 8:46:13 AM", "medium datetime");
270
- assert.strictEqual(DateFormat.getDateTimeInstance({ style: "long" }).format(oDateTime), "September 23, 2000 at 8:46:13 AM GMT+02:00", "long datetime");
271
- assert.strictEqual(DateFormat.getDateTimeInstance({ style: "full" }).format(oDateTime), "Saturday, September 23, 2000 at 8:46:13 AM GMT+02:00", "full datetime");
272
- assert.strictEqual(DateFormat.getDateTimeInstance({ style: "medium/short" }).format(oDateTime), "Sep 23, 2000, 8:46 AM", "medium/short datetime");
273
- assert.strictEqual(DateFormat.getDateTimeInstance({ style: "long/medium" }).format(oDateTime), "September 23, 2000 at 8:46:13 AM", "long/medium datetime");
274
- assert.strictEqual(DateFormat.getTimeInstance({ style: "short" }).format(oDateTime), "8:46 AM", "short time");
275
- assert.strictEqual(DateFormat.getTimeInstance({ style: "medium" }).format(oDateTime), "8:46:13 AM", "medium time");
276
- assert.strictEqual(DateFormat.getTimeInstance({ style: "long" }).format(oDateTime), "8:46:13 AM GMT+02:00", "long time");
277
- assert.strictEqual(DateFormat.getTimeInstance({ style: "full" }).format(oDateTime), "8:46:13 AM GMT+02:00", "full time");
274
+ assert.strictEqual(DateFormat.getDateInstance({ style: "short" }).format(oDateTime),
275
+ "9/23/00", "short date");
276
+ assert.strictEqual(DateFormat.getDateInstance({ style: "medium" }).format(oDateTime),
277
+ "Sep 23, 2000", "medium date");
278
+ assert.strictEqual(DateFormat.getDateInstance({ style: "long" }).format(oDateTime),
279
+ "September 23, 2000", "long date");
280
+ assert.strictEqual(DateFormat.getDateInstance({ style: "full" }).format(oDateTime),
281
+ "Saturday, September 23, 2000", "full date");
282
+ assert.strictEqual(DateFormat.getDateTimeInstance({ style: "short" }).format(oDateTime),
283
+ "9/23/00, 8:46\u202fAM", "short datetime");
284
+ assert.strictEqual(DateFormat.getDateTimeInstance({ style: "medium" }).format(oDateTime),
285
+ "Sep 23, 2000, 8:46:13\u202fAM", "medium datetime");
286
+ assert.strictEqual(DateFormat.getDateTimeInstance({ style: "long" }).format(oDateTime),
287
+ "September 23, 2000, 8:46:13\u202fAM GMT+02:00", "long datetime");
288
+ assert.strictEqual(DateFormat.getDateTimeInstance({ style: "full" }).format(oDateTime),
289
+ "Saturday, September 23, 2000, 8:46:13\u202fAM GMT+02:00", "full datetime");
290
+ assert.strictEqual(DateFormat.getDateTimeInstance({ style: "medium/short" }).format(oDateTime),
291
+ "Sep 23, 2000, 8:46\u202fAM", "medium/short datetime");
292
+ assert.strictEqual(DateFormat.getDateTimeInstance({ style: "long/medium" }).format(oDateTime),
293
+ "September 23, 2000, 8:46:13\u202fAM", "long/medium datetime");
294
+ assert.strictEqual(DateFormat.getTimeInstance({ style: "short" }).format(oDateTime),
295
+ "8:46\u202fAM", "short time");
296
+ assert.strictEqual(DateFormat.getTimeInstance({ style: "medium" }).format(oDateTime),
297
+ "8:46:13\u202fAM", "medium time");
298
+ assert.strictEqual(DateFormat.getTimeInstance({ style: "long" }).format(oDateTime),
299
+ "8:46:13\u202fAM GMT+02:00", "long time");
300
+ assert.strictEqual(DateFormat.getTimeInstance({ style: "full" }).format(oDateTime),
301
+ "8:46:13\u202fAM GMT+02:00", "full time");
278
302
  });
279
303
 
280
304
  QUnit.test("format date for a specific locale", function (assert) {
@@ -1886,7 +1910,7 @@ sap.ui.define([
1886
1910
  {pattern : "hh:mm aa", formatted : "07:37 priešpiet"},
1887
1911
  {pattern : "hh:mm aaa", formatted : "07:37 priešpiet"},
1888
1912
  {pattern : "hh:mm aaaa", formatted : "07:37 priešpiet"},
1889
- {pattern : "hh:mm aaaaa", formatted : "07:37 pr.\xa0p."}
1913
+ {pattern : "hh:mm aaaaa", formatted : "07:37 pr.\u202fp."}
1890
1914
  ].forEach(function (oFixture, i) {
1891
1915
  QUnit.test("format/parse time with day period, narrow pattern differs #" + i,
1892
1916
  function (assert) {
@@ -1925,9 +1949,11 @@ sap.ui.define([
1925
1949
 
1926
1950
  var aCompare = [UI5Date.getInstance(2017, 3, 11), UI5Date.getInstance(2017, 3, 17)];
1927
1951
 
1928
- // the correct pattern is MMM d – d, y
1929
- assert.deepEqual(oIntervalFormat.parse("Apr 11–17, 2017"), aCompare, "string with missing spaces can also be parsed");
1930
- assert.deepEqual(oIntervalFormat.parse("Apr11–17, 2017"), aCompare, "string with missing spaces and redundant spaces can also be parsed");
1952
+ // the correct pattern is MMM d\u2009\u2013\u2009d, y
1953
+ assert.deepEqual(oIntervalFormat.parse("Apr 11\u201317, 2017"), aCompare,
1954
+ "string with missing spaces can also be parsed");
1955
+ assert.deepEqual(oIntervalFormat.parse("Apr11\u201317, 2017"), aCompare,
1956
+ "string with missing spaces and redundant spaces can also be parsed");
1931
1957
  });
1932
1958
 
1933
1959
  /** TODO: Move to sap.ui.core.date.Gregorian
@@ -2510,7 +2536,7 @@ sap.ui.define([
2510
2536
 
2511
2537
  //*********************************************************************************************
2512
2538
  QUnit.test("origin info", function (assert) {
2513
- var oOriginInfoStub = this.stub(Configuration, "getOriginInfo").returns(true);
2539
+ var oOriginInfoStub = this.stub(Supportability, "collectOriginInfo").returns(true);
2514
2540
  var oOriginDate = DateFormat.getInstance(), sValue = oOriginDate.format(oDateTime), oInfo = sValue.originInfo;
2515
2541
  assert.strictEqual(oInfo.source, "Common Locale Data Repository", "Origin Info: source");
2516
2542
  assert.strictEqual(oInfo.locale, "en-US", "Origin Info: locale");
@@ -2519,7 +2545,6 @@ sap.ui.define([
2519
2545
  oOriginInfoStub.restore();
2520
2546
  });
2521
2547
 
2522
- var sDefaultLanguage = Configuration.getLanguage();
2523
2548
  QUnit.module("Calendar Week precedence", {
2524
2549
  beforeEach: function () {
2525
2550
  Configuration.setLanguage("de_DE"); // ISO 8601
@@ -2712,19 +2737,33 @@ sap.ui.define([
2712
2737
  scale: "auto",
2713
2738
  data: [
2714
2739
  { unit: "second", diff: 0, results: ["now", "now", "now", "now"], description: "now" },
2715
- { unit: "second", diff: 1, results: ["in 1 second", "in 1 second", "in 1 sec.", "in 1 sec."], description: "Now + 1 Second --> in 1 second" },
2716
- { unit: "second", diff: -1, results: ["1 second ago", "1 second ago", "1 sec. ago", "1 sec. ago"], description: "Now - 1 Second --> 1 second ago" },
2717
- { unit: "second", diff: 2, results: ["in 2 seconds", "in 2 seconds", "in 2 sec.", "in 2 sec."], description: "Now + 2 Seconds --> in 2 seconds" },
2718
- { unit: "second", diff: -7, results: ["7 seconds ago", "7 seconds ago", "7 sec. ago", "7 sec. ago"], description: "Now + 2 Seconds --> in 2 seconds" },
2719
- { unit: "second", diff: 61, results: ["in 1 minute", "in 1 minute", "in 1 min.", "in 1 min."], description: "Now + 61 Seconds --> in 1 minute", parseDiff: 1000 },
2720
- { unit: "second", diff: 3601, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1 hr."], description: "Now + 3601 Seconds --> in 1 hour", parseDiff: 1000 },
2721
- { unit: "minute", diff: 1, results: ["in 1 minute", "in 1 minute", "in 1 min.", "in 1 min."], description: "Now + 1 Minute --> in 1 minute" },
2722
- { unit: "minute", diff: -1, results: ["1 minute ago", "1 minute ago", "1 min. ago", "1 min. ago"], description: "Now - 1 Minute --> 1 minute ago" },
2723
- { unit: "minute", diff: 13, results: ["in 13 minutes", "in 13 minutes", "in 13 min.", "in 13 min."], description: "Now + 13 Minutes --> in 13 minutes" },
2724
- { unit: "minute", diff: -54, results: ["54 minutes ago", "54 minutes ago", "54 min. ago", "54 min. ago"], description: "Now - 54 Minutes --> 54 minutes ago" },
2725
- { unit: "minute", diff: 95, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1 hr."], description: "Now + 95 Minutes --> in 1 hour", parseDiff: 35 * 60 * 1000 },
2726
- { unit: "hour", diff: 1, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1 hr."], description: "Now + 1 Hour --> in 1 hour" },
2727
- { unit: "day", diff: -5, results: ["120 hours ago", "120 hours ago", "120 hr. ago", "120 hr. ago"], description: "Now - 5 Days --> 120 hours ago" }
2740
+ { unit: "second", diff: 1, results: ["in 1 second", "in 1 second", "in 1 sec.", "in 1s"],
2741
+ description: "Now + 1 Second --> in 1 second" },
2742
+ { unit: "second", diff: -1, results: ["1 second ago", "1 second ago", "1 sec. ago", "1s ago"],
2743
+ description: "Now - 1 Second --> 1 second ago" },
2744
+ { unit: "second", diff: 2, results: ["in 2 seconds", "in 2 seconds", "in 2 sec.", "in 2s"],
2745
+ description: "Now + 2 Seconds --> in 2 seconds" },
2746
+ { unit: "second", diff: -7, results: ["7 seconds ago", "7 seconds ago", "7 sec. ago", "7s ago"],
2747
+ description: "Now + 2 Seconds --> in 2 seconds" },
2748
+ { unit: "second", diff: 61, results: ["in 1 minute", "in 1 minute", "in 1 min.", "in 1m"],
2749
+ description: "Now + 61 Seconds --> in 1 minute", parseDiff: 1000 },
2750
+ { unit: "second", diff: 3601, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1h"],
2751
+ description: "Now + 3601 Seconds --> in 1 hour", parseDiff: 1000 },
2752
+ { unit: "minute", diff: 1, results: ["in 1 minute", "in 1 minute", "in 1 min.", "in 1m"],
2753
+ description: "Now + 1 Minute --> in 1 minute" },
2754
+ { unit: "minute", diff: -1, results: ["1 minute ago", "1 minute ago", "1 min. ago", "1m ago"],
2755
+ description: "Now - 1 Minute --> 1 minute ago" },
2756
+ { unit: "minute", diff: 13, results: ["in 13 minutes", "in 13 minutes", "in 13 min.", "in 13m"],
2757
+ description: "Now + 13 Minutes --> in 13 minutes" },
2758
+ { unit: "minute", diff: -54,
2759
+ results: ["54 minutes ago", "54 minutes ago", "54 min. ago", "54m ago"],
2760
+ description: "Now - 54 Minutes --> 54 minutes ago" },
2761
+ { unit: "minute", diff: 95, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1h"],
2762
+ description: "Now + 95 Minutes --> in 1 hour", parseDiff: 35 * 60 * 1000 },
2763
+ { unit: "hour", diff: 1, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1h"],
2764
+ description: "Now + 1 Hour --> in 1 hour" },
2765
+ { unit: "day", diff: -5, results: ["120 hours ago", "120 hours ago", "120 hr. ago", "120h ago"],
2766
+ description: "Now - 5 Days --> 120 hours ago" }
2728
2767
  ]
2729
2768
  }, {
2730
2769
  scale: "hour",
@@ -2733,9 +2772,12 @@ sap.ui.define([
2733
2772
  { unit: "second", diff: 1, results: ["this hour", "this hour", "this hour", "this hour"], description: "Now + 1 Second --> this hour", parseDiff: 1000 },
2734
2773
  { unit: "second", diff: -1, results: ["this hour", "this hour", "this hour", "this hour"], description: "Now - 1 Second --> this hour", parseDiff: -1000 },
2735
2774
  { unit: "minute", diff: 30, results: ["this hour", "this hour", "this hour", "this hour"], description: "Now + 30 Minutes --> this hour", parseDiff: 30 * 60 * 1000 },
2736
- { unit: "minute", diff: -30, results: ["1 hour ago", "1 hour ago", "1 hr. ago", "1 hr. ago"], description: "Now - 30 Minutes --> 1 hour ago", parseDiff: 30 * 60 * 1000 },
2737
- { unit: "hour", diff: 4, results: ["in 4 hours", "in 4 hours", "in 4 hr.", "in 4 hr."], description: "Now + 4 Hours --> in 4 hours" },
2738
- { unit: "hour", diff: -10, results: ["10 hours ago", "10 hours ago", "10 hr. ago", "10 hr. ago"], description: "Now - 10 Hours --> 10 hours ago" }
2775
+ { unit: "minute", diff: -30, results: ["1 hour ago", "1 hour ago", "1 hr. ago", "1h ago"],
2776
+ description: "Now - 30 Minutes --> 1 hour ago", parseDiff: 30 * 60 * 1000 },
2777
+ { unit: "hour", diff: 4, results: ["in 4 hours", "in 4 hours", "in 4 hr.", "in 4h"],
2778
+ description: "Now + 4 Hours --> in 4 hours" },
2779
+ { unit: "hour", diff: -10, results: ["10 hours ago", "10 hours ago", "10 hr. ago", "10h ago"],
2780
+ description: "Now - 10 Hours --> 10 hours ago" }
2739
2781
  ]
2740
2782
  }, {
2741
2783
  scale: "minute",
@@ -2743,18 +2785,27 @@ sap.ui.define([
2743
2785
  { unit: "second", diff: 0, results: ["this minute", "this minute", "this minute", "this minute"], description: "Now --> 0 minutes ago" },
2744
2786
  { unit: "second", diff: 1, results: ["this minute", "this minute", "this minute", "this minute"], description: "Now + 1 Second --> in 0 minutes", parseDiff: 1000 },
2745
2787
  { unit: "second", diff: -1, results: ["this minute", "this minute", "this minute", "this minute"], description: "Now - 1 Second --> 0 minutes ago", parseDiff: -1000 },
2746
- { unit: "minute", diff: 30, results: ["in 30 minutes", "in 30 minutes", "in 30 min.", "in 30 min."], description: "Now + 30 Minutes --> in 30 minutes" },
2747
- { unit: "minute", diff: -30, results: ["30 minutes ago", "30 minutes ago", "30 min. ago", "30 min. ago"], description: "Now - 30 Minutes --> 30 minutes ago" },
2748
- { unit: "hour", diff: 1, results: ["in 60 minutes", "in 60 minutes", "in 60 min.", "in 60 min."], description: "Now + 4 Hours --> in 60 minutes" }
2788
+ { unit: "minute", diff: 30, results: ["in 30 minutes", "in 30 minutes", "in 30 min.", "in 30m"],
2789
+ description: "Now + 30 Minutes --> in 30 minutes" },
2790
+ { unit: "minute", diff: -30,
2791
+ results: ["30 minutes ago", "30 minutes ago", "30 min. ago", "30m ago"],
2792
+ description: "Now - 30 Minutes --> 30 minutes ago" },
2793
+ { unit: "hour", diff: 1, results: ["in 60 minutes", "in 60 minutes", "in 60 min.", "in 60m"],
2794
+ description: "Now + 4 Hours --> in 60 minutes" }
2749
2795
  ]
2750
2796
  }, {
2751
2797
  scale: "second",
2752
2798
  data: [
2753
2799
  { unit: "second", diff: 0, results: ["now", "now", "now", "now"], description: "Now --> now" },
2754
- { unit: "second", diff: 1, results: ["in 1 second", "in 1 second", "in 1 sec.", "in 1 sec."], description: "Now + 1 Second --> in 1 second" },
2755
- { unit: "second", diff: -1, results: ["1 second ago", "1 second ago", "1 sec. ago", "1 sec. ago"], description: "Now - 1 Second --> 1 second ago" },
2756
- { unit: "minute", diff: 1, results: ["in 60 seconds", "in 60 seconds", "in 60 sec.", "in 60 sec."], description: "Now + 1 Minute --> in 60 seconds" },
2757
- { unit: "minute", diff: -1, results: ["60 seconds ago", "60 seconds ago", "60 sec. ago", "60 sec. ago"], description: "Now - 1 Minute --> 60 seconds ago" }
2800
+ { unit: "second", diff: 1, results: ["in 1 second", "in 1 second", "in 1 sec.", "in 1s"],
2801
+ description: "Now + 1 Second --> in 1 second" },
2802
+ { unit: "second", diff: -1, results: ["1 second ago", "1 second ago", "1 sec. ago", "1s ago"],
2803
+ description: "Now - 1 Second --> 1 second ago" },
2804
+ { unit: "minute", diff: 1, results: ["in 60 seconds", "in 60 seconds", "in 60 sec.", "in 60s"],
2805
+ description: "Now + 1 Minute --> in 60 seconds" },
2806
+ { unit: "minute", diff: -1,
2807
+ results: ["60 seconds ago", "60 seconds ago", "60 sec. ago", "60s ago"],
2808
+ description: "Now - 1 Minute --> 60 seconds ago" }
2758
2809
  ]
2759
2810
  }];
2760
2811
 
@@ -2784,27 +2835,47 @@ sap.ui.define([
2784
2835
  data: [
2785
2836
  { unit: "second", diff: 0, results: ["today", "today", "today", "today"], description: "today" },
2786
2837
  { unit: "second", diff: 1, results: ["today", "today", "today", "today"], description: "Today + 1 Second --> today", parseDiff: 1000 },
2787
- { unit: "second", diff: -86400, results: ["1 day ago", "1 day ago", "1 day ago", "1 day ago"], description: "Today - 86400 Seconds --> 1 day ago" },
2788
- { unit: "minute", diff: 1440, results: ["in 1 day", "in 1 day", "in 1 day", "in 1 day"], description: "Today + 1440 Minutes --> in 1 day" },
2789
- { unit: "hour", diff: 24, results: ["in 1 day", "in 1 day", "in 1 day", "in 1 day"], description: "Today + 24 Hours --> tomorrow" },
2790
- { unit: "day", diff: 5, results: ["in 5 days", "in 5 days", "in 5 days", "in 5 days"], description: "Today + 5 Days --> in 5 days" },
2791
- { unit: "day", diff: -5, results: ["5 days ago", "5 days ago", "5 days ago", "5 days ago"], description: "Today - 5 Days --> 5 days ago" },
2792
- { unit: "day", diff: 8, results: ["in 1 week", "in 1 week", "in 1 wk.", "in 1 wk."], description: "Today + 8 Days --> in 1 week", parseDiff: 24 * 60 * 60 * 1000 },
2793
- { unit: "day", diff: -8, results: ["1 week ago", "1 week ago", "1 wk. ago", "1 wk. ago"], description: "Today - 8 Days --> 1 week ago", parseDiff: -24 * 60 * 60 * 1000 },
2794
- { unit: "day", diff: -32, results: ["1 month ago", "1 month ago", "1 mo. ago", "1 mo. ago"], description: "Today - 32 Days --> 1 month ago", parseDiff: -2 * 24 * 60 * 60 * 1000 },
2795
- { unit: "month", diff: 1, results: ["in 1 month", "in 1 month", "in 1 mo.", "in 1 mo."], description: "Today + 1 Month --> in 1 month" },
2796
- { unit: "month", diff: -1, results: ["1 month ago", "1 month ago", "1 mo. ago", "1 mo. ago"], description: "Today - 1 Month --> 1 month ago" },
2797
- { unit: "month", diff: 13, results: ["in 1 year", "in 1 year", "in 1 yr.", "in 1 yr."], description: "Today + 13 Months --> in 1 year", parseDiff: (31 * 24 + that.dst) * 60 * 60 * 1000 },
2798
- { unit: "month", diff: 26, results: ["in 2 years", "in 2 years", "in 2 yr.", "in 2 yr."], description: "Today + 26 Months --> in 2 years", parseDiff: (61 * 24 + that.dst) * 60 * 60 * 1000 },
2799
- { unit: "day", diff: 90, results: ["in 1 quarter", "in 1 quarter", "in 1 qtr.", "in 1 qtr."], description: "Today + 90 Days", parseOnly: true, parseDiff: -2 * 24 * 60 * 60 * 1000 },
2800
- { unit: "hour", diff: 24, results: ["in 24 hours", "in 24 hours", "in 24 hr.", "in 24 hr."], description: "Today + 1 Days", parseOnly: true },
2801
- { unit: "hour", diff: 72, results: ["in 72 hours", "in 72 hours", "in 72 hr.", "in 72 hr."], description: "Today + 3 Days", parseOnly: true },
2802
- { unit: "minute", diff: -4320, results: ["4320 minutes ago", "4320 minutes ago", "4320 min. ago", "4320 min. ago"], description: "Today - 3 Days", parseOnly: true }
2838
+ { unit: "second", diff: -86400, results: ["1 day ago", "1 day ago", "1 day ago", "1d ago"],
2839
+ description: "Today - 86400 Seconds --> 1 day ago" },
2840
+ { unit: "minute", diff: 1440, results: ["in 1 day", "in 1 day", "in 1 day", "in 1d"],
2841
+ description: "Today + 1440 Minutes --> in 1 day" },
2842
+ { unit: "hour", diff: 24, results: ["in 1 day", "in 1 day", "in 1 day", "in 1d"],
2843
+ description: "Today + 24 Hours --> tomorrow" },
2844
+ { unit: "day", diff: 5, results: ["in 5 days", "in 5 days", "in 5 days", "in 5d"],
2845
+ description: "Today + 5 Days --> in 5 days" },
2846
+ { unit: "day", diff: -5, results: ["5 days ago", "5 days ago", "5 days ago", "5d ago"],
2847
+ description: "Today - 5 Days --> 5 days ago" },
2848
+ { unit: "day", diff: 8, results: ["in 1 week", "in 1 week", "in 1 wk.", "in 1w"],
2849
+ description: "Today + 8 Days --> in 1 week", parseDiff: 24 * 60 * 60 * 1000 },
2850
+ { unit: "day", diff: -8, results: ["1 week ago", "1 week ago", "1 wk. ago", "1w ago"],
2851
+ description: "Today - 8 Days --> 1 week ago", parseDiff: -24 * 60 * 60 * 1000 },
2852
+ { unit: "day", diff: -32, results: ["1 month ago", "1 month ago", "1 mo. ago", "1mo ago"],
2853
+ description: "Today - 32 Days --> 1 month ago", parseDiff: -2 * 24 * 60 * 60 * 1000 },
2854
+ { unit: "month", diff: 1, results: ["in 1 month", "in 1 month", "in 1 mo.", "in 1mo"],
2855
+ description: "Today + 1 Month --> in 1 month" },
2856
+ { unit: "month", diff: -1, results: ["1 month ago", "1 month ago", "1 mo. ago", "1mo ago"],
2857
+ description: "Today - 1 Month --> 1 month ago" },
2858
+ { unit: "month", diff: 13, results: ["in 1 year", "in 1 year", "in 1 yr.", "in 1y"],
2859
+ description: "Today + 13 Months --> in 1 year",
2860
+ parseDiff: (31 * 24 + that.dst) * 60 * 60 * 1000 },
2861
+ { unit: "month", diff: 26, results: ["in 2 years", "in 2 years", "in 2 yr.", "in 2y"],
2862
+ description: "Today + 26 Months --> in 2 years",
2863
+ parseDiff: (61 * 24 + that.dst) * 60 * 60 * 1000 },
2864
+ { unit: "day", diff: 90, results: ["in 1 quarter", "in 1 quarter", "in 1 qtr.", "in 1q"],
2865
+ description: "Today + 90 Days", parseOnly: true, parseDiff: -2 * 24 * 60 * 60 * 1000 },
2866
+ { unit: "hour", diff: 24, results: ["in 24 hours", "in 24 hours", "in 24 hr.", "in 24h"],
2867
+ description: "Today + 1 Days", parseOnly: true },
2868
+ { unit: "hour", diff: 72, results: ["in 72 hours", "in 72 hours", "in 72 hr.", "in 72h"],
2869
+ description: "Today + 3 Days", parseOnly: true },
2870
+ { unit: "minute", diff: -4320,
2871
+ results: ["4320 minutes ago", "4320 minutes ago", "4320 min. ago", "4320m ago"],
2872
+ description: "Today - 3 Days", parseOnly: true }
2803
2873
  ]
2804
2874
  }, {
2805
2875
  scale: "week",
2806
2876
  data: [
2807
- { unit: "day", diff: 13, results: ["in 2 weeks", "in 2 weeks", "in 2 wk.", "in 2 wk."], description: "Today + 13 Days --> in 2 weeks", parseDiff: (-1 * 24 * 60 * 60 * 1000) }
2877
+ { unit: "day", diff: 13, results: ["in 2 weeks", "in 2 weeks", "in 2 wk.", "in 2w"],
2878
+ description: "Today + 13 Days --> in 2 weeks", parseDiff: (-1 * 24 * 60 * 60 * 1000) }
2808
2879
  ]
2809
2880
  }
2810
2881
  ];
@@ -2834,30 +2905,57 @@ sap.ui.define([
2834
2905
  scale: "auto",
2835
2906
  data: [
2836
2907
  { unit: "second", diff: 0, results: ["now", "now", "now", "now"], description: "now" },
2837
- { unit: "second", diff: 1, results: ["in 1 second", "in 1 second", "in 1 sec.", "in 1 sec."], description: "Now + 1 Second --> in 1 second" },
2838
- { unit: "second", diff: -1, results: ["1 second ago", "1 second ago", "1 sec. ago", "1 sec. ago"], description: "Now - 1 Second --> 1 second ago" },
2839
- { unit: "second", diff: 2, results: ["in 2 seconds", "in 2 seconds", "in 2 sec.", "in 2 sec."], description: "Now + 2 Second --> in 2 seconds" },
2840
- { unit: "second", diff: -7, results: ["7 seconds ago", "7 seconds ago", "7 sec. ago", "7 sec. ago"], description: "Now - 7 Second --> 7 seconds ago" },
2841
- { unit: "second", diff: 61, results: ["in 1 minute", "in 1 minute", "in 1 min.", "in 1 min."], description: "Now + 61 Seconds --> in 1 minute", parseDiff: 1000 },
2842
- { unit: "second", diff: 3601, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1 hr."], description: "Now + 3601 Seconds --> in 1 hour", parseDiff: 1000 },
2843
- { unit: "second", diff: -86401, results: ["1 day ago", "1 day ago", "1 day ago", "1 day ago"], description: "Today - 86401 Seconds --> 1 day ago", parseDiff: -1000 },
2844
- { unit: "minute", diff: 1, results: ["in 1 minute", "in 1 minute", "in 1 min.", "in 1 min."], description: "Now + 1 Minute --> in 1 minute" },
2845
- { unit: "minute", diff: -1, results: ["1 minute ago", "1 minute ago", "1 min. ago", "1 min. ago"], description: "Now - 1 Minute --> 1 minute ago" },
2846
- { unit: "minute", diff: 13, results: ["in 13 minutes", "in 13 minutes", "in 13 min.", "in 13 min."], description: "Now + 13 Mintues --> in 13 minutes" },
2847
- { unit: "minute", diff: -54, results: ["54 minutes ago", "54 minutes ago", "54 min. ago", "54 min. ago"], description: "Now - 54 Minutes --> 54 minutes ago" },
2848
- { unit: "minute", diff: 95, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1 hr."], description: "Now + 95 Minutes --> in 1 hour", parseDiff: 35 * 60 * 1000 },
2849
- { unit: "minute", diff: 1440, results: ["in 1 day", "in 1 day", "in 1 day", "in 1 day"], description: "Today + 1440 Minutes --> in 1 day" },
2850
- { unit: "hour", diff: 1, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1 hr."], description: "Now + 1 Hour --> in 1 hour" },
2851
- { unit: "day", diff: 5, results: ["in 5 days", "in 5 days", "in 5 days", "in 5 days"], description: "Today + 5 Days --> in 5 days" },
2852
- { unit: "day", diff: -5, results: ["5 days ago", "5 days ago", "5 days ago", "5 days ago"], description: "Today - 5 Days --> 5 days ago" },
2853
- { unit: "day", diff: 8, results: ["in 1 week", "in 1 week", "in 1 wk.", "in 1 wk."], description: "Today + 8 Days --> in 1 week", parseDiff: 24 * 60 * 60 * 1000 },
2854
- { unit: "day", diff: -8, results: ["1 week ago", "1 week ago", "1 wk. ago", "1 wk. ago"], description: "Today - 8 Days --> 1 week ago", parseDiff: -24 * 60 * 60 * 1000 },
2855
- { unit: "day", diff: -32, results: ["1 month ago", "1 month ago", "1 mo. ago", "1 mo. ago"], description: "Today - 32 Days --> 1 month ago", parseDiff: -2 * 24 * 60 * 60 * 1000 },
2856
- { unit: "month", diff: 1, results: ["in 1 month", "in 1 month", "in 1 mo.", "in 1 mo."], description: "Today + 1 Month --> in 1 month" },
2857
- { unit: "month", diff: -1, results: ["1 month ago", "1 month ago", "1 mo. ago", "1 mo. ago"], description: "Today - 1 Month --> 1 month" },
2858
- { unit: "month", diff: 13, results: ["in 1 year", "in 1 year", "in 1 yr.", "in 1 yr."], description: "Today + 13 Months --> in 1 year", parseDiff: (31 * 24 + that.dst) * 60 * 60 * 1000 },
2859
- { unit: "month", diff: 26, results: ["in 2 years", "in 2 years", "in 2 yr.", "in 2 yr."], description: "Today + 26 Months --> in 2 years", parseDiff: (61 * 24 + that.dst) * 60 * 60 * 1000 },
2860
- { unit: "year", diff: 1, results: ["in 1 year", "in 1 year", "in 1 yr.", "in 1 yr."], description: "Today + 1 year --> in 1 year" }
2908
+ { unit: "second", diff: 1, results: ["in 1 second", "in 1 second", "in 1 sec.", "in 1s"],
2909
+ description: "Now + 1 Second --> in 1 second" },
2910
+ { unit: "second", diff: -1, results: ["1 second ago", "1 second ago", "1 sec. ago", "1s ago"],
2911
+ description: "Now - 1 Second --> 1 second ago" },
2912
+ { unit: "second", diff: 2, results: ["in 2 seconds", "in 2 seconds", "in 2 sec.", "in 2s"],
2913
+ description: "Now + 2 Second --> in 2 seconds" },
2914
+ { unit: "second", diff: -7, results: ["7 seconds ago", "7 seconds ago", "7 sec. ago", "7s ago"],
2915
+ description: "Now - 7 Second --> 7 seconds ago" },
2916
+ { unit: "second", diff: 61, results: ["in 1 minute", "in 1 minute", "in 1 min.", "in 1m"],
2917
+ description: "Now + 61 Seconds --> in 1 minute", parseDiff: 1000 },
2918
+ { unit: "second", diff: 3601, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1h"],
2919
+ description: "Now + 3601 Seconds --> in 1 hour", parseDiff: 1000 },
2920
+ { unit: "second", diff: -86401, results: ["1 day ago", "1 day ago", "1 day ago", "1d ago"],
2921
+ description: "Today - 86401 Seconds --> 1 day ago", parseDiff: -1000 },
2922
+ { unit: "minute", diff: 1, results: ["in 1 minute", "in 1 minute", "in 1 min.", "in 1m"],
2923
+ description: "Now + 1 Minute --> in 1 minute" },
2924
+ { unit: "minute", diff: -1, results: ["1 minute ago", "1 minute ago", "1 min. ago", "1m ago"],
2925
+ description: "Now - 1 Minute --> 1 minute ago" },
2926
+ { unit: "minute", diff: 13, results: ["in 13 minutes", "in 13 minutes", "in 13 min.", "in 13m"],
2927
+ description: "Now + 13 Mintues --> in 13 minutes" },
2928
+ { unit: "minute", diff: -54,
2929
+ results: ["54 minutes ago", "54 minutes ago", "54 min. ago", "54m ago"],
2930
+ description: "Now - 54 Minutes --> 54 minutes ago" },
2931
+ { unit: "minute", diff: 95, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1h"],
2932
+ description: "Now + 95 Minutes --> in 1 hour", parseDiff: 35 * 60 * 1000 },
2933
+ { unit: "minute", diff: 1440, results: ["in 1 day", "in 1 day", "in 1 day", "in 1d"],
2934
+ description: "Today + 1440 Minutes --> in 1 day" },
2935
+ { unit: "hour", diff: 1, results: ["in 1 hour", "in 1 hour", "in 1 hr.", "in 1h"],
2936
+ description: "Now + 1 Hour --> in 1 hour" },
2937
+ { unit: "day", diff: 5, results: ["in 5 days", "in 5 days", "in 5 days", "in 5d"],
2938
+ description: "Today + 5 Days --> in 5 days" },
2939
+ { unit: "day", diff: -5, results: ["5 days ago", "5 days ago", "5 days ago", "5d ago"],
2940
+ description: "Today - 5 Days --> 5 days ago" },
2941
+ { unit: "day", diff: 8, results: ["in 1 week", "in 1 week", "in 1 wk.", "in 1w"],
2942
+ description: "Today + 8 Days --> in 1 week", parseDiff: 24 * 60 * 60 * 1000 },
2943
+ { unit: "day", diff: -8, results: ["1 week ago", "1 week ago", "1 wk. ago", "1w ago"],
2944
+ description: "Today - 8 Days --> 1 week ago", parseDiff: -24 * 60 * 60 * 1000 },
2945
+ { unit: "day", diff: -32, results: ["1 month ago", "1 month ago", "1 mo. ago", "1mo ago"],
2946
+ description: "Today - 32 Days --> 1 month ago", parseDiff: -2 * 24 * 60 * 60 * 1000 },
2947
+ { unit: "month", diff: 1, results: ["in 1 month", "in 1 month", "in 1 mo.", "in 1mo"],
2948
+ description: "Today + 1 Month --> in 1 month" },
2949
+ { unit: "month", diff: -1, results: ["1 month ago", "1 month ago", "1 mo. ago", "1mo ago"],
2950
+ description: "Today - 1 Month --> 1 month" },
2951
+ { unit: "month", diff: 13, results: ["in 1 year", "in 1 year", "in 1 yr.", "in 1y"],
2952
+ description: "Today + 13 Months --> in 1 year",
2953
+ parseDiff: (31 * 24 + that.dst) * 60 * 60 * 1000 },
2954
+ { unit: "month", diff: 26, results: ["in 2 years", "in 2 years", "in 2 yr.", "in 2y"],
2955
+ description: "Today + 26 Months --> in 2 years",
2956
+ parseDiff: (61 * 24 + that.dst) * 60 * 60 * 1000 },
2957
+ { unit: "year", diff: 1, results: ["in 1 year", "in 1 year", "in 1 yr.", "in 1y"],
2958
+ description: "Today + 1 year --> in 1 year" }
2861
2959
  ]
2862
2960
  }];
2863
2961
 
@@ -2944,7 +3042,7 @@ sap.ui.define([
2944
3042
  "12 ربيع الآخر 1422 هـ",
2945
3043
  "12 ربيع الآخر 1422 هـ",
2946
3044
  "12 ربيع الآخر 1422 هـ",
2947
- "12 ברביע ב׳ 1422 שנת היג׳רה"
3045
+ "12 ברביע ב׳ 1422 הג׳רה"
2948
3046
  ];
2949
3047
 
2950
3048
  QUnit.module("Islamic Date in other locales", {
@@ -3374,11 +3472,11 @@ sap.ui.define([
3374
3472
  var startDate = UI5Date.getInstance(2019,1,15);
3375
3473
 
3376
3474
  // no strictParsing
3377
- aParsedInterval = this.oIntervalFormat.parse("Feb 15, 2019 Feb 1, 2018");
3475
+ aParsedInterval = this.oIntervalFormat.parse("Feb 15, 2019 \u2013 Feb 1, 2018");
3378
3476
  assert.deepEqual(aParsedInterval, [startDate, endDate], "Parsed array is returned.");
3379
3477
 
3380
3478
  // strictParsing
3381
- aParsedInterval = oIntervalFormat.parse("Feb 1, 2019 Feb 15, 2018");
3479
+ aParsedInterval = oIntervalFormat.parse("Feb 1, 2019 \u2013 Feb 15, 2018");
3382
3480
  assert.deepEqual(aParsedInterval, [null, null], "[null, null] returned.");
3383
3481
  });
3384
3482
 
@@ -3553,7 +3651,7 @@ sap.ui.define([
3553
3651
  var oDate1 = UI5Date.getInstance(oDate.getTime() + 2 * 24 * 3600 * 1000);
3554
3652
  var sResult = oIntervalFormat.format([oDate, oDate1]);
3555
3653
 
3556
- assert.strictEqual(sResult, "11.–13. Apr. 2017");
3654
+ assert.strictEqual(sResult, "11.\u201313. Apr. 2017");
3557
3655
  assert.deepEqual(oIntervalFormat.parse(sResult), [oDate, oDate1]);
3558
3656
  });
3559
3657
 
@@ -3572,28 +3670,28 @@ sap.ui.define([
3572
3670
  oDate1 = UI5Date.getInstance(2019, 2, 1);
3573
3671
  oDate2 = UI5Date.getInstance(2019, 3, 1);
3574
3672
  sResult = oIntervalFormat.format([oDate1, oDate2]);
3575
- assert.strictEqual(sResult, "Mar 1 – Apr 1, 31 Heisei");
3673
+ assert.strictEqual(sResult, "Mar 1\u2009\u2013\u2009Apr 1, 31 Heisei");
3576
3674
  assert.deepEqual(oIntervalFormat.parse(sResult), [oDate1, oDate2]);
3577
3675
 
3578
3676
  // Same era, different year
3579
3677
  oDate1 = UI5Date.getInstance(2018, 3, 1);
3580
3678
  oDate2 = UI5Date.getInstance(2019, 3, 1);
3581
3679
  sResult = oIntervalFormat.format([oDate1, oDate2]);
3582
- assert.strictEqual(sResult, "Apr 1, 30 – Apr 1, 31 Heisei");
3680
+ assert.strictEqual(sResult, "Apr 1, 30\u2009\u2013\u2009Apr 1, 31 Heisei");
3583
3681
  assert.deepEqual(oIntervalFormat.parse(sResult), [oDate1, oDate2]);
3584
3682
 
3585
3683
  // Different era
3586
3684
  oDate1 = UI5Date.getInstance(2019, 3, 1);
3587
3685
  oDate2 = UI5Date.getInstance(2019, 4, 1);
3588
3686
  sResult = oIntervalFormat.format([oDate1, oDate2]);
3589
- assert.strictEqual(sResult, "Apr 1, 31 Heisei – May 1, 1 Reiwa");
3687
+ assert.strictEqual(sResult, "Apr 1, 31 Heisei\u2009\u2013\u2009May 1, 1 Reiwa");
3590
3688
  assert.deepEqual(oIntervalFormat.parse(sResult), [oDate1, oDate2]);
3591
3689
 
3592
3690
  // Different era, same year
3593
3691
  oDate1 = UI5Date.getInstance(1989, 4, 1);
3594
3692
  oDate2 = UI5Date.getInstance(2019, 4, 1);
3595
3693
  sResult = oIntervalFormat.format([oDate1, oDate2]);
3596
- assert.strictEqual(sResult, "May 1, 1 Heisei – May 1, 1 Reiwa");
3694
+ assert.strictEqual(sResult, "May 1, 1 Heisei\u2009\u2013\u2009May 1, 1 Reiwa");
3597
3695
  assert.deepEqual(oIntervalFormat.parse(sResult), [oDate1, oDate2]);
3598
3696
 
3599
3697
  });
@@ -3686,14 +3784,15 @@ sap.ui.define([
3686
3784
  format: "yMMMw"
3687
3785
  });
3688
3786
  sResult = oIntervalFormat.format([oDate, oDate1]);
3689
- assert.strictEqual(sResult, "Mar 2017 (week: 13) – Apr 2017 (week: 13)", "Two dates correctly formatted");
3787
+ assert.strictEqual(sResult, "Mar 2017 (week: 13)\u2009\u2013\u2009Apr 2017 (week: 13)",
3788
+ "Two dates correctly formatted");
3690
3789
 
3691
3790
  oIntervalFormat = DateFormat.getDateInstance({
3692
3791
  interval: true,
3693
3792
  format: "yQ"
3694
3793
  });
3695
3794
  sResult = oIntervalFormat.format([oDate, oDate1]);
3696
- assert.strictEqual(sResult, "Q1 2017 – Q2 2017", "Two dates correctly formatted");
3795
+ assert.strictEqual(sResult, "Q1 2017\u2009\u2013\u2009Q2 2017", "Two dates correctly formatted");
3697
3796
 
3698
3797
  oDate = UniversalDate.getInstance(UI5Date.getInstance(2017, 3, 1));
3699
3798
  oDate1 = UniversalDate.getInstance(UI5Date.getInstance(2017, 3, 13));
@@ -3713,7 +3812,7 @@ sap.ui.define([
3713
3812
 
3714
3813
  var sResult = oIntervalFormat.format([oDate, oDate1]);
3715
3814
 
3716
- assert.strictEqual(sResult, "11.04.17 – 13.04.17");
3815
+ assert.strictEqual(sResult, "11.04.17\u2009\u2013\u200913.04.17");
3717
3816
  assert.deepEqual(oIntervalFormat.parse(sResult), [oDate, oDate1]);
3718
3817
 
3719
3818
  oLocale = new Locale("de-DE");
@@ -3723,7 +3822,7 @@ sap.ui.define([
3723
3822
  }, oLocale);
3724
3823
 
3725
3824
  sResult = oIntervalFormat.format([oDate, oDate1]);
3726
- assert.strictEqual(sResult, "n. Chr. 2017 04 11 – n. Chr. 2017 04 13");
3825
+ assert.strictEqual(sResult, "n. Chr. 2017 04 11\u2009\u2013\u2009n. Chr. 2017 04 13");
3727
3826
  assert.deepEqual(oIntervalFormat.parse(sResult), [oDate, oDate1]);
3728
3827
  });
3729
3828
 
@@ -3733,7 +3832,8 @@ sap.ui.define([
3733
3832
 
3734
3833
  // default interval formatting
3735
3834
  var oIntervalFormat = DateFormat.getDateInstance({ interval: true });
3736
- assert.strictEqual(oIntervalFormat.format([oDate1, oDate2]), "Jan 24, 2019 – Jan 31, 2019", "Date interval returned");
3835
+ assert.strictEqual(oIntervalFormat.format([oDate1, oDate2]), "Jan 24, 2019\u2009\u2013\u2009Jan 31, 2019",
3836
+ "Date interval returned");
3737
3837
  assert.strictEqual(oIntervalFormat.format([oDate1, null]), "", "Empty String returned");
3738
3838
  assert.strictEqual(oIntervalFormat.format([oDate1, oDate1]), "Jan 24, 2019", "Single Date returned: Jan 24, 2019");
3739
3839
  assert.deepEqual(oIntervalFormat.parse("Jan 24, 2019"), [oDate1, oDate1], "Array with two dates returned.");
@@ -3746,15 +3846,17 @@ sap.ui.define([
3746
3846
  });
3747
3847
 
3748
3848
  assert.strictEqual(oIntervalFormat.format([oDate1, null]), "Jan 24, 2019", "Single Date returned: Jan 24, 2019");
3749
- assert.strictEqual(oIntervalFormat.format([oDate1, oDate2]), "Jan 24, 2019 – Jan 31, 2019", "Date interval returned");
3849
+ assert.strictEqual(oIntervalFormat.format([oDate1, oDate2]), "Jan 24, 2019\u2009\u2013\u2009Jan 31, 2019", "Date interval returned");
3750
3850
  assert.strictEqual(oIntervalFormat.format([oDate1, null]), "Jan 24, 2019", "Single Date returned: Jan 24, 2019");
3751
3851
  assert.strictEqual(oIntervalFormat.format([null, oDate1]), "", "Empty String returned.");
3752
3852
  assert.strictEqual(oIntervalFormat.format([null, null]), "", "Empty String returned.");
3753
3853
  assert.strictEqual(oIntervalFormat.format([oDate1, oDate1]), "Jan 24, 2019", "Single Date returned: Jan 24, 2019");
3754
3854
 
3755
3855
  assert.deepEqual(oIntervalFormat.parse("Jan 24, 2019"), [oDate1, null], "Array with single Date and null returned.");
3756
- assert.deepEqual(oIntervalFormat.parse("Jan 24, 2019 Jan 24, 2019"), [oDate1, null], "Array with two date objects is returned.");
3757
- assert.deepEqual(oIntervalFormat.parse("Jan 24, 2019 – Jan 31, 2019"), [oDate1, oDate2], "Array with two date objects is returned.");
3856
+ assert.deepEqual(oIntervalFormat.parse("Jan 24, 2019 \u2013 Jan 24, 2019"), [oDate1, null],
3857
+ "Array with two date objects is returned.");
3858
+ assert.deepEqual(oIntervalFormat.parse("Jan 24, 2019 \u2013 Jan 31, 2019"), [oDate1, oDate2],
3859
+ "Array with two date objects is returned.");
3758
3860
  });
3759
3861
 
3760
3862
  QUnit.test("am/pm", function (assert) {
@@ -3769,7 +3871,7 @@ sap.ui.define([
3769
3871
  }, oLocale);
3770
3872
 
3771
3873
  var sResult = oIntervalFormat.format([oDate, oDate1]);
3772
- assert.strictEqual(sResult, "9 AM – 1 PM");
3874
+ assert.strictEqual(sResult, "9\u202fAM\u2009\u2013\u20091\u202fPM");
3773
3875
  assert.deepEqual(oIntervalFormat.parse(sResult), [oDate, oDate1]);
3774
3876
 
3775
3877
  oDate = UI5Date.getInstance(1970, 0, 1, 11, 0, 0);
@@ -3783,7 +3885,7 @@ sap.ui.define([
3783
3885
  // optimised interval pattern only uses 'h'. 'K' is automatically converted
3784
3886
  // to 'h'.
3785
3887
  sResult = oIntervalFormat.format([oDate, oDate1]);
3786
- assert.strictEqual(sResult, "11 AM – 12 PM");
3888
+ assert.strictEqual(sResult, "11\u202fAM\u2009\u2013\u200912\u202fPM");
3787
3889
  assert.deepEqual(oIntervalFormat.parse(sResult), [oDate, oDate1]);
3788
3890
 
3789
3891
  oDate = UI5Date.getInstance(1970, 0, 1, 10, 0, 0);
@@ -3797,7 +3899,7 @@ sap.ui.define([
3797
3899
  // optimised interval pattern only uses 'h'. 'K' is automatically converted
3798
3900
  // to 'h'.
3799
3901
  sResult = oIntervalFormat.format([oDate, oDate1]);
3800
- assert.strictEqual(oIntervalFormat.format([oDate, oDate1]), "10 – 11 AM");
3902
+ assert.strictEqual(oIntervalFormat.format([oDate, oDate1]), "10\u2009\u2013\u200911\u202fAM");
3801
3903
  assert.deepEqual(oIntervalFormat.parse(sResult), [oDate, oDate1]);
3802
3904
  });
3803
3905
 
@@ -3829,7 +3931,7 @@ sap.ui.define([
3829
3931
  var oDate1 = UI5Date.getInstance(2017, 3, 11);
3830
3932
  var oDate2 = UI5Date.getInstance(2017, 3, 12);
3831
3933
  var sResult = oIntervalFormat.format([oDate1, oDate2]);
3832
- assert.strictEqual(sResult, "Apr 11 – 12, 2017", "Different dates are formatted correctly");
3934
+ assert.strictEqual(sResult, "Apr 11\u2009\u2013\u200912, 2017", "Different dates are formatted correctly");
3833
3935
 
3834
3936
  var sResult = oIntervalFormat.format([oDate1, oDate1]);
3835
3937
  assert.strictEqual(sResult, "Apr 11, 2017", "Single Date if formatted correctly afterwards");
@@ -3864,7 +3966,7 @@ sap.ui.define([
3864
3966
  var sResult1 = oIntervalFormat.format([oDate1, oDate2]);
3865
3967
  var sResult2 = oIntervalFormat.format([oDate1, oDate3]);
3866
3968
 
3867
- assert.strictEqual(sResult1, "Q1 2017 – Q2 2017");
3969
+ assert.strictEqual(sResult1, "Q1 2017\u2009\u2013\u2009Q2 2017");
3868
3970
  assert.strictEqual(sResult2, "Q1 2017");
3869
3971
  });
3870
3972
 
@@ -3882,7 +3984,7 @@ sap.ui.define([
3882
3984
  var sResult1 = oIntervalFormat.format([oDate1, oDate2]);
3883
3985
  var sResult2 = oIntervalFormat.format([oDate2, oDate3]);
3884
3986
 
3885
- assert.strictEqual(sResult1, "week 10 of 2017 – week 12 of 2017");
3987
+ assert.strictEqual(sResult1, "week 10 of 2017\u2009\u2013\u2009week 12 of 2017");
3886
3988
  assert.strictEqual(sResult2, "week 12 of 2017");
3887
3989
  });
3888
3990
 
@@ -3916,17 +4018,22 @@ sap.ui.define([
3916
4018
  var oDate1 = UI5Date.getInstance(2017, 3, 13);
3917
4019
  var aCompare = [oDate, oDate1];
3918
4020
 
3919
- assert.deepEqual(oIntervalFormat.parse("4/11/17 4/13/17"), aCompare, "Parse fallback short style");
4021
+ assert.deepEqual(oIntervalFormat.parse("4/11/17 \u2013 4/13/17"), aCompare, "Parse fallback short style");
3920
4022
  assert.deepEqual(oIntervalFormat.parse("4/11/17 - 4/13/17"), aCompare, "Parse fallback short style with common connector");
3921
- assert.deepEqual(oIntervalFormat.parse("Apr 11, 2017 Apr 13, 2017"), aCompare, "Parse fallback medium style");
4023
+ assert.deepEqual(oIntervalFormat.parse("Apr 11, 2017 \u2013 Apr 13, 2017"), aCompare,
4024
+ "Parse fallback medium style");
3922
4025
  assert.deepEqual(oIntervalFormat.parse("Apr 11, 2017 - Apr 13, 2017"), aCompare, "Parse fallback medium style with common connector");
3923
- assert.deepEqual(oIntervalFormat.parse("2017-04-11 2017-04-13"), aCompare, "Parse fallback with pattern 'yyyy-MM-dd'");
4026
+ assert.deepEqual(oIntervalFormat.parse("2017-04-11 \u2013 2017-04-13"), aCompare,
4027
+ "Parse fallback with pattern 'yyyy-MM-dd'");
3924
4028
  assert.deepEqual(oIntervalFormat.parse("2017-04-11 - 2017-04-13"), aCompare, "Parse fallback with pattern 'yyyy-MM-dd' and common connector");
3925
- assert.deepEqual(oIntervalFormat.parse("20170411 20170413"), aCompare, "Parse fallback with pattern 'yyyyMMdd'");
4029
+ assert.deepEqual(oIntervalFormat.parse("20170411 \u2013 20170413"), aCompare,
4030
+ "Parse fallback with pattern 'yyyyMMdd'");
3926
4031
  assert.deepEqual(oIntervalFormat.parse("20170411 - 20170413"), aCompare, "Parse fallback with pattern 'yyyyMMdd' and common connector");
3927
- assert.deepEqual(oIntervalFormat.parse("041117 041317"), aCompare, "Parse fallback with no delimiter");
4032
+ assert.deepEqual(oIntervalFormat.parse("041117 \u2013 041317"), aCompare,
4033
+ "Parse fallback with no delimiter");
3928
4034
  assert.deepEqual(oIntervalFormat.parse("041117 - 041317"), aCompare, "Parse fallback with no delimiter and common connector");
3929
- assert.deepEqual(oIntervalFormat.parse("04112017 04132017"), aCompare, "Parse fallback with no delimiter");
4035
+ assert.deepEqual(oIntervalFormat.parse("04112017 \u2013 04132017"), aCompare,
4036
+ "Parse fallback with no delimiter");
3930
4037
  assert.deepEqual(oIntervalFormat.parse("04112017 - 04132017"), aCompare, "Parse fallback with no delimiter and common connector");
3931
4038
  });
3932
4039
 
@@ -3940,17 +4047,23 @@ sap.ui.define([
3940
4047
  var oDate1 = UI5Date.getInstance(2017, 3, 13);
3941
4048
  var aCompare = [oDate, oDate1];
3942
4049
 
3943
- assert.deepEqual(oIntervalFormat.parse("11.04.17 13.04.17"), aCompare, "Parse fallback short style");
4050
+ assert.deepEqual(oIntervalFormat.parse("11.04.17 \u2013 13.04.17"), aCompare,
4051
+ "Parse fallback short style");
3944
4052
  assert.deepEqual(oIntervalFormat.parse("11.04.17 - 13.04.17"), aCompare, "Parse fallback short style with common connector");
3945
- assert.deepEqual(oIntervalFormat.parse("11.04.2017 13.04.2017"), aCompare, "Parse fallback medium style");
4053
+ assert.deepEqual(oIntervalFormat.parse("11.04.2017 \u2013 13.04.2017"), aCompare,
4054
+ "Parse fallback medium style");
3946
4055
  assert.deepEqual(oIntervalFormat.parse("11.04.2017 - 13.04.2017"), aCompare, "Parse fallback medium style with common connector");
3947
- assert.deepEqual(oIntervalFormat.parse("2017-04-11 2017-04-13"), aCompare, "Parse fallback with pattern 'yyyy-MM-dd'");
4056
+ assert.deepEqual(oIntervalFormat.parse("2017-04-11 \u2013 2017-04-13"), aCompare,
4057
+ "Parse fallback with pattern 'yyyy-MM-dd'");
3948
4058
  assert.deepEqual(oIntervalFormat.parse("2017-04-11 - 2017-04-13"), aCompare, "Parse fallback with pattern 'yyyy-MM-dd' and common connector");
3949
- assert.deepEqual(oIntervalFormat.parse("20170411 20170413"), aCompare, "Parse fallback with pattern 'yyyyMMdd'");
4059
+ assert.deepEqual(oIntervalFormat.parse("20170411 \u2013 20170413"), aCompare,
4060
+ "Parse fallback with pattern 'yyyyMMdd'");
3950
4061
  assert.deepEqual(oIntervalFormat.parse("20170411 - 20170413"), aCompare, "Parse fallback with pattern 'yyyyMMdd' and common connector");
3951
- assert.deepEqual(oIntervalFormat.parse("110417 130417"), aCompare, "Parse fallback with no delimiter");
4062
+ assert.deepEqual(oIntervalFormat.parse("110417 \u2013 130417"), aCompare,
4063
+ "Parse fallback with no delimiter");
3952
4064
  assert.deepEqual(oIntervalFormat.parse("110417 - 130417"), aCompare, "Parse fallback with no delimiter and common connector");
3953
- assert.deepEqual(oIntervalFormat.parse("11042017 13042017"), aCompare, "Parse fallback with no delimiter");
4065
+ assert.deepEqual(oIntervalFormat.parse("11042017 \u2013 13042017"), aCompare,
4066
+ "Parse fallback with no delimiter");
3954
4067
  assert.deepEqual(oIntervalFormat.parse("11042017 - 13042017"), aCompare, "Parse fallback with no delimiter and common connector");
3955
4068
  });
3956
4069
 
@@ -4488,12 +4601,17 @@ sap.ui.define([
4488
4601
  });
4489
4602
 
4490
4603
  //*****************************************************************************************************************
4491
- QUnit.module("DateFormat", {
4604
+ QUnit.module("sap.ui.core.format.DateFormat", {
4492
4605
  beforeEach: function () {
4606
+ this.oLogMock = this.mock(Log);
4607
+ this.oLogMock.expects("error").never();
4608
+ this.oLogMock.expects("warning").never();
4609
+ Configuration.setLanguage("en_US");
4493
4610
  Configuration.setTimezone("Europe/Berlin");
4494
4611
  },
4495
4612
  afterEach: function () {
4496
4613
  Configuration.setTimezone(sDefaultTimezone);
4614
+ Configuration.setLanguage(sDefaultLanguage);
4497
4615
  }
4498
4616
  });
4499
4617
 
@@ -4712,7 +4830,7 @@ sap.ui.define([
4712
4830
  // code under test: format option 'format'
4713
4831
  oFormat = DateFormat.createInstance({interval: true, intervalDelimiter: "_", format: "yM"}, oLocale, oInfo);
4714
4832
 
4715
- assert.strictEqual(oFormat.intervalPatterns[0], "M.y'_'M.y");
4833
+ assert.strictEqual(oFormat.intervalPatterns[0], "MM/y'_'MM/y");
4716
4834
 
4717
4835
  // code under test: format option 'pattern'
4718
4836
  oFormat = DateFormat.createInstance({interval: true, intervalDelimiter: "_", pattern: "foo"}, oLocale, oInfo);
@@ -4816,12 +4934,12 @@ sap.ui.define([
4816
4934
 
4817
4935
  // code under test: createInstance with format
4818
4936
  oFormat = DateFormat.getDateTimeInstance({interval: true, format: "yMMMdhm"}, oLocale);
4819
- assert.strictEqual(oFormat.format([oDate0, oDate1]), "Jan 10, 2008, 9:15 – 11:45 AM");
4937
+ assert.strictEqual(oFormat.format([oDate0, oDate1]), "Jan 10, 2008, 9:15\u2009\u2013\u200911:45\u202fAM");
4820
4938
 
4821
4939
  // code under test: createInstance with format
4822
4940
  oFormat = DateFormat.getDateTimeInstance({interval: true, format: "yMMMdhm", intervalDelimiter: "..."},
4823
4941
  oLocale);
4824
- assert.strictEqual(oFormat.format([oDate0, oDate1]), "Jan 10, 2008, 9:15 AM...Jan 10, 2008, 11:45 AM");
4942
+ assert.strictEqual(oFormat.format([oDate0, oDate1]), "Jan 10, 2008, 9:15\u202fAM...Jan 10, 2008, 11:45\u202fAM");
4825
4943
  });
4826
4944
 
4827
4945
  //*****************************************************************************************************************
@@ -4875,9 +4993,12 @@ sap.ui.define([
4875
4993
  //*****************************************************************************************************************
4876
4994
  [
4877
4995
  {method: "getDateInstance", result: "date.placeholder Dec 31, 2012"},
4878
- {method: "getDateTimeInstance", result: "date.placeholder Dec 31, 2012, 11:59:58 PM"},
4879
- {method: "getTimeInstance", result: "date.placeholder 11:59:58 PM"},
4880
- {method: "getDateTimeWithTimezoneInstance", result: "date.placeholder Dec 31, 2012, 11:59:58 PM Europe, Berlin"}
4996
+ {method: "getDateTimeInstance", result: "date.placeholder Dec 31, 2012, 11:59:58\u202fPM"},
4997
+ {method: "getTimeInstance", result: "date.placeholder 11:59:58\u202fPM"},
4998
+ {
4999
+ method: "getDateTimeWithTimezoneInstance",
5000
+ result: "date.placeholder Dec 31, 2012, 11:59:58\u202fPM Europe, Berlin"
5001
+ }
4881
5002
  ].forEach(function (oFixture) {
4882
5003
  QUnit.test("getPlaceholderText: " + oFixture.method, function (assert) {
4883
5004
  this.stub(UI5Date, "getInstance").onFirstCall().returns({getFullYear: function () {return 2012;}})
@@ -4892,9 +5013,12 @@ sap.ui.define([
4892
5013
 
4893
5014
  //*****************************************************************************************************************
4894
5015
  [
4895
- {method: "getDateInstance", result: "date.placeholder Dec 22, 2012 – Dec 31, 2012"},
4896
- {method: "getDateTimeInstance", result: "date.placeholder Dec 22, 2012, 9:12:34 AM – Dec 31, 2012, 11:59:58 PM"},
4897
- {method: "getTimeInstance", result: "date.placeholder 9:12:34 AM – 11:59:58 PM"}
5016
+ {method: "getDateInstance", result: "date.placeholder Dec 22, 2012\u2009\u2013\u2009Dec 31, 2012"},
5017
+ {
5018
+ method: "getDateTimeInstance",
5019
+ result: "date.placeholder Dec 22, 2012, 9:12:34\u202fAM\u2009\u2013\u2009Dec 31, 2012, 11:59:58\u202fPM"
5020
+ },
5021
+ {method: "getTimeInstance", result: "date.placeholder 9:12:34\u202fAM\u2009\u2013\u200911:59:58\u202fPM"}
4898
5022
  ].forEach(function (oFixture) {
4899
5023
  QUnit.test("getPlaceholderText, with interval: " + oFixture.method, function (assert) {
4900
5024
  this.stub(UI5Date, "getInstance").onFirstCall().returns({getFullYear: function () {return 2012;}})
@@ -4981,4 +5105,124 @@ sap.ui.define([
4981
5105
 
4982
5106
  assert.deepEqual(oParsedDate, oDate);
4983
5107
  });
5108
+
5109
+ //*****************************************************************************************************************
5110
+ QUnit.test("parse: normalize input and pattern values (integrative test)", function (assert) {
5111
+ const oDate0 = UI5Date.getInstance("1970-01-01T02:22:33Z");
5112
+ const oLocale = new Locale("en_US");
5113
+ let oFormat = DateFormat.getDateTimeInstance({pattern: "h:mm:ss\u202fa", UTC: true}, oLocale);
5114
+
5115
+ // code under test - formatted string can be parsed again
5116
+ assert.deepEqual(oFormat.parse(oFormat.format(oDate0)), oDate0);
5117
+
5118
+ // code under test - input without special characters can be parsed
5119
+ assert.deepEqual(oFormat.parse("02:22:33 AM"), oDate0);
5120
+
5121
+ const oFormatOptions = {interval: true, pattern: "h:mm:ss\u202fa", UTC: true};
5122
+ oFormat = DateFormat.getDateTimeInstance(oFormatOptions, oLocale);
5123
+
5124
+ // code under test - default interval pattern uses " - " as delimiter
5125
+ assert.strictEqual(oFormat.intervalPatterns[oFormat.intervalPatterns.length - 1],
5126
+ "h:mm:ss\u202fa - h:mm:ss\u202fa");
5127
+
5128
+ const oDate1 = UI5Date.getInstance("1970-01-01T15:16:17Z");
5129
+
5130
+ // code under test - formatted string can be parsed again
5131
+ assert.deepEqual(oFormat.parse(oFormat.format([oDate0, oDate1])), [oDate0, oDate1]);
5132
+
5133
+ // code under test - input with special characters can be parsed
5134
+ assert.deepEqual(oFormat.parse("02:22:33\u202fAM\u2009\u2013\u200903:16:17\u202fPM"), [oDate0, oDate1]);
5135
+
5136
+ // code under test - input without special characters can be parsed
5137
+ assert.deepEqual(oFormat.parse("02:22:33 AM - 03:16:17 PM"), [oDate0, oDate1]);
5138
+ // code under test - input without spaces can be parsed
5139
+ assert.deepEqual(oFormat.parse("02:22:33AM-03:16:17PM"), [oDate0, oDate1]);
5140
+
5141
+ oFormat = DateFormat.getDateTimeInstance(oFormatOptions, new Locale("es_AR"));
5142
+
5143
+ // code under test - default interval pattern uses " - " as delimiter
5144
+ assert.strictEqual(oFormat.intervalPatterns[oFormat.intervalPatterns.length - 1],
5145
+ "h:mm:ss\u202fa - h:mm:ss\u202fa");
5146
+
5147
+ // code under test - formatted string can be parsed again
5148
+ assert.deepEqual(oFormat.parse(oFormat.format([oDate0, oDate1])), [oDate0, oDate1]);
5149
+
5150
+ // code under test - input with special characters can be parsed
5151
+ assert.deepEqual(oFormat.parse("02:22:33\u202fa.\u00a0m. a el 03:16:17\u202fp.\u00a0m."), [oDate0, oDate1]);
5152
+
5153
+ // code under test - input without special characters can be parsed
5154
+ assert.deepEqual(oFormat.parse("02:22:33a.m. - 03:16:17p.m."), [oDate0, oDate1]);
5155
+
5156
+ oFormat = DateFormat.getDateTimeInstance(oFormatOptions, new Locale("fa"));
5157
+
5158
+ // code under test - default interval pattern uses " - " as delimiter
5159
+ assert.strictEqual(oFormat.intervalPatterns[oFormat.intervalPatterns.length - 1],
5160
+ "h:mm:ss\u202fa - h:mm:ss\u202fa");
5161
+
5162
+ // code under test - formatted string can be parsed again
5163
+ assert.deepEqual(oFormat.parse(oFormat.format([oDate0, oDate1])), [oDate0, oDate1]);
5164
+
5165
+ // code under test - input with special characters can be parsed
5166
+ assert.deepEqual(oFormat.parse("2:22:33\u202f\u0642.\u0638. \u062a\u0627 3:16:17\u202f\u0628\.\u0638\."),
5167
+ [oDate0, oDate1]);
5168
+
5169
+ // code under test - input without special characters can be parsed
5170
+ assert.deepEqual(oFormat.parse("02:22:33\u202f\u0642.\u0638.-03:16:17\u202f\u0628\.\u0638\."),
5171
+ [oDate0, oDate1]);
5172
+ });
5173
+
5174
+ //*****************************************************************************************************************
5175
+ [
5176
+ {input: "a\u00a0b\u2009c\u202fd e", output: "a b c d e"}, // special spaces are replaced by \u0020
5177
+ {input: "a\u200eb\u200fc\u202ad\u202be\u202cf", output: "abcdef"} // RTL characters are removed
5178
+ ].forEach((oFixture, i) => {
5179
+ QUnit.test(`DateFormat._normalize: ${i}`, function (assert) {
5180
+ assert.strictEqual(DateFormat._normalize(oFixture.input), oFixture.output);
5181
+ });
5182
+ });
5183
+
5184
+ //*****************************************************************************************************************
5185
+ QUnit.test("DateFormat#oSymbols[''].parse: normalizes part value", function (assert) {
5186
+ const oPart = {value: "~partValue"};
5187
+
5188
+ this.mock(DateFormat).expects("_normalize").withExactArgs("~partValue").returns("~sNormalized");
5189
+
5190
+ // code under test
5191
+ assert.deepEqual(DateFormat.prototype.oSymbols[""].parse("~sNormalizedValue", oPart),
5192
+ {length: 12});
5193
+ });
5194
+
5195
+ //*****************************************************************************************************************
5196
+ QUnit.test("DateFormat#oSymbols['a'].parse: normalizes variants", function (assert) {
5197
+ const oFormat = {
5198
+ aDayPeriodsWide: ["~wide0"],
5199
+ aDayPeriodsAbbrev: ["~abbrev0", "~abbrev1"],
5200
+ aDayPeriodsNarrow: ["~narrow0", "~narrow1"],
5201
+ oLocaleData: {sCLDRLocaleId: "en-US"}
5202
+ };
5203
+ const oDateFormatMock = this.mock(DateFormat);
5204
+ oDateFormatMock.expects("_normalize").withExactArgs("~wide0").returns("~sNormalizedWide0");
5205
+ oDateFormatMock.expects("_normalize").withExactArgs("~abbrev0").returns("~sNormalizedAbbrev0");
5206
+ oDateFormatMock.expects("_normalize").withExactArgs("~abbrev1").returns("~sDayPeriod");
5207
+
5208
+ // code under test
5209
+ assert.deepEqual(
5210
+ DateFormat.prototype.oSymbols["a"].parse("~sDayPeriodValue", /*unused*/undefined, oFormat),
5211
+ {pm: true, length: 11});
5212
+ });
5213
+
5214
+ //*****************************************************************************************************************
5215
+ QUnit.test("DateFormat#parse: normalizes user input", function (assert) {
5216
+ const oFormat = {
5217
+ oFormatOptions: {},
5218
+ parseRelative() {}
5219
+ };
5220
+ this.mock(DateFormat).expects("_normalize").withExactArgs("~value").returns("~normalizedValue");
5221
+ this.mock(Configuration).expects("getTimezone").withExactArgs().returns("~timezone");
5222
+ this.mock(oFormat).expects("parseRelative").withExactArgs("~normalizedValue", undefined)
5223
+ .returns("~dateObject");
5224
+
5225
+ // code under test
5226
+ assert.strictEqual(DateFormat.prototype.parse.call(oFormat, "~value"), "~dateObject");
5227
+ });
4984
5228
  });