@openui5/sap.ui.core 1.99.0 → 1.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (355) hide show
  1. package/THIRDPARTY.txt +2 -2
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +6 -3
  4. package/src/jquery.sap.properties.js +1 -1
  5. package/src/jquery.sap.resources.js +1 -1
  6. package/src/jquery.sap.script.js +1 -1
  7. package/src/jquery.sap.storage.js +3 -3
  8. package/src/sap/base/Log.js +1 -1
  9. package/src/sap/base/strings/whitespaceReplacer.js +1 -1
  10. package/src/sap/base/util/LoaderExtensions.js +1 -10
  11. package/src/sap/base/util/UriParameters.js +2 -2
  12. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  13. package/src/sap/base/util/restricted/_castArray.js +1 -1
  14. package/src/sap/base/util/restricted/_compact.js +1 -1
  15. package/src/sap/base/util/restricted/_curry.js +1 -1
  16. package/src/sap/base/util/restricted/_debounce.js +1 -1
  17. package/src/sap/base/util/restricted/_difference.js +1 -1
  18. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  19. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  20. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  21. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  22. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  23. package/src/sap/base/util/restricted/_flatten.js +1 -1
  24. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  25. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  26. package/src/sap/base/util/restricted/_intersection.js +1 -1
  27. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  28. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  29. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  30. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  31. package/src/sap/base/util/restricted/_isNil.js +1 -1
  32. package/src/sap/base/util/restricted/_max.js +1 -1
  33. package/src/sap/base/util/restricted/_merge.js +1 -1
  34. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  35. package/src/sap/base/util/restricted/_min.js +1 -1
  36. package/src/sap/base/util/restricted/_omit.js +1 -1
  37. package/src/sap/base/util/restricted/_pick.js +1 -1
  38. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  39. package/src/sap/base/util/restricted/_throttle.js +1 -1
  40. package/src/sap/base/util/restricted/_toArray.js +1 -1
  41. package/src/sap/base/util/restricted/_union.js +1 -1
  42. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  43. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  44. package/src/sap/base/util/restricted/_uniq.js +1 -1
  45. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  46. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  47. package/src/sap/base/util/restricted/_without.js +1 -1
  48. package/src/sap/base/util/restricted/_xor.js +1 -1
  49. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  50. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  51. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  52. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  53. package/src/sap/ui/Device.js +3 -3
  54. package/src/sap/ui/Global.js +4 -4
  55. package/src/sap/ui/base/Event.js +1 -1
  56. package/src/sap/ui/base/EventProvider.js +1 -1
  57. package/src/sap/ui/base/ExpressionParser.js +1 -1
  58. package/src/sap/ui/base/Interface.js +1 -1
  59. package/src/sap/ui/base/ManagedObject.js +1 -1
  60. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  61. package/src/sap/ui/base/ManagedObjectObserver.js +2 -0
  62. package/src/sap/ui/base/Metadata.js +1 -1
  63. package/src/sap/ui/base/Object.js +1 -1
  64. package/src/sap/ui/base/ObjectPool.js +1 -1
  65. package/src/sap/ui/core/.library +2 -2
  66. package/src/sap/ui/core/BusyIndicator.js +1 -1
  67. package/src/sap/ui/core/Component.js +1 -1
  68. package/src/sap/ui/core/ComponentContainer.js +1 -1
  69. package/src/sap/ui/core/ComponentMetadata.js +2 -2
  70. package/src/sap/ui/core/ComponentSupport.js +1 -1
  71. package/src/sap/ui/core/Configuration.js +3 -1
  72. package/src/sap/ui/core/Control.js +1 -1
  73. package/src/sap/ui/core/Core.js +3 -1
  74. package/src/sap/ui/core/CustomData.js +1 -1
  75. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  76. package/src/sap/ui/core/Element.js +1 -1
  77. package/src/sap/ui/core/ElementMetadata.js +1 -1
  78. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  79. package/src/sap/ui/core/EventBus.js +1 -1
  80. package/src/sap/ui/core/Fragment.js +1 -1
  81. package/src/sap/ui/core/HTML.js +1 -1
  82. package/src/sap/ui/core/History.js +1 -1
  83. package/src/sap/ui/core/Icon.js +17 -3
  84. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  85. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  86. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  87. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  88. package/src/sap/ui/core/InvisibleText.js +1 -1
  89. package/src/sap/ui/core/Item.js +1 -1
  90. package/src/sap/ui/core/LabelEnablement.js +1 -1
  91. package/src/sap/ui/core/LayoutData.js +1 -1
  92. package/src/sap/ui/core/ListItem.js +1 -1
  93. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  94. package/src/sap/ui/core/Locale.js +1 -1
  95. package/src/sap/ui/core/LocaleData.js +24 -5
  96. package/src/sap/ui/core/Manifest.js +1 -1
  97. package/src/sap/ui/core/Message.js +1 -1
  98. package/src/sap/ui/core/Patcher.js +3 -3
  99. package/src/sap/ui/core/Popup.js +9 -6
  100. package/src/sap/ui/core/RenderManager.js +1 -1
  101. package/src/sap/ui/core/Renderer.js +1 -1
  102. package/src/sap/ui/core/ResizeHandler.js +1 -1
  103. package/src/sap/ui/core/ScrollBar.js +1 -1
  104. package/src/sap/ui/core/SeparatorItem.js +1 -1
  105. package/src/sap/ui/core/Title.js +1 -1
  106. package/src/sap/ui/core/TooltipBase.js +1 -1
  107. package/src/sap/ui/core/UIArea.js +1 -1
  108. package/src/sap/ui/core/UIComponent.js +1 -1
  109. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  110. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  111. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  112. package/src/sap/ui/core/XMLComposite.js +1 -1
  113. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  114. package/src/sap/ui/core/XMLTemplateProcessor.js +7 -6
  115. package/src/sap/ui/core/_IconRegistry.js +3 -2
  116. package/src/sap/ui/core/cache/CacheManager.js +1 -1
  117. package/src/sap/ui/core/cache/LRUPersistentCache.js +2 -1
  118. package/src/sap/ui/core/cldr/en_AU.json +1 -1
  119. package/src/sap/ui/core/date/Buddhist.js +3 -3
  120. package/src/sap/ui/core/date/Japanese.js +3 -3
  121. package/src/sap/ui/core/date/UniversalDate.js +10 -0
  122. package/src/sap/ui/core/date/UniversalDateUtils.js +1 -1
  123. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  124. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  125. package/src/sap/ui/core/dnd/DragAndDrop.js +19 -16
  126. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  127. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  128. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  129. package/src/sap/ui/core/dnd/DropInfo.js +3 -3
  130. package/src/sap/ui/core/format/DateFormat.js +125 -61
  131. package/src/sap/ui/core/format/DateFormatTimezoneDisplay.js +1 -0
  132. package/src/sap/ui/core/format/NumberFormat.js +331 -179
  133. package/src/sap/ui/core/format/TimezoneUtil.js +1 -1
  134. package/src/sap/ui/core/hyphenation/Hyphenation.js +1 -1
  135. package/src/sap/ui/core/library.js +85 -49
  136. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  137. package/src/sap/ui/core/message/Message.js +1 -1
  138. package/src/sap/ui/core/message/MessageManager.js +1 -1
  139. package/src/sap/ui/core/message/MessageParser.js +1 -1
  140. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  141. package/src/sap/ui/core/messagebundle.properties +0 -2
  142. package/src/sap/ui/core/messagebundle_ar.properties +0 -1
  143. package/src/sap/ui/core/messagebundle_bg.properties +0 -1
  144. package/src/sap/ui/core/messagebundle_ca.properties +0 -1
  145. package/src/sap/ui/core/messagebundle_cs.properties +0 -1
  146. package/src/sap/ui/core/messagebundle_cy.properties +0 -1
  147. package/src/sap/ui/core/messagebundle_da.properties +0 -1
  148. package/src/sap/ui/core/messagebundle_de.properties +0 -1
  149. package/src/sap/ui/core/messagebundle_el.properties +0 -1
  150. package/src/sap/ui/core/messagebundle_en.properties +0 -1
  151. package/src/sap/ui/core/messagebundle_en_GB.properties +0 -1
  152. package/src/sap/ui/core/messagebundle_en_US_sappsd.properties +0 -1
  153. package/src/sap/ui/core/messagebundle_en_US_saptrc.properties +0 -1
  154. package/src/sap/ui/core/messagebundle_es.properties +0 -1
  155. package/src/sap/ui/core/messagebundle_es_MX.properties +0 -1
  156. package/src/sap/ui/core/messagebundle_et.properties +0 -1
  157. package/src/sap/ui/core/messagebundle_fi.properties +0 -1
  158. package/src/sap/ui/core/messagebundle_fr.properties +0 -1
  159. package/src/sap/ui/core/messagebundle_fr_CA.properties +0 -1
  160. package/src/sap/ui/core/messagebundle_hi.properties +0 -1
  161. package/src/sap/ui/core/messagebundle_hr.properties +0 -1
  162. package/src/sap/ui/core/messagebundle_hu.properties +0 -1
  163. package/src/sap/ui/core/messagebundle_id.properties +0 -1
  164. package/src/sap/ui/core/messagebundle_it.properties +0 -1
  165. package/src/sap/ui/core/messagebundle_iw.properties +0 -1
  166. package/src/sap/ui/core/messagebundle_ja.properties +0 -1
  167. package/src/sap/ui/core/messagebundle_kk.properties +0 -1
  168. package/src/sap/ui/core/messagebundle_ko.properties +1 -2
  169. package/src/sap/ui/core/messagebundle_lt.properties +0 -1
  170. package/src/sap/ui/core/messagebundle_lv.properties +0 -1
  171. package/src/sap/ui/core/messagebundle_ms.properties +0 -1
  172. package/src/sap/ui/core/messagebundle_nl.properties +0 -1
  173. package/src/sap/ui/core/messagebundle_no.properties +0 -1
  174. package/src/sap/ui/core/messagebundle_pl.properties +0 -1
  175. package/src/sap/ui/core/messagebundle_pt.properties +0 -1
  176. package/src/sap/ui/core/messagebundle_pt_PT.properties +0 -1
  177. package/src/sap/ui/core/messagebundle_ro.properties +0 -1
  178. package/src/sap/ui/core/messagebundle_ru.properties +0 -1
  179. package/src/sap/ui/core/messagebundle_sh.properties +0 -1
  180. package/src/sap/ui/core/messagebundle_sk.properties +0 -1
  181. package/src/sap/ui/core/messagebundle_sl.properties +0 -1
  182. package/src/sap/ui/core/messagebundle_sv.properties +0 -1
  183. package/src/sap/ui/core/messagebundle_th.properties +0 -1
  184. package/src/sap/ui/core/messagebundle_tr.properties +0 -1
  185. package/src/sap/ui/core/messagebundle_uk.properties +0 -1
  186. package/src/sap/ui/core/messagebundle_vi.properties +0 -1
  187. package/src/sap/ui/core/messagebundle_zh_CN.properties +0 -1
  188. package/src/sap/ui/core/messagebundle_zh_TW.properties +0 -1
  189. package/src/sap/ui/core/mvc/Controller.js +1 -1
  190. package/src/sap/ui/core/mvc/ControllerExtensionProvider.js +1 -1
  191. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  192. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  193. package/src/sap/ui/core/mvc/JSView.js +1 -1
  194. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  195. package/src/sap/ui/core/mvc/View.js +1 -1
  196. package/src/sap/ui/core/mvc/XMLView.js +9 -1
  197. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  198. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  199. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  200. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  201. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  202. package/src/sap/ui/core/rules/Misc.support.js +8 -3
  203. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  204. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  205. package/src/sap/ui/core/service/Service.js +1 -1
  206. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  207. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  208. package/src/sap/ui/core/support/Plugin.js +1 -1
  209. package/src/sap/ui/core/support/Support.js +3 -3
  210. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  211. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  212. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  213. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  214. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  215. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  216. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  217. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  218. package/src/sap/ui/core/themes/base/CommandShortcutHints.less +1 -1
  219. package/src/sap/ui/core/themes/base/base.less +1108 -35
  220. package/src/sap/ui/core/themes/base/global.less +158 -4
  221. package/src/sap/ui/core/themes/sap_hcb/global.less +157 -2
  222. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  223. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  224. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  225. package/src/sap/ui/core/tmpl/Template.js +1 -1
  226. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  227. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  228. package/src/sap/ui/core/util/Export.js +1 -1
  229. package/src/sap/ui/core/util/ExportCell.js +1 -1
  230. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  231. package/src/sap/ui/core/util/ExportRow.js +1 -1
  232. package/src/sap/ui/core/util/ExportType.js +1 -1
  233. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  234. package/src/sap/ui/core/util/File.js +1 -1
  235. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  236. package/src/sap/ui/core/util/MockServer.js +3 -2
  237. package/src/sap/ui/core/util/PasteHelper.js +2 -2
  238. package/src/sap/ui/core/util/XMLPreprocessor.js +1 -0
  239. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  240. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  241. package/src/sap/ui/core/util/serializer/ViewSerializer.js +1 -1
  242. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  243. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  244. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  245. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  246. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  247. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  248. package/src/sap/ui/core/ws/WebSocket.js +1 -1
  249. package/src/sap/ui/debug/ControlTree.js +1 -1
  250. package/src/sap/ui/debug/DebugEnv.js +1 -1
  251. package/src/sap/ui/debug/LogViewer.js +2 -2
  252. package/src/sap/ui/debug/PropertyList.js +1 -1
  253. package/src/sap/ui/model/ClientModel.js +1 -1
  254. package/src/sap/ui/model/CompositeBinding.js +3 -0
  255. package/src/sap/ui/model/CompositeDataState.js +1 -1
  256. package/src/sap/ui/model/CompositeType.js +13 -1
  257. package/src/sap/ui/model/DataState.js +1 -1
  258. package/src/sap/ui/model/MetaModel.js +1 -1
  259. package/src/sap/ui/model/Model.js +1 -1
  260. package/src/sap/ui/model/SelectionModel.js +1 -1
  261. package/src/sap/ui/model/SimpleType.js +1 -1
  262. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  263. package/src/sap/ui/model/Type.js +1 -1
  264. package/src/sap/ui/model/_Helper.js +22 -0
  265. package/src/sap/ui/model/analytics/AnalyticalBinding.js +28 -12
  266. package/src/sap/ui/model/base/ManagedObjectModel.js +8 -6
  267. package/src/sap/ui/model/json/JSONModel.js +15 -8
  268. package/src/sap/ui/model/message/MessageModel.js +1 -1
  269. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  270. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  271. package/src/sap/ui/model/odata/ODataMetaModel.js +1 -1
  272. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  273. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  274. package/src/sap/ui/model/odata/ODataPropertyBinding.js +3 -1
  275. package/src/sap/ui/model/odata/ODataTreeBindingFlat.js +1 -1
  276. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  277. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  278. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  279. package/src/sap/ui/model/odata/type/Date.js +1 -1
  280. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  281. package/src/sap/ui/model/odata/type/DateTimeBase.js +1 -1
  282. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  283. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +54 -46
  284. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  285. package/src/sap/ui/model/odata/type/Double.js +1 -1
  286. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  287. package/src/sap/ui/model/odata/type/Int.js +1 -1
  288. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  289. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  290. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  291. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  292. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  293. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  294. package/src/sap/ui/model/odata/type/Single.js +1 -1
  295. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  296. package/src/sap/ui/model/odata/type/String.js +1 -1
  297. package/src/sap/ui/model/odata/type/Time.js +1 -1
  298. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  299. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  300. package/src/sap/ui/model/odata/v2/Context.js +7 -3
  301. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +1 -1
  302. package/src/sap/ui/model/odata/v2/ODataListBinding.js +109 -26
  303. package/src/sap/ui/model/odata/v2/ODataModel.js +236 -45
  304. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  305. package/src/sap/ui/model/odata/v4/Context.js +20 -22
  306. package/src/sap/ui/model/odata/v4/ODataBinding.js +50 -32
  307. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +33 -5
  308. package/src/sap/ui/model/odata/v4/ODataListBinding.js +183 -46
  309. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +1 -1
  310. package/src/sap/ui/model/odata/v4/ODataModel.js +185 -24
  311. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +25 -57
  312. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +3 -2
  313. package/src/sap/ui/model/odata/v4/lib/_Cache.js +146 -31
  314. package/src/sap/ui/model/odata/v4/lib/_GroupLock.js +4 -0
  315. package/src/sap/ui/model/odata/v4/lib/_Helper.js +6 -3
  316. package/src/sap/ui/model/odata/v4/lib/_Requestor.js +162 -8
  317. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  318. package/src/sap/ui/model/type/Boolean.js +1 -1
  319. package/src/sap/ui/model/type/Currency.js +1 -1
  320. package/src/sap/ui/model/type/Date.js +1 -1
  321. package/src/sap/ui/model/type/DateInterval.js +1 -1
  322. package/src/sap/ui/model/type/DateTime.js +1 -1
  323. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  324. package/src/sap/ui/model/type/FileSize.js +1 -1
  325. package/src/sap/ui/model/type/Float.js +1 -1
  326. package/src/sap/ui/model/type/Integer.js +1 -1
  327. package/src/sap/ui/model/type/String.js +1 -1
  328. package/src/sap/ui/model/type/Time.js +1 -1
  329. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  330. package/src/sap/ui/model/type/Unit.js +1 -1
  331. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  332. package/src/sap/ui/performance/trace/FESR.js +1 -1
  333. package/src/sap/ui/performance/trace/FESRHelper.js +72 -0
  334. package/src/sap/ui/performance/trace/Interaction.js +6 -2
  335. package/src/sap/ui/qunit/qunit-2-css.js +4 -4
  336. package/src/sap/ui/qunit/qunit-css.js +4 -4
  337. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  338. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  339. package/src/sap/ui/test/BranchTracking.js +1 -0
  340. package/src/sap/ui/test/OpaBuilder.js +7 -7
  341. package/src/sap/ui/test/TestUtils.js +10 -0
  342. package/src/sap/ui/test/_UsageReport.js +1 -1
  343. package/src/sap/ui/test/generic/GenericTestCollection.js +176 -0
  344. package/src/sap/ui/test/generic/TestBase.js +151 -0
  345. package/src/sap/ui/test/generic/Utils.js +284 -0
  346. package/src/sap/ui/test/selectors/_ControlSelectorGenerator.js +9 -8
  347. package/src/sap/ui/test/selectors/_ControlSelectorValidator.js +1 -1
  348. package/src/sap/ui/test/starter/_setupAndStart.js +4 -0
  349. package/src/sap/ui/thirdparty/IPv6.js +1 -1
  350. package/src/sap/ui/thirdparty/SecondLevelDomains.js +1 -1
  351. package/src/sap/ui/thirdparty/URI.js +7 -3
  352. package/src/sap/ui/thirdparty/URITemplate.js +1 -1
  353. package/src/sap/ui/thirdparty/jszip.js +17 -7
  354. package/src/sap/ui/util/Mobile.js +17 -0
  355. package/src/sap/ui/util/Storage.js +1 -1
@@ -0,0 +1,151 @@
1
+ /*!
2
+ * OpenUI5
3
+ * (c) Copyright 2009-2022 SAP SE or an SAP affiliate company.
4
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
+ */
6
+
7
+ /* global QUnit */
8
+ sap.ui.define([
9
+ "sap/ui/base/Object",
10
+ "sap/ui/test/generic/Utils",
11
+ "sap/ui/dom/includeStylesheet",
12
+ "sap/ui/core/Element",
13
+ "require"
14
+ ], function(BaseObject, Utils, includeStylesheet, Element, require) {
15
+ "use strict";
16
+
17
+ /**
18
+ * Handles test setup and execution.
19
+ * Single controls/elements are to be tested via the specific sub-classes by
20
+ * implementing shouldIgnoreControl() and testControl().
21
+ *
22
+ * @class Base class for generic tests.
23
+ *
24
+ * @extends sap.ui.base.Object
25
+ * @abstract
26
+ * @author SAP SE
27
+ * @version 1.100.0
28
+ * @since 1.100
29
+ */
30
+ return BaseObject.extend("sap.ui.test.generic.TestBase", {
31
+
32
+ /**
33
+ * Checks whether the control with the given name should for some reason not be tested
34
+ *
35
+ * @private
36
+ * @param {sap.ui.test.generic.ClassInfo} oClassInfo Info object containing the <code>sap.ui.test.generic.ClassInfo</code> object
37
+ * @param {QUnit.assert} assert QUnit Assert class of which instances are passed as the argument to QUnit.test() callbacks
38
+ * @return {boolean} Returns 'true' if control should not be tested
39
+ *
40
+ */
41
+ shouldIgnoreControl: function(oClassInfo, assert) {
42
+ return false;
43
+ },
44
+
45
+ /**
46
+ * Called for each control/element in a library.
47
+ * Must be implemented by sub-classes.
48
+ *
49
+ * @param {sap.ui.test.generic.ClassInfo} oClassInfo Info object containing the <code>sap.ui.test.generic.ClassInfo</code> object
50
+ * @param {QUnit.assert} assert QUnit Assert class of which instances are passed as the argument to QUnit.test() callbacks
51
+ * @private
52
+ * @abstract
53
+ */
54
+ testControl: function(oClassInfo, assert) {},
55
+
56
+ /**
57
+ * Getter for the ObjectCapabilities
58
+ *
59
+ * @param {string} sClass Class name to get the ObjectCapabilities for a specific Class
60
+ * @return {sap.ui.test.generic.GenericTestCollection.ObjectCapabilities|Object<string,sap.ui.test.generic.GenericTestCollection.ObjectCapabilities>} Promise resolved after test run is finished
61
+ * @private
62
+ */
63
+ getObjectCapabilities: function(sClass) {
64
+ if (sClass) {
65
+ return this._mObjectCapabilities[sClass];
66
+ } else {
67
+ return this._mObjectCapabilities;
68
+ }
69
+ },
70
+
71
+ /**
72
+ * Executes the generic tests.
73
+ *
74
+ * @param {sap.ui.test.generic.ClassInfo[]} aClassInfo Array containing all loaded controls/elements which belong to the library
75
+ * @return {Promise} Promise resolved after test run is finished
76
+ * @private
77
+ */
78
+ run: function(aClassInfo) {
79
+ // Only necessary for test which render controls
80
+ return includeStylesheet({
81
+ url: require.toUrl("test-resources/sap/ui/core/qunit/generic/helper/_cleanupStyles.css")
82
+ }).then(function () {
83
+ return Promise.all(aClassInfo.map(function(oClassInfo) {
84
+ var sClassName = oClassInfo.className;
85
+ var sCaption = sClassName.startsWith(this._sLibName) ? sClassName.slice(this._sLibName.length) : sClassName;
86
+ QUnit.test(sCaption, function (assert) {
87
+ if (!this.shouldIgnoreControl(oClassInfo, assert)) {
88
+ this._iFullyTestedControls++;
89
+ return this.testControl.apply(this, [oClassInfo, assert]);
90
+ } else {
91
+ // nothing to do
92
+ this._iIgnoredOrExcludedControls++;
93
+ return Promise.resolve();
94
+ }
95
+ }.bind(this));
96
+ }.bind(this))).then(function () {
97
+ // display some numbers regarding test execution
98
+ QUnit.test("Statistics", function(assert) {
99
+ assert.ok(true, "Total number of found controls: " + this._iAllControls);
100
+ assert.ok(true, "Total number of ignored or excluded controls: " + this._iIgnoredOrExcludedControls);
101
+ assert.ok(true, "Number of fully tested controls: " + this._iFullyTestedControls);
102
+ }.bind(this));
103
+
104
+ }.bind(this));
105
+ }.bind(this));
106
+ },
107
+
108
+ /**
109
+ * Performs the setup and execution of a generic test.
110
+ * Loads all controls/elements of the configured library and provides a QUnit.module.
111
+ *
112
+ * @param {object} [mParams] Test specific parameters
113
+ * @param {string} [mParams.includeElements] Include elements for test execution
114
+ * @returns {Promise<undefined>} setup promise, delays test start until all controls/elements are loaded
115
+ * @private
116
+ */
117
+ setupAndStart: function(mParams) {
118
+ // statistics values
119
+ this._iAllControls = 0;
120
+ this._iIgnoredOrExcludedControls = 0;
121
+ this._iFullyTestedControls = 0;
122
+
123
+ // retrieve test config
124
+ this._oTestParameters = window["sap-ui-test-config"];
125
+ this._mObjectCapabilities = this._oTestParameters.objectCapabilities || {};
126
+ this._sLibName = this._oTestParameters.library;
127
+
128
+ return Utils.loadAllControls(this._oTestParameters, {
129
+ includeElements: mParams && mParams.includeElements
130
+ }).then(function(aClassInfo) {
131
+ QUnit.module(this.getMetadata().getName() + " Tests - " + this._sLibName, {
132
+ afterEach: function() {
133
+ Element.registry.forEach(function(oElement, sId) {
134
+ oElement.destroy();
135
+ });
136
+ }
137
+ });
138
+
139
+ if (aClassInfo.length === 0) {
140
+ QUnit.test("No classes to test for library '" + this._sLibName + "'.", function (assert) {
141
+ // We could also skip this test but voter complains in case there is no test execution at all
142
+ assert.ok(true, "Nothing to test.");
143
+ });
144
+ } else {
145
+ this._iAllControls = aClassInfo.length;
146
+ return this.run(aClassInfo);
147
+ }
148
+ }.bind(this));
149
+ }
150
+ });
151
+ });
@@ -0,0 +1,284 @@
1
+ /*!
2
+ * OpenUI5
3
+ * (c) Copyright 2009-2022 SAP SE or an SAP affiliate company.
4
+ * Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
5
+ */
6
+
7
+ /* globals QUnit */
8
+ sap.ui.define([
9
+ "sap/base/util/ObjectPath",
10
+ "sap/ui/base/DataType",
11
+ "sap/ui/test/generic/GenericTestCollection",
12
+ "require"
13
+ ], function(ObjectPath, DataType, GenericTestCollection, require) {
14
+ "use strict";
15
+
16
+ /**
17
+ * @typedef {object} sap.ui.test.generic.ClassInfo
18
+ * @property {string} className The class name
19
+ * @property {sap.ui.core.Control|sap.ui.core.Element} [fnClass=undefined] The loaded class
20
+ * @property {Error} [error=undefined] The error that might occur
21
+ *
22
+ * @private
23
+ **/
24
+
25
+ /**
26
+ * @namespace sap.ui.test.generic.Utils
27
+ * @private
28
+ * @ui5-restricted Only for DIST layer libraries
29
+ */
30
+ var Utils = {
31
+ /**
32
+ * @param {string} sClassName The class name which should be loaded
33
+ * @param {string} sContainingModuleName Name of the module that contains the class. If not given, it is assumed that a module with the same name as the class (dots replaced by slashes) exports the class.
34
+ * When given, the module is loaded and the class is retrieved via its global name
35
+ * @return {Promise<sap.ui.test.generic.ClassInfo>} Returns a promise resolving with a <code>sap.ui.test.generic.ClassInfo</code> object.
36
+ */
37
+ loadClass: function(sClassName, sContainingModuleName) {
38
+ return new Promise(function(resolve) {
39
+ var sModuleName = sContainingModuleName ? sContainingModuleName : sClassName.replace(/\./g, "/");
40
+ require([sModuleName], function(Class) {
41
+ if (sContainingModuleName) {
42
+ Class = ObjectPath.get(sClassName);
43
+ }
44
+ resolve({
45
+ className: sClassName,
46
+ fnClass: Class,
47
+ error: undefined
48
+ });
49
+
50
+ }, function(err) {
51
+ var Class = ObjectPath.get(sClassName);
52
+ resolve({
53
+ className: sClassName,
54
+ fnClass: Class,
55
+ error: err
56
+ });
57
+ });
58
+ });
59
+ },
60
+
61
+ /**
62
+ * Loads all control classes for the given library.
63
+ *
64
+ * @param {object} [mTestParams] Test specific parameters
65
+ * @param {string} [mTestParams.library] The library name
66
+ * @param {sap.ui.test.generic.GenericTestCollection.ObjectCapabilities} [mTestParams.objectCapabilities] The capabilities of the controls
67
+ * @param {object} [mOptions] Object that holds further configs.
68
+ * @param {boolean} [mOptions.includeElements=false] Whether the library's elements should be considered as well.
69
+ * @return {Promise<sap.ui.test.generic.ClassInfo[]>} Returns a promise resolving with an array of <code>sap.ui.test.generic.ClassInfo</code> objects.
70
+ */
71
+ loadAllControls: function(mTestParams, mOptions) {
72
+ var sLibName = mTestParams.library;
73
+ var mCapabilities = mTestParams.objectCapabilities || {};
74
+ var aLoadedElementsAndControls = [];
75
+
76
+ mOptions = mOptions || {};
77
+
78
+ var aLoadClassPromises = [];
79
+
80
+ var loadControls = function () {
81
+ return sap.ui.getCore().loadLibrary(sLibName, true).then(function (library) {
82
+ var aClasses = library ? library.controls : [];
83
+
84
+ if (mOptions.includeElements) {
85
+ aClasses = aClasses.concat(library.elements);
86
+ }
87
+
88
+ aClasses = aClasses.filter(function (sControlName) {
89
+ // Check if there are new controls or elements available in library after the previous loading
90
+ return !aLoadedElementsAndControls.includes(sControlName);
91
+ });
92
+
93
+ if (aClasses.length > 0) {
94
+ aClasses.forEach(function(sClass) {
95
+ var sModuleName = mCapabilities[sClass] && mCapabilities[sClass].moduleName;
96
+
97
+ aLoadClassPromises.push(Utils.loadClass(sClass, sModuleName));
98
+ aLoadedElementsAndControls.push(sClass);
99
+ });
100
+ return Promise.all(aLoadClassPromises).then(loadControls);
101
+ }
102
+ return Promise.all(aLoadClassPromises);
103
+ });
104
+ };
105
+
106
+ return loadControls().then(function (aClassInfo) {
107
+ var i;
108
+ var aClassInfoError = aClassInfo.filter(function (oClassInfo) {
109
+ return oClassInfo.error !== undefined;
110
+ });
111
+
112
+ aClassInfo = aClassInfo.filter(function (oClassInfo) {
113
+ return !!oClassInfo.fnClass;
114
+ });
115
+
116
+ if (aClassInfoError.length) {
117
+ QUnit.test("Controls only available in global namespace", function (assert) {
118
+ for (i = 0; i < aClassInfoError.length; i++) {
119
+ assert.ok(false, aClassInfoError[i].className + " seems to be only available using global namespace." +
120
+ " If the class exists, but is not a module of its own, then specify the module that contains the class within the testsuite config.");
121
+ }
122
+ });
123
+ }
124
+ return aClassInfo;
125
+ });
126
+ },
127
+
128
+ /**
129
+ * Create a control or element based on the given object capabilities
130
+ *
131
+ * @param {sap.ui.core.Control|sap.ui.core.Element} Class The control or element class to instantiate
132
+ * @param {sap.ui.test.generic.GenericTestCollection.ObjectCapabilities} oObjectCapabilities The capabilities of the correspodning control
133
+ * @param {map} mSettings Settings which should be used to create the control or element
134
+ * @return {sap.ui.core.Control|sap.ui.core.Element} Instance of the control or element
135
+ */
136
+ createControlOrElement: function (Class, oObjectCapabilities, mSettings) {
137
+ if (oObjectCapabilities && oObjectCapabilities.create) {
138
+ return oObjectCapabilities.create(Class, mSettings);
139
+ } else {
140
+ return new Class(mSettings);
141
+ }
142
+
143
+ },
144
+
145
+ /**
146
+ * Tries to fill all control properties with string values
147
+ *
148
+ * @param {sap.ui.core.Control} oControl The control whose properties get filled
149
+ * @param {sap.ui.test.generic.GenericTestCollection.ObjectCapabilities} oObjectCapabilities The capabilities of the corresponding control
150
+ */
151
+ fillControlProperties: function(oControl, oObjectCapabilities) {
152
+ var mProperties = oControl.getMetadata().getAllProperties(),
153
+ mPropertyCapabilities = oObjectCapabilities && oObjectCapabilities.properties || {},
154
+ vValueToSet = "test"; // just try a string as default, with some frequently happening exceptions
155
+
156
+ for (var sPropertyName in mProperties) {
157
+ var oProperty = mProperties[sPropertyName],
158
+ sPropertyCapability;
159
+
160
+ // Check if property should be skipped because of known issues or if a specific value should be used for setting the property
161
+ if (mPropertyCapabilities[sPropertyName]) {
162
+ if (GenericTestCollection.ExcludeReason.hasOwnProperty(mPropertyCapabilities[sPropertyName])) {
163
+ sPropertyCapability = mPropertyCapabilities[sPropertyName];
164
+ } else {
165
+ vValueToSet = mPropertyCapabilities[sPropertyName];
166
+ }
167
+ }
168
+
169
+ if (sPropertyCapability !== GenericTestCollection.ExcludeReason.NotChangeableAfterInit &&
170
+ sPropertyCapability !== GenericTestCollection.ExcludeReason.SetterNeedsSpecificSettings &&
171
+ sPropertyCapability !== GenericTestCollection.ExcludeReason.OnlyChangeableViaBinding) {
172
+ try {
173
+ if (oProperty.type === "boolean") {
174
+ vValueToSet = false;
175
+ } else if (oProperty.type === "int") {
176
+ vValueToSet = 100;
177
+ } else if (oProperty.type.startsWith("sap.")) {
178
+ var oEnum = require(oProperty.type.replace(/\./g, "\/"));
179
+ vValueToSet = oEnum[Object.keys(oEnum)[0]];
180
+ }
181
+
182
+ oControl[oProperty._sMutator](vValueToSet);
183
+ } catch (e) {
184
+ // type check error, ignore
185
+ // QUnit.assert.ok(true, "INFO: Failed to fill property: '" + sPropertyName + "' to control '" + oControl.getMetadata().getName() + "'");
186
+ }
187
+ }
188
+ }
189
+ try {
190
+ oControl.setTooltip("test"); // seems not to be a property...
191
+ } catch (error) {
192
+ // This case currently only happens in sap.ui.webc libraries
193
+ // They can't handle a string as tooltip properly therefore
194
+ // setting tooltip on these controls fails
195
+ // Adding this try catch here instead of exception in order
196
+ // to avoid an entry for each of the controls in the
197
+ // corresponding config files
198
+ // The libraries where not tested before the introduction
199
+ // of the new generic tests for libraries. Therefore the
200
+ // issue was not 'visible' before
201
+ QUnit.assert.ok(true, "WARNING: setTooltip is not able to handle strings");
202
+ }
203
+ },
204
+
205
+ fillControlAggregations: function(oControl, mObjectCapabilities) {
206
+ var oMetadata = oControl.getMetadata(),
207
+ oObjectCapabilities = mObjectCapabilities[oMetadata.getName()],
208
+ mAggregations = oMetadata.getAggregations();
209
+ return Promise.all(
210
+ Object.values(mAggregations).map(function(oAggregation) {
211
+ var sAggregationType = oAggregation.type;
212
+
213
+ // Specific handling for frequently used abstract and interface classes
214
+ switch (oAggregation.type) {
215
+ case "sap.ui.core.Control":
216
+ // Use sap.m.Text in case aggregation is of type sap.ui.core.Control
217
+ sAggregationType = "sap.m.Text";
218
+ break;
219
+ case "sap.ui.core.Element":
220
+ // Use sap.ui.core.Icon in case aggregation is of type sap.ui.core.Element
221
+ sAggregationType = "sap.ui.core.Icon";
222
+ break;
223
+ case "sap.ui.core.Toolbar":
224
+ // Toolbar is interface - Special treatment because of legacy coding in old
225
+ // DuplicateIdCheck qunit
226
+ sAggregationType = "sap.m.Bar";
227
+ break;
228
+ default:
229
+ sAggregationType = oAggregation.type;
230
+ break;
231
+ }
232
+
233
+ // Check if aggregation should be skipped because of known issues or if a specific control should be used for the aggregation
234
+ if (oObjectCapabilities && oObjectCapabilities.aggregations && oObjectCapabilities.aggregations[oAggregation.name]) {
235
+ if (GenericTestCollection.ExcludeReason.hasOwnProperty(oObjectCapabilities.aggregations[oAggregation.name])) {
236
+ var sAggregationCapability = oObjectCapabilities.aggregations[oAggregation.name];
237
+
238
+ if (sAggregationCapability === GenericTestCollection.ExcludeReason.NotChangeableAfterInit ||
239
+ sAggregationCapability === GenericTestCollection.ExcludeReason.SetterNeedsSpecificSettings) {
240
+ return Promise.resolve(undefined); // Skip this aggregation because it can't be added generically
241
+ }
242
+ } else {
243
+ sAggregationType = oObjectCapabilities.aggregations[oAggregation.name];
244
+ }
245
+ }
246
+ var sModuleName = mObjectCapabilities[sAggregationType] && mObjectCapabilities[sAggregationType].moduleName ? mObjectCapabilities[sAggregationType].moduleName : undefined;
247
+
248
+ if (DataType.isInterfaceType(sAggregationType)) {
249
+ return Promise.resolve(undefined); // Can't handle interface types generically
250
+ }
251
+ return Utils.loadClass(sAggregationType, sModuleName).then(function(oClassInfo) {
252
+ var oElement;
253
+
254
+ if (!oClassInfo.fnClass) {
255
+ QUnit.assert.ok(false, "No class of type " + sAggregationType + " for aggregation '" + oAggregation.name + "' of " + oControl + " could be loaded. Does this class exist? Is it properly implemented?");
256
+ return;
257
+ }
258
+
259
+ if (oClassInfo.fnClass.getMetadata().isAbstract() ) {
260
+ // we also shouldn't instantiate abstract classes
261
+ return;
262
+
263
+ } else {
264
+ // A specific Control or Element type. Try to add a working instance.
265
+ oElement = new oClassInfo.fnClass();
266
+ }
267
+
268
+ // In case we were able to instantiate a suitable Element, add it into the aggregation.
269
+ if (oElement) {
270
+ oControl[oAggregation._sMutator](oElement);
271
+ }
272
+
273
+ return oElement;
274
+ }).catch(function () {
275
+ // error while creating or adding a child element: not a problem, just reducing test coverage a bit
276
+ // QUnit.assert.ok(true, "INFO: Failed to add aggregation '" + oAggregation.name + "' of type '" + oAggregation.type + "' to control '" + oControl.getMetadata().getName() + "'");
277
+ });
278
+ })
279
+ );
280
+ }
281
+ };
282
+
283
+ return Utils;
284
+ });
@@ -33,7 +33,7 @@
33
33
  * @param {boolean} oOptions.shallow whether to do a shallow or deep search of the control tree to find a selector. Default value is false, enabling search through the tree.
34
34
  * @param {boolean} oOptions.multiple whether to return non-unique selectors as well. Default value is false, meaning that only unique selectors are returned.
35
35
  * @param {boolean} oOptions.includeAll whether to return all selectors, matching a unique control, or just the top one. Default value is false, meaning that at most one selector is returned.
36
- * @param {object} oOptions.settings preferences for the selector e.g. which is the most prefered strategy
36
+ * @param {object} oOptions.settings preferences for the selector e.g. which is the most preferred strategy
37
37
  * @param {boolean} oOptions.settings.preferViewId true if selectors with view ID should have higher priority than selectors with global ID. Default value is false.
38
38
  * @returns {Promise<object|Array|Error>} a plain object representation of a control or Error if none can be generated
39
39
  * If multiple selectors are requested, an array is returned.
@@ -61,7 +61,7 @@
61
61
  });
62
62
  };
63
63
 
64
- // hieararchical search parameters. modify only when debugging
64
+ // hierarchical search parameters. modify only when debugging
65
65
  var DEFAULT_MAX_DEPTH = 20;
66
66
  var DEAULT_MAX_WIDTH = 10;
67
67
 
@@ -237,9 +237,10 @@
237
237
  /**
238
238
  * (slow) Use when no selector can be generated for the control by the plain generators.
239
239
  * Search down the tree for a descendant with unique selector, then get a selector relative to it:
240
- * 1. Find a selector that desribes the control within the app (doesn't have to be unique).
240
+ * 1. Find a selector that describes the control within the app (doesn't have to be unique).
241
241
  * 2. Then, find the closest of its descendants, which has a selector that uniquely describes it within the app.
242
- * @param {object} oControl the control to use as a starting point for the search
242
+ * @param {object} oOptions options to configure selector generation
243
+ * @param {object} oOptions.oControl the control to use as a starting point for the search
243
244
  * @returns {object} a selector
244
245
  * @private
245
246
  */
@@ -261,7 +262,7 @@
261
262
  /**
262
263
  * (slow) Use when no selector can be generated for the control by the plain generators.
263
264
  * Search up and down the tree for a control with a unique selector, then get a selector relative to it:
264
- * 1. Find a selector that desribes the control within the app (doesn't have to be unique).
265
+ * 1. Find a selector that describes the control within the app (doesn't have to be unique).
265
266
  * 2. Then, find the closest of its siblings, which has a selector that uniquely describes it within the app.
266
267
  * a sibling is a control that has the same ancestor
267
268
  * This resembles a descendant search, done for every ancestor (up to a certain level)
@@ -277,7 +278,7 @@
277
278
  shallow: true,
278
279
  multiple: true
279
280
  }).then(function (mTargetMultiSelector) {
280
- // find a selector that incudes a relative or sibling, that has a unique selector
281
+ // find a selector that includes a relative or sibling, that has a unique selector
281
282
  return _ControlSelectorGenerator._generateSelectorWithUniqueSibling(oOptions, mTargetMultiSelector);
282
283
  });
283
284
  };
@@ -455,7 +456,7 @@
455
456
  };
456
457
 
457
458
  /**
458
- * iterate thourgh all controls a a given level and attempt to generate a unique selector for each one.
459
+ * Iterate through all controls a a given level and attempt to generate a unique selector for each one.
459
460
  * stop the cycle as soon as one unique selector is found
460
461
  * @param {Array} oOptions.siblings the children at a given tree level
461
462
  * @param {object} oOptions.options filter options
@@ -518,7 +519,7 @@
518
519
  * Filters valid selectors.
519
520
  * @param {object} vSelector a control selector or array of selectors
520
521
  * @param {object} oOptions.validationRoot the subtree root. If not defined, the selector will be valid for the entire app.
521
- * @param {boolean} oOptions.multiple whether the selector can match mulitple controls. False by default.
522
+ * @param {boolean} oOptions.multiple whether the selector can match multiple controls. False by default.
522
523
  * @returns {array} an array of valid selectors
523
524
  * @private
524
525
  */
@@ -22,7 +22,7 @@ sap.ui.define([
22
22
  */
23
23
  var _ControlSelectorValidator = ManagedObject.extend("sap.ui.test.selectors._ControlSelectorValidator", {
24
24
  /**
25
- * contruct a validator
25
+ * Construct a validator
26
26
  * @param {object} oValidationRoot control which will be used to test the selector
27
27
  * The selector should be unique in the control subtree with root oOptions.validationRoot. By default, this subtree is the entire app control tree.
28
28
  * @param {boolean} bMultiple whether to validate non-unique selectors as well. Default value is false, meaning that only unique selectors are valid.
@@ -310,6 +310,10 @@ sap.ui.define([
310
310
  window["sap-ui-config"].libs = window["sap-ui-config"].libs.join(",");
311
311
  }
312
312
 
313
+ // write test config to window
314
+ // can be read by specific tests, e.g. tests in the generic test collection
315
+ window["sap-ui-test-config"] = oConfig.testConfig || {};
316
+
313
317
  if ( oConfig.bootCore ) {
314
318
  pTestEnv = pTestEnv.then(function() {
315
319
  return new Promise(function(resolve, reject) {
@@ -2,7 +2,7 @@
2
2
  * URI.js - Mutating URLs
3
3
  * IPv6 Support
4
4
  *
5
- * Version: 1.19.7
5
+ * Version: 1.19.10
6
6
  *
7
7
  * Author: Rodney Rehm
8
8
  * Web: http://medialize.github.io/URI.js/
@@ -2,7 +2,7 @@
2
2
  * URI.js - Mutating URLs
3
3
  * Second Level Domain (SLD) Support
4
4
  *
5
- * Version: 1.19.7
5
+ * Version: 1.19.10
6
6
  *
7
7
  * Author: Rodney Rehm
8
8
  * Web: http://medialize.github.io/URI.js/
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * URI.js - Mutating URLs
3
3
  *
4
- * Version: 1.19.7
4
+ * Version: 1.19.10
5
5
  *
6
6
  * Author: Rodney Rehm
7
7
  * Web: http://medialize.github.io/URI.js/
@@ -90,7 +90,7 @@
90
90
  return /^[0-9]+$/.test(value);
91
91
  }
92
92
 
93
- URI.version = '1.19.7';
93
+ URI.version = '1.19.10';
94
94
 
95
95
  var p = URI.prototype;
96
96
  var hasOwn = Object.prototype.hasOwnProperty;
@@ -248,6 +248,7 @@
248
248
  // balanced parens inclusion (), [], {}, <>
249
249
  parens: /(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g,
250
250
  };
251
+ URI.leading_whitespace_expression = /^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/
251
252
  // http://www.iana.org/assignments/uri-schemes.html
252
253
  // http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports
253
254
  URI.defaultPorts = {
@@ -503,6 +504,9 @@
503
504
  preventInvalidHostname: URI.preventInvalidHostname
504
505
  };
505
506
  }
507
+
508
+ string = string.replace(URI.leading_whitespace_expression, '')
509
+
506
510
  // [protocol"://"[username[":"password]"@"]hostname[":"port]"/"?][path]["?"querystring]["#"fragment]
507
511
 
508
512
  // extract fragment
@@ -522,7 +526,7 @@
522
526
  }
523
527
 
524
528
  // slashes and backslashes have lost all meaning for the web protocols (https, http, wss, ws)
525
- string = string.replace(/^(https?|ftp|wss?)?:[/\\]*/, '$1://');
529
+ string = string.replace(/^(https?|ftp|wss?)?:+[/\\]*/i, '$1://');
526
530
 
527
531
  // extract protocol
528
532
  if (string.substring(0, 2) === '//') {
@@ -2,7 +2,7 @@
2
2
  * URI.js - Mutating URLs
3
3
  * URI Template Support - http://tools.ietf.org/html/rfc6570
4
4
  *
5
- * Version: 1.19.7
5
+ * Version: 1.19.10
6
6
  *
7
7
  * Author: Rodney Rehm
8
8
  * Web: http://medialize.github.io/URI.js/
@@ -292,7 +292,13 @@ function JSZip(data, options) {
292
292
  // "folder/" : {...},
293
293
  // "folder/data.txt" : {...}
294
294
  // }
295
- this.files = {};
295
+ // ##### BEGIN: MODIFIED BY SAP
296
+ // this.files = {};
297
+ // NOTE: we use a null prototype because we do not
298
+ // want filenames like "toString" coming from a zip file
299
+ // to overwrite methods and attributes in a normal Object.
300
+ this.files = Object.create(null);
301
+ // ##### END: MODIFIED BY SAP
296
302
 
297
303
  // Where we are in the hierarchy
298
304
  this.root = "";
@@ -905,9 +911,11 @@ var out = {
905
911
  var result = [],
906
912
  filename, relativePath, file, fileClone;
907
913
  for (filename in this.files) {
908
- if (!this.files.hasOwnProperty(filename)) {
909
- continue;
910
- }
914
+ // ##### BEGIN: MODIFIED BY SAP
915
+ // if (!this.files.hasOwnProperty(filename)) {
916
+ // continue;
917
+ // }
918
+ // ##### END: MODIFIED BY SAP
911
919
  file = this.files[filename];
912
920
  // return a new object, don't let the user mess with our internal objects :)
913
921
  fileClone = new ZipObject(file.name, file._data, extend(file.options));
@@ -1036,9 +1044,11 @@ var out = {
1036
1044
 
1037
1045
  // first, generate all the zip parts.
1038
1046
  for (var name in this.files) {
1039
- if (!this.files.hasOwnProperty(name)) {
1040
- continue;
1041
- }
1047
+ // ##### BEGIN: MODIFIED BY SAP
1048
+ // if (!this.files.hasOwnProperty(name)) {
1049
+ // continue;
1050
+ // }
1051
+ // ##### END: MODIFIED BY SAP
1042
1052
  var file = this.files[name];
1043
1053
 
1044
1054
  var compressionName = file.options.compression || options.compression.toUpperCase();
@@ -104,6 +104,23 @@ sap.ui.define(['sap/ui/Device', 'sap/base/Log', "sap/ui/thirdparty/jquery"], fun
104
104
  var iInnerWidthBefore = Device.resize.width;
105
105
 
106
106
  sMeta = "width=device-width, initial-scale=1.0";
107
+
108
+ // Setting maximum-scale=1.0 and user-scalable=no has effect to the manual zoom (user can pinch zoom the
109
+ // UI) and auto zoom (browser zooms in the UI automatically under some circumtances, for example when an
110
+ // input gets the focus and the font-size of the input is less than 16px on iOS) functionalities on the
111
+ // mobile platform, but there's some difference between the mobile platforms:
112
+ // * iOS: This does not disable manual zoom in Safari and it only disables the auto zoom function. In
113
+ // Chrome browser on iOS, it does disable the manual zoom but since Chrome on iOS isn't in the support
114
+ // matrix, we can ignore this.
115
+ // * other mobile platform: it does disable the manual zoom option but there's no auto zoom function.
116
+ // So we need to remove the maximum-scale=1.0:
117
+ //
118
+ // Therefore we need to add the additional settings (maximum-scale and user-scalable) only for iOS
119
+ // platform
120
+ if (Device.os.ios) {
121
+ sMeta += ", maximum-scale=1.0, user-scalable=no";
122
+ }
123
+
107
124
  $head.append(jQuery('<meta name="viewport" content="' + sMeta + '">'));
108
125
 
109
126
  // Update Device API resize info, which is necessary in some scenarios after setting the viewport info
@@ -250,7 +250,7 @@ sap.ui.define(["sap/base/assert"], function (assert) {
250
250
  *
251
251
  * @enum {string}
252
252
  * @public
253
- * @version 1.99.0
253
+ * @version 1.100.0
254
254
  */
255
255
  Storage.Type = {
256
256
  /**