@openui5/sap.ui.core 1.111.1 → 1.112.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 (274) hide show
  1. package/.dtsgenrc +38 -0
  2. package/package.json +1 -1
  3. package/src/jquery.sap.global.js +4 -1
  4. package/src/jquery.sap.properties.js +1 -1
  5. package/src/jquery.sap.resources.js +1 -1
  6. package/src/jquery.sap.script.js +1 -1
  7. package/src/jquery.sap.storage.js +3 -3
  8. package/src/sap/base/util/deepClone.js +4 -0
  9. package/src/sap/base/util/restricted/_CancelablePromise.js +1 -1
  10. package/src/sap/base/util/restricted/_castArray.js +1 -1
  11. package/src/sap/base/util/restricted/_compact.js +1 -1
  12. package/src/sap/base/util/restricted/_curry.js +1 -1
  13. package/src/sap/base/util/restricted/_debounce.js +1 -1
  14. package/src/sap/base/util/restricted/_difference.js +1 -1
  15. package/src/sap/base/util/restricted/_differenceBy.js +1 -1
  16. package/src/sap/base/util/restricted/_differenceWith.js +1 -1
  17. package/src/sap/base/util/restricted/_flatMap.js +1 -1
  18. package/src/sap/base/util/restricted/_flatMapDeep.js +1 -1
  19. package/src/sap/base/util/restricted/_flatMapDepth.js +1 -1
  20. package/src/sap/base/util/restricted/_flatten.js +1 -1
  21. package/src/sap/base/util/restricted/_flattenDeep.js +1 -1
  22. package/src/sap/base/util/restricted/_flattenDepth.js +1 -1
  23. package/src/sap/base/util/restricted/_intersection.js +1 -1
  24. package/src/sap/base/util/restricted/_intersectionBy.js +1 -1
  25. package/src/sap/base/util/restricted/_intersectionWith.js +1 -1
  26. package/src/sap/base/util/restricted/_isEqual.js +1 -1
  27. package/src/sap/base/util/restricted/_isEqualWith.js +1 -1
  28. package/src/sap/base/util/restricted/_isNil.js +1 -1
  29. package/src/sap/base/util/restricted/_max.js +1 -1
  30. package/src/sap/base/util/restricted/_merge.js +1 -1
  31. package/src/sap/base/util/restricted/_mergeWith.js +1 -1
  32. package/src/sap/base/util/restricted/_min.js +1 -1
  33. package/src/sap/base/util/restricted/_omit.js +1 -1
  34. package/src/sap/base/util/restricted/_pick.js +1 -1
  35. package/src/sap/base/util/restricted/_pickBy.js +1 -1
  36. package/src/sap/base/util/restricted/_throttle.js +1 -1
  37. package/src/sap/base/util/restricted/_toArray.js +1 -1
  38. package/src/sap/base/util/restricted/_union.js +1 -1
  39. package/src/sap/base/util/restricted/_unionBy.js +1 -1
  40. package/src/sap/base/util/restricted/_unionWith.js +1 -1
  41. package/src/sap/base/util/restricted/_uniq.js +1 -1
  42. package/src/sap/base/util/restricted/_uniqBy.js +1 -1
  43. package/src/sap/base/util/restricted/_uniqWith.js +1 -1
  44. package/src/sap/base/util/restricted/_without.js +1 -1
  45. package/src/sap/base/util/restricted/_xor.js +1 -1
  46. package/src/sap/base/util/restricted/_xorBy.js +1 -1
  47. package/src/sap/base/util/restricted/_xorWith.js +1 -1
  48. package/src/sap/base/util/restricted/_zipObject.js +1 -1
  49. package/src/sap/base/util/restricted/_zipObjectDeep.js +1 -1
  50. package/src/sap/ui/Device.js +3 -3
  51. package/src/sap/ui/Global.js +4 -4
  52. package/src/sap/ui/VersionInfo.js +14 -0
  53. package/src/sap/ui/base/Event.js +1 -1
  54. package/src/sap/ui/base/EventProvider.js +1 -1
  55. package/src/sap/ui/base/Interface.js +1 -1
  56. package/src/sap/ui/base/ManagedObject.js +1 -1
  57. package/src/sap/ui/base/ManagedObjectMetadata.js +1 -1
  58. package/src/sap/ui/base/Metadata.js +1 -1
  59. package/src/sap/ui/base/Object.js +1 -1
  60. package/src/sap/ui/base/ObjectPool.js +1 -1
  61. package/src/sap/ui/core/.library +4 -4
  62. package/src/sap/ui/core/BusyIndicator.js +1 -1
  63. package/src/sap/ui/core/Component.js +3 -3
  64. package/src/sap/ui/core/ComponentContainer.js +1 -1
  65. package/src/sap/ui/core/ComponentMetadata.js +1 -1
  66. package/src/sap/ui/core/ComponentSupport.js +1 -1
  67. package/src/sap/ui/core/Configuration.js +14 -2
  68. package/src/sap/ui/core/Control.js +1 -1
  69. package/src/sap/ui/core/Core.js +17 -8
  70. package/src/sap/ui/core/CustomData.js +1 -1
  71. package/src/sap/ui/core/DeclarativeSupport.js +1 -1
  72. package/src/sap/ui/core/Element.js +1 -1
  73. package/src/sap/ui/core/ElementMetadata.js +1 -1
  74. package/src/sap/ui/core/EnabledPropagator.js +1 -1
  75. package/src/sap/ui/core/EventBus.js +1 -1
  76. package/src/sap/ui/core/Fragment.js +1 -1
  77. package/src/sap/ui/core/HTML.js +1 -1
  78. package/src/sap/ui/core/History.js +1 -1
  79. package/src/sap/ui/core/Icon.js +1 -1
  80. package/src/sap/ui/core/IndicationColorSupport.js +1 -1
  81. package/src/sap/ui/core/IntervalTrigger.js +1 -1
  82. package/src/sap/ui/core/InvisibleMessage.js +1 -1
  83. package/src/sap/ui/core/InvisibleRenderer.js +1 -1
  84. package/src/sap/ui/core/InvisibleText.js +1 -1
  85. package/src/sap/ui/core/Item.js +1 -1
  86. package/src/sap/ui/core/LabelEnablement.js +1 -1
  87. package/src/sap/ui/core/LayoutData.js +1 -1
  88. package/src/sap/ui/core/Lib.js +40 -28
  89. package/src/sap/ui/core/ListItem.js +1 -1
  90. package/src/sap/ui/core/LocalBusyIndicator.js +1 -1
  91. package/src/sap/ui/core/Locale.js +1 -1
  92. package/src/sap/ui/core/LocaleData.js +1 -1
  93. package/src/sap/ui/core/Manifest.js +1 -1
  94. package/src/sap/ui/core/Message.js +1 -1
  95. package/src/sap/ui/core/RenderManager.js +1 -1
  96. package/src/sap/ui/core/Renderer.js +1 -1
  97. package/src/sap/ui/core/ResizeHandler.js +1 -1
  98. package/src/sap/ui/core/ScrollBar.js +1 -1
  99. package/src/sap/ui/core/SeparatorItem.js +1 -1
  100. package/src/sap/ui/core/Title.js +1 -1
  101. package/src/sap/ui/core/TooltipBase.js +1 -1
  102. package/src/sap/ui/core/UIArea.js +1 -1
  103. package/src/sap/ui/core/UIComponent.js +1 -1
  104. package/src/sap/ui/core/UIComponentMetadata.js +1 -1
  105. package/src/sap/ui/core/ValueStateSupport.js +1 -1
  106. package/src/sap/ui/core/VariantLayoutData.js +1 -1
  107. package/src/sap/ui/core/XMLComposite.js +1 -1
  108. package/src/sap/ui/core/XMLCompositeMetadata.js +1 -1
  109. package/src/sap/ui/core/_IconRegistry.js +19 -4
  110. package/src/sap/ui/core/date/Islamic.js +1 -0
  111. package/src/sap/ui/core/date/UI5Date.js +25 -5
  112. package/src/sap/ui/core/date/UniversalDate.js +2 -0
  113. package/src/sap/ui/core/date/UniversalDateUtils.js +1 -2
  114. package/src/sap/ui/core/delegate/ItemNavigation.js +1 -1
  115. package/src/sap/ui/core/delegate/ScrollEnablement.js +1 -1
  116. package/src/sap/ui/core/dnd/DragDropBase.js +1 -1
  117. package/src/sap/ui/core/dnd/DragDropInfo.js +1 -1
  118. package/src/sap/ui/core/dnd/DragInfo.js +1 -1
  119. package/src/sap/ui/core/dnd/DropInfo.js +1 -1
  120. package/src/sap/ui/core/format/DateFormat.js +13 -15
  121. package/src/sap/ui/core/format/NumberFormat.js +6 -4
  122. package/src/sap/ui/core/format/TimezoneUtil.js +21 -17
  123. package/src/sap/ui/core/hyphenation/Hyphenation.js +3 -3
  124. package/src/sap/ui/core/library.js +3 -3
  125. package/src/sap/ui/core/message/ControlMessageProcessor.js +1 -1
  126. package/src/sap/ui/core/message/Message.js +1 -1
  127. package/src/sap/ui/core/message/MessageManager.js +1 -1
  128. package/src/sap/ui/core/message/MessageParser.js +1 -1
  129. package/src/sap/ui/core/message/MessageProcessor.js +1 -1
  130. package/src/sap/ui/core/mvc/Controller.js +1 -1
  131. package/src/sap/ui/core/mvc/ControllerExtension.js +1 -1
  132. package/src/sap/ui/core/mvc/ControllerMetadata.js +4 -3
  133. package/src/sap/ui/core/mvc/HTMLView.js +1 -1
  134. package/src/sap/ui/core/mvc/JSONView.js +1 -1
  135. package/src/sap/ui/core/mvc/JSView.js +1 -1
  136. package/src/sap/ui/core/mvc/TemplateView.js +1 -1
  137. package/src/sap/ui/core/mvc/View.js +13 -9
  138. package/src/sap/ui/core/mvc/XMLView.js +1 -1
  139. package/src/sap/ui/core/plugin/DeclarativeSupport.js +1 -1
  140. package/src/sap/ui/core/plugin/LessSupport.js +1 -1
  141. package/src/sap/ui/core/plugin/TemplatingSupport.js +1 -1
  142. package/src/sap/ui/core/postmessage/Bus.js +1 -1
  143. package/src/sap/ui/core/postmessage/confirmationDialog.js +1 -1
  144. package/src/sap/ui/core/search/OpenSearchProvider.js +1 -1
  145. package/src/sap/ui/core/search/SearchProvider.js +1 -1
  146. package/src/sap/ui/core/service/Service.js +1 -1
  147. package/src/sap/ui/core/service/ServiceFactory.js +1 -1
  148. package/src/sap/ui/core/service/ServiceFactoryRegistry.js +1 -1
  149. package/src/sap/ui/core/support/Plugin.js +1 -1
  150. package/src/sap/ui/core/support/Support.js +1 -1
  151. package/src/sap/ui/core/support/plugins/ControlTree.js +1 -1
  152. package/src/sap/ui/core/support/plugins/Interaction.js +1 -1
  153. package/src/sap/ui/core/support/plugins/LocalStorage.js +1 -1
  154. package/src/sap/ui/core/support/plugins/Performance.js +1 -1
  155. package/src/sap/ui/core/support/plugins/Selector.js +1 -1
  156. package/src/sap/ui/core/support/plugins/TechInfo.js +1 -1
  157. package/src/sap/ui/core/support/plugins/Trace.js +1 -1
  158. package/src/sap/ui/core/support/plugins/ViewInfo.js +1 -1
  159. package/src/sap/ui/core/themes/base/fonts/SAP-icons.ttf +0 -0
  160. package/src/sap/ui/core/themes/base/fonts/SAP-icons.woff2 +0 -0
  161. package/src/sap/ui/core/theming/ThemeManager.js +11 -2
  162. package/src/sap/ui/core/tmpl/DOMAttribute.js +1 -1
  163. package/src/sap/ui/core/tmpl/DOMElement.js +1 -1
  164. package/src/sap/ui/core/tmpl/HandlebarsTemplate.js +1 -1
  165. package/src/sap/ui/core/tmpl/Template.js +1 -1
  166. package/src/sap/ui/core/tmpl/TemplateControl.js +1 -1
  167. package/src/sap/ui/core/util/AsyncHintsHelper.js +1 -1
  168. package/src/sap/ui/core/util/Export.js +1 -1
  169. package/src/sap/ui/core/util/ExportCell.js +1 -1
  170. package/src/sap/ui/core/util/ExportColumn.js +1 -1
  171. package/src/sap/ui/core/util/ExportRow.js +1 -1
  172. package/src/sap/ui/core/util/ExportType.js +1 -1
  173. package/src/sap/ui/core/util/ExportTypeCSV.js +1 -1
  174. package/src/sap/ui/core/util/File.js +1 -1
  175. package/src/sap/ui/core/util/LibraryInfo.js +1 -1
  176. package/src/sap/ui/core/util/MockServer.js +1 -1
  177. package/src/sap/ui/core/util/PasteHelper.js +1 -1
  178. package/src/sap/ui/core/util/serializer/HTMLViewSerializer.js +1 -1
  179. package/src/sap/ui/core/util/serializer/Serializer.js +1 -1
  180. package/src/sap/ui/core/util/serializer/ViewSerializer.js +3 -3
  181. package/src/sap/ui/core/util/serializer/XMLViewSerializer.js +1 -1
  182. package/src/sap/ui/core/util/serializer/delegate/Delegate.js +1 -1
  183. package/src/sap/ui/core/util/serializer/delegate/HTML.js +1 -1
  184. package/src/sap/ui/core/util/serializer/delegate/XML.js +1 -1
  185. package/src/sap/ui/core/ws/ReadyState.js +1 -1
  186. package/src/sap/ui/core/ws/SapPcpWebSocket.js +1 -1
  187. package/src/sap/ui/core/ws/WebSocket.js +2 -2
  188. package/src/sap/ui/debug/ControlTree.js +1 -1
  189. package/src/sap/ui/debug/DebugEnv.js +1 -1
  190. package/src/sap/ui/debug/PropertyList.js +1 -1
  191. package/src/sap/ui/model/ClientModel.js +1 -1
  192. package/src/sap/ui/model/CompositeDataState.js +1 -1
  193. package/src/sap/ui/model/CompositeType.js +1 -1
  194. package/src/sap/ui/model/DataState.js +1 -1
  195. package/src/sap/ui/model/MetaModel.js +1 -1
  196. package/src/sap/ui/model/Model.js +1 -1
  197. package/src/sap/ui/model/SelectionModel.js +1 -1
  198. package/src/sap/ui/model/SimpleType.js +1 -1
  199. package/src/sap/ui/model/TreeAutoExpandMode.js +1 -1
  200. package/src/sap/ui/model/Type.js +1 -1
  201. package/src/sap/ui/model/json/JSONModel.js +1 -1
  202. package/src/sap/ui/model/message/MessageModel.js +1 -1
  203. package/src/sap/ui/model/odata/ODataAnnotations.js +1 -1
  204. package/src/sap/ui/model/odata/ODataMessageParser.js +1 -1
  205. package/src/sap/ui/model/odata/ODataMetaModel.js +4 -3
  206. package/src/sap/ui/model/odata/ODataMetadata.js +1 -1
  207. package/src/sap/ui/model/odata/ODataModel.js +1 -1
  208. package/src/sap/ui/model/odata/ODataUtils.js +5 -2
  209. package/src/sap/ui/model/odata/_ODataMetaModelUtils.js +62 -24
  210. package/src/sap/ui/model/odata/type/Boolean.js +1 -1
  211. package/src/sap/ui/model/odata/type/Byte.js +1 -1
  212. package/src/sap/ui/model/odata/type/Currency.js +1 -1
  213. package/src/sap/ui/model/odata/type/Date.js +1 -1
  214. package/src/sap/ui/model/odata/type/DateTime.js +1 -1
  215. package/src/sap/ui/model/odata/type/DateTimeBase.js +3 -2
  216. package/src/sap/ui/model/odata/type/DateTimeOffset.js +1 -1
  217. package/src/sap/ui/model/odata/type/DateTimeWithTimezone.js +2 -1
  218. package/src/sap/ui/model/odata/type/Decimal.js +1 -1
  219. package/src/sap/ui/model/odata/type/Double.js +1 -1
  220. package/src/sap/ui/model/odata/type/Guid.js +1 -1
  221. package/src/sap/ui/model/odata/type/Int.js +1 -1
  222. package/src/sap/ui/model/odata/type/Int16.js +1 -1
  223. package/src/sap/ui/model/odata/type/Int32.js +1 -1
  224. package/src/sap/ui/model/odata/type/Int64.js +1 -1
  225. package/src/sap/ui/model/odata/type/ODataType.js +1 -1
  226. package/src/sap/ui/model/odata/type/Raw.js +1 -1
  227. package/src/sap/ui/model/odata/type/SByte.js +1 -1
  228. package/src/sap/ui/model/odata/type/Single.js +1 -1
  229. package/src/sap/ui/model/odata/type/Stream.js +1 -1
  230. package/src/sap/ui/model/odata/type/String.js +1 -1
  231. package/src/sap/ui/model/odata/type/Time.js +2 -1
  232. package/src/sap/ui/model/odata/type/TimeOfDay.js +1 -1
  233. package/src/sap/ui/model/odata/type/Unit.js +1 -1
  234. package/src/sap/ui/model/odata/v2/Context.js +1 -1
  235. package/src/sap/ui/model/odata/v2/ODataAnnotations.js +2 -1
  236. package/src/sap/ui/model/odata/v2/ODataListBinding.js +4 -1
  237. package/src/sap/ui/model/odata/v2/ODataModel.js +131 -66
  238. package/src/sap/ui/model/odata/v2/ODataTreeBinding.js +1 -1
  239. package/src/sap/ui/model/odata/v4/Context.js +50 -14
  240. package/src/sap/ui/model/odata/v4/ODataBinding.js +83 -14
  241. package/src/sap/ui/model/odata/v4/ODataContextBinding.js +2 -4
  242. package/src/sap/ui/model/odata/v4/ODataListBinding.js +89 -12
  243. package/src/sap/ui/model/odata/v4/ODataMetaModel.js +3 -2
  244. package/src/sap/ui/model/odata/v4/ODataModel.js +5 -4
  245. package/src/sap/ui/model/odata/v4/ODataParentBinding.js +14 -3
  246. package/src/sap/ui/model/odata/v4/ODataPropertyBinding.js +9 -1
  247. package/src/sap/ui/model/odata/v4/lib/_AggregationCache.js +63 -62
  248. package/src/sap/ui/model/odata/v4/lib/_AggregationHelper.js +32 -7
  249. package/src/sap/ui/model/odata/v4/lib/_Cache.js +210 -10
  250. package/src/sap/ui/model/odata/v4/lib/_Helper.js +71 -29
  251. package/src/sap/ui/model/resource/ResourceModel.js +1 -1
  252. package/src/sap/ui/model/type/Boolean.js +1 -1
  253. package/src/sap/ui/model/type/Currency.js +1 -1
  254. package/src/sap/ui/model/type/Date.js +4 -3
  255. package/src/sap/ui/model/type/DateInterval.js +9 -8
  256. package/src/sap/ui/model/type/DateTime.js +1 -1
  257. package/src/sap/ui/model/type/DateTimeInterval.js +1 -1
  258. package/src/sap/ui/model/type/FileSize.js +1 -1
  259. package/src/sap/ui/model/type/Float.js +1 -1
  260. package/src/sap/ui/model/type/Integer.js +1 -1
  261. package/src/sap/ui/model/type/String.js +1 -1
  262. package/src/sap/ui/model/type/Time.js +1 -1
  263. package/src/sap/ui/model/type/TimeInterval.js +1 -1
  264. package/src/sap/ui/model/type/Unit.js +1 -1
  265. package/src/sap/ui/model/xml/XMLModel.js +1 -1
  266. package/src/sap/ui/qunit/QUnitUtils.js +6 -4
  267. package/src/sap/ui/qunit/utils/ControlIterator.js +1 -1
  268. package/src/sap/ui/qunit/utils/MemoryLeakCheck.js +1 -1
  269. package/src/sap/ui/test/Opa5.js +4 -4
  270. package/src/sap/ui/test/generic/TestBase.js +14 -4
  271. package/src/sap/ui/thirdparty/jquery-mobile-custom.js +10 -4
  272. package/src/sap/ui/thirdparty/qunit-2.js +4 -1
  273. package/src/sap/ui/thirdparty/qunit.js +41 -11
  274. package/src/sap/ui/util/Storage.js +1 -1
@@ -11,8 +11,9 @@ sap.ui.define([
11
11
  "sap/base/util/isEmptyObject",
12
12
  "sap/base/util/merge",
13
13
  "sap/base/util/uid",
14
+ "sap/ui/base/SyncPromise",
14
15
  "sap/ui/thirdparty/URI"
15
- ], function (Log, deepEqual, isEmptyObject, merge, uid, URI) {
16
+ ], function (Log, deepEqual, isEmptyObject, merge, uid, SyncPromise, URI) {
16
17
  "use strict";
17
18
 
18
19
  var rAmpersand = /&/g,
@@ -90,6 +91,19 @@ sap.ui.define([
90
91
  }
91
92
  },
92
93
 
94
+ /**
95
+ * Adds a SyncPromise to private annotations of the element and returns it.
96
+ *
97
+ * @param {object} oElement - The cache element
98
+ * @returns {sap.ui.base.SyncPromise} The promise
99
+ */
100
+ addDeepCreatePromise : function (oElement) {
101
+ return new SyncPromise(function (fnResolve, fnReject) {
102
+ _Helper.setPrivateAnnotation(oElement, "resolve", fnResolve);
103
+ _Helper.setPrivateAnnotation(oElement, "reject", fnReject);
104
+ });
105
+ },
106
+
93
107
  /**
94
108
  * Adds the given paths to $select of the given query options.
95
109
  *
@@ -727,6 +741,23 @@ sap.ui.define([
727
741
  }
728
742
  },
729
743
 
744
+ /**
745
+ * Deletes the property identified by the given path from the given object.
746
+ *
747
+ * @param {object} oObject - The object to start at
748
+ * @param {string} sPath - Some relative path
749
+ */
750
+ deleteProperty : function (oObject, sPath) {
751
+ var aSegments;
752
+
753
+ if (sPath.includes("/")) {
754
+ aSegments = sPath.split("/");
755
+ sPath = aSegments.pop();
756
+ oObject = _Helper.drillDown(oObject, aSegments);
757
+ }
758
+ delete oObject[sPath];
759
+ },
760
+
730
761
  /**
731
762
  * Deletes within the given entity and property path the property annotation
732
763
  * "@$ui5.updating".
@@ -759,14 +790,17 @@ sap.ui.define([
759
790
  *
760
791
  * @param {object} oObject
761
792
  * The object to start at
762
- * @param {string[]} aSegments
763
- * Relative path to drill-down into, as array of segments
793
+ * @param {string|string[]} vSegments
794
+ * Relative path to drill-down into, may already be split as array of segments
764
795
  * @returns {any}
765
796
  * The result matching to the given path, or <code>undefined</code> if the path leads
766
797
  * into void
767
798
  */
768
- drillDown : function (oObject, aSegments) {
769
- return aSegments.reduce(function (oCurrent, sSegment) {
799
+ drillDown : function (oObject, vSegments) {
800
+ if (typeof vSegments === "string") {
801
+ vSegments = vSegments.split("/");
802
+ }
803
+ return vSegments.reduce(function (oCurrent, sSegment) {
770
804
  return (oCurrent && sSegment in oCurrent) ? oCurrent[sSegment] : undefined;
771
805
  }, oObject);
772
806
  },
@@ -1499,6 +1533,20 @@ sap.ui.define([
1499
1533
  return sPath;
1500
1534
  },
1501
1535
 
1536
+ /**
1537
+ * Tells whether <code>sPath</code> has <code>sBasePath</code> as path prefix. It returns
1538
+ * <code>true</code> iff {@link .getRelativePath} does not return <code>undefined</code>.
1539
+ *
1540
+ * @param {string} sPath The path
1541
+ * @param {string} sBasePath The base path
1542
+ * @returns {boolean} true if sBasePath path is a prefix of sPath
1543
+ *
1544
+ * @see .getRelativePath
1545
+ */
1546
+ hasPathPrefix : function (sPath, sBasePath) {
1547
+ return _Helper.getRelativePath(sPath, sBasePath) !== undefined;
1548
+ },
1549
+
1502
1550
  /**
1503
1551
  * Tells whether the given object has a private client-side instance annotation with the
1504
1552
  * given unqualified name (no matter what the value is).
@@ -1520,14 +1568,17 @@ sap.ui.define([
1520
1568
  /**
1521
1569
  * Fires change events for all properties that differ between the old and the new value.
1522
1570
  * The function recursively handles modified, added or removed structural properties
1523
- * and fires change events for all modified/added/removed primitive properties therein.
1571
+ * and fires change events for all modified/added/removed primitive properties therein. If
1572
+ * the new value is <code>undefined</code>, the event is fired with <code>null</code> as a
1573
+ * value unless <code>bAllowUndefined</code> is set.
1524
1574
  *
1525
1575
  * @param {object} mChangeListeners A map of change listeners by path
1526
1576
  * @param {string} sPath The path of both values in mChangeListeners
1527
1577
  * @param {any} vOld The old value
1528
1578
  * @param {any} vNew The new value
1579
+ * @param {boolean} [bAllowUndefined] Allows undefined values
1529
1580
  */
1530
- informAll : function (mChangeListeners, sPath, vOld, vNew) {
1581
+ informAll : function (mChangeListeners, sPath, vOld, vNew, bAllowUndefined) {
1531
1582
  if (vNew === vOld) {
1532
1583
  return;
1533
1584
  }
@@ -1535,12 +1586,13 @@ sap.ui.define([
1535
1586
  if (vNew && typeof vNew === "object") {
1536
1587
  Object.keys(vNew).forEach(function (sProperty) {
1537
1588
  _Helper.informAll(mChangeListeners, _Helper.buildPath(sPath, sProperty),
1538
- vOld && vOld[sProperty], vNew[sProperty]);
1589
+ vOld && vOld[sProperty], vNew[sProperty], bAllowUndefined);
1539
1590
  });
1540
1591
  } else {
1541
1592
  // must fire null to guarantee that a property binding has not
1542
1593
  // this.vValue === undefined, see ODataPropertyBinding.setValue
1543
- _Helper.fireChange(mChangeListeners, sPath, vNew === undefined ? null : vNew);
1594
+ _Helper.fireChange(mChangeListeners, sPath,
1595
+ !bAllowUndefined && vNew === undefined ? null : vNew);
1544
1596
  vNew = {};
1545
1597
  }
1546
1598
 
@@ -1549,7 +1601,7 @@ sap.ui.define([
1549
1601
  // not covered in the new value
1550
1602
  if (!vNew.hasOwnProperty(sProperty)) {
1551
1603
  _Helper.informAll(mChangeListeners, _Helper.buildPath(sPath, sProperty),
1552
- vOld[sProperty], undefined);
1604
+ vOld[sProperty], undefined, bAllowUndefined);
1553
1605
  }
1554
1606
  });
1555
1607
  }
@@ -1737,20 +1789,6 @@ sap.ui.define([
1737
1789
  return mResult;
1738
1790
  },
1739
1791
 
1740
- /**
1741
- * Tells whether <code>sPath</code> has <code>sBasePath</code> as path prefix. It returns
1742
- * <code>true</code> iff {@link .getRelativePath} does not return <code>undefined</code>.
1743
- *
1744
- * @param {string} sPath The path
1745
- * @param {string} sBasePath The base path
1746
- * @returns {boolean} true if sBasePath path is a prefix of sPath
1747
- *
1748
- * @see .getRelativePath
1749
- */
1750
- hasPathPrefix : function (sPath, sBasePath) {
1751
- return _Helper.getRelativePath(sPath, sBasePath) !== undefined;
1752
- },
1753
-
1754
1792
  /**
1755
1793
  * Tells whether the given map of binding parameters is defining data aggregation, but not a
1756
1794
  * recursive hierarchy.
@@ -2016,18 +2054,19 @@ sap.ui.define([
2016
2054
  */
2017
2055
  resetInactiveEntity : function (mChangeListeners, sPath, oEntity) {
2018
2056
  var oInitialData = _Helper.getPrivateAnnotation(oEntity, "initialData"),
2019
- oPostBody = _Helper.getPrivateAnnotation(oEntity, "postBody");
2057
+ oPostBody = _Helper.getPrivateAnnotation(oEntity, "postBody"),
2058
+ oOldPostBody = Object.assign({}, oPostBody);
2020
2059
 
2021
2060
  Object.keys(oPostBody).forEach(function (sKey) {
2022
2061
  if (sKey in oInitialData) {
2023
- oEntity[sKey] = oPostBody[sKey] = oInitialData[sKey];
2062
+ oEntity[sKey] = oPostBody[sKey] = _Helper.clone(oInitialData[sKey]);
2024
2063
  } else {
2025
2064
  delete oPostBody[sKey];
2026
2065
  delete oEntity[sKey];
2027
2066
  }
2028
- _Helper.fireChange(mChangeListeners, sPath + "/" + sKey, oEntity[sKey]);
2029
2067
  });
2030
2068
 
2069
+ _Helper.informAll(mChangeListeners, sPath, oOldPostBody, oPostBody, true);
2031
2070
  _Helper.updateAll(mChangeListeners, sPath, oEntity,
2032
2071
  {"@$ui5.context.isInactive" : true}
2033
2072
  );
@@ -2485,8 +2524,11 @@ sap.ui.define([
2485
2524
  }
2486
2525
  } else if (Array.isArray(vSourceProperty)) {
2487
2526
  // copy complete collection; no change events as long as collection-valued
2488
- // properties are not supported
2489
- oTarget[sProperty] = vSourceProperty;
2527
+ // properties are not supported; transient entity collections from a deep
2528
+ // insert are handled elsewhere
2529
+ if (!(vTargetProperty && vTargetProperty.$transient)) {
2530
+ oTarget[sProperty] = vSourceProperty;
2531
+ }
2490
2532
  } else if (vSourceProperty && typeof vSourceProperty === "object"
2491
2533
  && !sProperty.includes("@")) {
2492
2534
  oTarget[sProperty] = update(sPropertyPath, vSelected, vTargetProperty || {},
@@ -229,7 +229,7 @@ sap.ui.define([
229
229
  *
230
230
  * @extends sap.ui.model.Model
231
231
  * @public
232
- * @version 1.111.1
232
+ * @version 1.112.0
233
233
  */
234
234
  var ResourceModel = Model.extend("sap.ui.model.resource.ResourceModel", /** @lends sap.ui.model.resource.ResourceModel.prototype */ {
235
235
 
@@ -19,7 +19,7 @@ sap.ui.define(['sap/ui/model/SimpleType', 'sap/ui/model/FormatException', 'sap/u
19
19
  * @extends sap.ui.model.SimpleType
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.111.1
22
+ * @version 1.112.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions]
@@ -32,7 +32,7 @@ sap.ui.define([
32
32
  * @extends sap.ui.model.CompositeType
33
33
  *
34
34
  * @author SAP SE
35
- * @version 1.111.1
35
+ * @version 1.112.0
36
36
  *
37
37
  * @public
38
38
  * @param {object} [oFormatOptions]
@@ -8,12 +8,13 @@
8
8
  sap.ui.define([
9
9
  "sap/base/util/each",
10
10
  "sap/base/util/isEmptyObject",
11
+ "sap/ui/core/date/UI5Date",
11
12
  "sap/ui/core/format/DateFormat",
12
13
  "sap/ui/model/FormatException",
13
14
  "sap/ui/model/ParseException",
14
15
  "sap/ui/model/SimpleType",
15
16
  "sap/ui/model/ValidateException"
16
- ], function(each, isEmptyObject, DateFormat, FormatException, ParseException, SimpleType,
17
+ ], function(each, isEmptyObject, UI5Date, DateFormat, FormatException, ParseException, SimpleType,
17
18
  ValidateException) {
18
19
  "use strict";
19
20
 
@@ -26,7 +27,7 @@ sap.ui.define([
26
27
  * @extends sap.ui.model.SimpleType
27
28
  *
28
29
  * @author SAP SE
29
- * @version 1.111.1
30
+ * @version 1.112.0
30
31
  *
31
32
  * @public
32
33
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateInstance DateFormat}.
@@ -155,7 +156,7 @@ sap.ui.define([
155
156
  oValue = parseInt(oValue);
156
157
  }
157
158
  }
158
- oValue = new Date(oValue);
159
+ oValue = UI5Date.getInstance(oValue);
159
160
  return oValue;
160
161
  }
161
162
  };
@@ -5,12 +5,13 @@
5
5
  */
6
6
  sap.ui.define([
7
7
  "sap/base/util/isEmptyObject",
8
- 'sap/ui/core/format/DateFormat',
9
- 'sap/ui/model/CompositeType',
10
- 'sap/ui/model/FormatException',
11
- 'sap/ui/model/ParseException',
12
- 'sap/ui/model/ValidateException'
13
- ], function (isEmptyObject, DateFormat, CompositeType, FormatException, ParseException,
8
+ "sap/ui/core/date/UI5Date",
9
+ "sap/ui/core/format/DateFormat",
10
+ "sap/ui/model/CompositeType",
11
+ "sap/ui/model/FormatException",
12
+ "sap/ui/model/ParseException",
13
+ "sap/ui/model/ValidateException"
14
+ ], function (isEmptyObject, UI5Date, DateFormat, CompositeType, FormatException, ParseException,
14
15
  ValidateException) {
15
16
  "use strict";
16
17
 
@@ -23,7 +24,7 @@ sap.ui.define([
23
24
  * @extends sap.ui.model.CompositeType
24
25
  *
25
26
  * @author SAP SE
26
- * @version 1.111.1
27
+ * @version 1.112.0
27
28
  *
28
29
  * @alias sap.ui.model.type.DateInterval
29
30
  * @param {object} [oFormatOptions]
@@ -125,7 +126,7 @@ sap.ui.define([
125
126
  oValue = parseInt(oValue);
126
127
  }
127
128
  }
128
- oValue = new Date(oValue);
129
+ oValue = UI5Date.getInstance(oValue);
129
130
  } else {
130
131
  oValue = that.oInputFormat.parse(oValue);
131
132
  if (oValue == null) {
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.111.1
22
+ * @version 1.112.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.111.1
22
+ * @version 1.112.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getDateTimeInstance DateFormat}.
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.SimpleType
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.111.1
27
+ * @version 1.112.0
28
28
  *
29
29
  * @public
30
30
  * @param {object} [oFormatOptions]
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.111.1
29
+ * @version 1.112.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions]
@@ -26,7 +26,7 @@ sap.ui.define([
26
26
  * @extends sap.ui.model.SimpleType
27
27
  *
28
28
  * @author SAP SE
29
- * @version 1.111.1
29
+ * @version 1.112.0
30
30
  *
31
31
  * @public
32
32
  * @param {object} [oFormatOptions]
@@ -24,7 +24,7 @@ sap.ui.define([
24
24
  * @extends sap.ui.model.SimpleType
25
25
  *
26
26
  * @author SAP SE
27
- * @version 1.111.1
27
+ * @version 1.112.0
28
28
  *
29
29
  * @alias sap.ui.model.type.String
30
30
  * @param {object} [oFormatOptions]
@@ -19,7 +19,7 @@ sap.ui.define(['./Date', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.Date
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.111.1
22
+ * @version 1.112.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getTimeInstance DateFormat}.
@@ -19,7 +19,7 @@ sap.ui.define(['./DateInterval', 'sap/ui/core/format/DateFormat'],
19
19
  * @extends sap.ui.model.type.DateInterval
20
20
  *
21
21
  * @author SAP SE
22
- * @version 1.111.1
22
+ * @version 1.112.0
23
23
  *
24
24
  * @public
25
25
  * @param {object} [oFormatOptions] Formatting options. For a list of all available options, see {@link sap.ui.core.format.DateFormat.getTimeInstance DateFormat}.
@@ -48,7 +48,7 @@ sap.ui.define([
48
48
  *
49
49
  *
50
50
  * @author SAP SE
51
- * @version 1.111.1
51
+ * @version 1.112.0
52
52
  *
53
53
  * @public
54
54
  * @param {object} [oFormatOptions]
@@ -47,7 +47,7 @@ sap.ui.define([
47
47
  * @extends sap.ui.model.ClientModel
48
48
  *
49
49
  * @author SAP SE
50
- * @version 1.111.1
50
+ * @version 1.112.0
51
51
  *
52
52
  * @param {XMLDocument|string} oData
53
53
  * Either the URL where to load the XML from or an XML document
@@ -700,8 +700,9 @@ sap.ui.define('sap/ui/qunit/QUnitUtils', [
700
700
 
701
701
  }
702
702
 
703
- var oClass = new oClass().getMetadata().getClass(); // resolves proxy
704
- var oPredefinedValues = oPredefinedValues || {};
703
+ oClass = new oClass().getMetadata().getClass(); // resolves proxy
704
+ oPredefinedValues = oPredefinedValues || {};
705
+
705
706
  var result = {};
706
707
  var oProps = oClass.getMetadata().getAllProperties();
707
708
  for (var name in oProps) {
@@ -728,8 +729,9 @@ sap.ui.define('sap/ui/qunit/QUnitUtils', [
728
729
  return;
729
730
  }
730
731
 
731
- var oClass = new oClass().getMetadata().getClass(); // resolves proxy
732
- var oTestConfig = oTestConfig || {};
732
+ oClass = new oClass().getMetadata().getClass(); // resolves proxy
733
+ oTestConfig = oTestConfig || {};
734
+
733
735
  var oTestValues = QUtils.createSettingsDomain(oClass, oTestConfig.allPairTestValues || {});
734
736
 
735
737
  info("domain");
@@ -53,7 +53,7 @@ sap.ui.define(['sap/ui/core/Core', "sap/ui/VersionInfo"],
53
53
  * @namespace
54
54
  *
55
55
  * @author SAP SE
56
- * @version 1.111.1
56
+ * @version 1.112.0
57
57
  *
58
58
  * @public
59
59
  * @since 1.48.0
@@ -27,7 +27,7 @@ sap.ui.define([ 'sap/ui/core/Element', 'sap/ui/core/Control', 'sap/ui/core/Core'
27
27
  * @namespace
28
28
  *
29
29
  * @author SAP SE
30
- * @version 1.111.1
30
+ * @version 1.112.0
31
31
  *
32
32
  * @public
33
33
  * @since 1.48.0
@@ -456,7 +456,7 @@ sap.ui.define([
456
456
  *
457
457
  * @param {string} [options.fragmentId] @since 1.63 The ID of a fragment. If set, controls will match only if their IDs contain the fragment ID prefix.
458
458
  *
459
- * @param {function|array|object|sap.ui.test.matchers.Matcher} [options.matchers] Matchers used to filter controls.
459
+ * @param {function(sap.ui.core.Element)|Object<string,object>|sap.ui.test.matchers.Matcher|Array<function(sap.ui.core.Element)>|Array<Object<string,object>>|sap.ui.test.matchers.Matcher[]} [options.matchers] Matchers used to filter controls.
460
460
  * Could be a function, a single matcher instance, an array of matcher instances, or, since version 1.72, a plain
461
461
  * object to specify matchers declaratively. For a full list of built-in matchers, see {@link sap.ui.test.matchers}.
462
462
  *
@@ -549,10 +549,10 @@ sap.ui.define([
549
549
  * @param {int} [options.timeout=15] (seconds) Specifies how long the waitFor function polls before it fails.O means it will wait forever.
550
550
  * @param {int} [options.debugTimeout=0] @since 1.47 (seconds) Specifies how long the waitFor function polls before it fails in debug mode.O means it will wait forever.
551
551
  * @param {int} [options.pollingInterval=400] (milliseconds) Specifies how often the waitFor function polls.
552
- * @param {function} [options.check] Will get invoked in every polling interval. If it returns true, the check is successful and the polling will stop.
552
+ * @param {function((sap.ui.core.Element|sap.ui.core.Element[])): boolean} [options.check] Will get invoked in every polling interval. If it returns true, the check is successful and the polling will stop.
553
553
  * The first parameter passed into the function is the same value that gets passed to the success function.
554
554
  * Returning something other than boolean in check will not change the first parameter of success.
555
- * @param {function} [options.success] Will get invoked after the following conditions are met:
555
+ * @param {function((sap.ui.core.Element|sap.ui.core.Element[]))} [options.success] Will get invoked after the following conditions are met:
556
556
  * <ol>
557
557
  * <li>
558
558
  * One or multiple controls were found using controlType, Id, viewName. If visible is true (it is by default), the controls also need to be rendered.
@@ -749,7 +749,7 @@ sap.ui.define([
749
749
  if (iFrameLauncher.hasLaunched() && Array.isArray(vResult)) {
750
750
  // People are using instanceof Array in their check so i need to make sure the Array
751
751
  // comes from the current document. I cannot use slice(0) or map because the original array is kept
752
- // so i need to use the slowest way to create a swallow copy of the array
752
+ // so i need to use the slowest way to create a shallow copy of the array
753
753
  var aResult = [];
754
754
  vResult.forEach(function (oControl) {
755
755
  aResult.push(oControl);
@@ -14,6 +14,8 @@ sap.ui.define([
14
14
  ], function(BaseObject, Utils, includeStylesheet, Element, require) {
15
15
  "use strict";
16
16
 
17
+ var globalSetOfUndestroyableIDs = new Set();
18
+
17
19
  /**
18
20
  * Handles test setup and execution.
19
21
  * Single controls/elements are to be tested via the specific sub-classes by
@@ -24,7 +26,7 @@ sap.ui.define([
24
26
  * @extends sap.ui.base.Object
25
27
  * @abstract
26
28
  * @author SAP SE
27
- * @version 1.111.1
29
+ * @version 1.112.0
28
30
  * @since 1.100
29
31
  */
30
32
  return BaseObject.extend("sap.ui.test.generic.TestBase", {
@@ -129,9 +131,17 @@ sap.ui.define([
129
131
  includeElements: mParams && mParams.includeElements
130
132
  }).then(function(aClassInfo) {
131
133
  QUnit.module(this.getMetadata().getName() + " Tests - " + this._sLibName, {
132
- afterEach: function() {
134
+ afterEach: function(assert) {
133
135
  Element.registry.forEach(function(oElement, sId) {
134
- oElement.destroy();
136
+ try {
137
+ oElement.destroy();
138
+ } catch (error) {
139
+ // destroy failed for some reason
140
+ if (!globalSetOfUndestroyableIDs.has(sId)) {
141
+ globalSetOfUndestroyableIDs.add(sId);
142
+ assert.notOk(sId, "Destruction of element with id '" + sId + "' failed.");
143
+ }
144
+ }
135
145
  });
136
146
  }
137
147
  });
@@ -148,4 +158,4 @@ sap.ui.define([
148
158
  }.bind(this));
149
159
  }
150
160
  });
151
- });
161
+ });
@@ -1853,12 +1853,18 @@ if ( eventCaptureSupported ) {
1853
1853
  // and mouseup event which have delay reach on the underneath input.
1854
1854
  // Thus the mousedown and mouseup events should also be suppressed.
1855
1855
  //
1856
- // The mousedown, mouseup and click events are suppressed only when their
1857
- // coordinate is proximitely the same as the coordinate of recorded touch
1858
- // events and the mouse event's target is different than the target of the
1859
- // touch event.
1856
+ // Moreover, mobile browsers, such as mobile Safari fires mouseover
1857
+ // event with delay as well. This event may also be dispatched wrongly
1858
+ // to the underneath element when the top element is removed in one of
1859
+ // the touch* event handler.
1860
+ //
1861
+ // The mousedown, mouseup, mouseover and click events are suppressed
1862
+ // only when their coordinate is proximately the same as the coordinate
1863
+ // of recorded touch events and the mouse event's target is different
1864
+ // than the target of the touch event.
1860
1865
  document.addEventListener( "mousedown", suppressEvent, true );
1861
1866
  document.addEventListener( "mouseup", suppressEvent, true );
1867
+ document.addEventListener( "mouseover", suppressEvent, true );
1862
1868
  document.addEventListener( "click", suppressEvent, true );
1863
1869
  }
1864
1870
  })( jQuery, window, document );
@@ -3810,7 +3810,10 @@
3810
3810
  // Show the source of the test when showing assertions
3811
3811
  if (details.source) {
3812
3812
  sourceName = document$$1.createElement("p");
3813
- sourceName.innerHTML = "<strong>Source: </strong>" + details.source;
3813
+ //### BEGIN MODIFIED BY SAP
3814
+ // sourceName.innerHTML = "<strong>Source: </strong>" + details.source;
3815
+ sourceName.innerHTML = "<strong>Source: </strong>" + escapeText( details.source );
3816
+ //### END MODIFIED BY SAP
3814
3817
  addClass(sourceName, "qunit-source");
3815
3818
  if (testPassed) {
3816
3819
  addClass(sourceName, "qunit-collapsed");
@@ -182,26 +182,50 @@ config.modules.push( config.currentModule );
182
182
 
183
183
  // Initialize more QUnit.config and QUnit.urlParams
184
184
  (function() {
185
- var i, current,
185
+ //### BEGIN MODIFIED BY SAP
186
+ // var i, current,
187
+ // location = window.location || { search: "", protocol: "file:" },
188
+ // params = location.search.slice( 1 ).split( "&" ),
189
+ // length = params.length,
190
+ // urlParams = {};
191
+ //
192
+ // if ( params[ 0 ] ) {
193
+ // for ( i = 0; i < length; i++ ) {
194
+ // current = params[ i ].split( "=" );
195
+ // current[ 0 ] = decodeURIComponent( current[ 0 ] );
196
+ //
197
+ // // allow just a key to turn on a flag, e.g., test.html?noglobals
198
+ // current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
199
+ // if ( urlParams[ current[ 0 ] ] ) {
200
+ // urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] );
201
+ // } else {
202
+ // urlParams[ current[ 0 ] ] = current[ 1 ];
203
+ // }
204
+ // }
205
+ // }
206
+
207
+ var i, param, name, value,
186
208
  location = window.location || { search: "", protocol: "file:" },
187
209
  params = location.search.slice( 1 ).split( "&" ),
188
210
  length = params.length,
189
211
  urlParams = {};
190
212
 
191
- if ( params[ 0 ] ) {
192
- for ( i = 0; i < length; i++ ) {
193
- current = params[ i ].split( "=" );
194
- current[ 0 ] = decodeURIComponent( current[ 0 ] );
213
+ for ( i = 0; i < length; i++ ) {
214
+ if ( params[ i ] ) {
215
+ param = params[ i ].split( "=" );
216
+ name = decodeURIComponent( param[ 0 ] );
195
217
 
196
218
  // allow just a key to turn on a flag, e.g., test.html?noglobals
197
- current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
198
- if ( urlParams[ current[ 0 ] ] ) {
199
- urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] );
219
+ value = param.length === 1 ||
220
+ decodeURIComponent( param.slice( 1 ).join( "=" ) );
221
+ if ( urlParams[ name ] ) {
222
+ urlParams[ name ] = [].concat( urlParams[ name ], value );
200
223
  } else {
201
- urlParams[ current[ 0 ] ] = current[ 1 ];
224
+ urlParams[ name ] = value;
202
225
  }
203
226
  }
204
227
  }
228
+ //END MODIFIED BY SAP
205
229
 
206
230
  if ( urlParams.filter === true ) {
207
231
  delete urlParams.filter;
@@ -3510,7 +3534,10 @@ function appendHeader() {
3510
3534
 
3511
3535
  if ( header ) {
3512
3536
  header.innerHTML = "<a href='" +
3513
- setUrl({ filter: undefined, module: undefined, testId: undefined }) +
3537
+ //### BEGIN MODIFIED BY SAP
3538
+ // setUrl({ filter: undefined, module: undefined, testId: undefined }) +
3539
+ escapeText( setUrl( { filter: undefined, module: undefined, testId: undefined } ) ) +
3540
+ //### END MODIFIED BY SAP
3514
3541
  "'>" + header.innerHTML + "</a> ";
3515
3542
  }
3516
3543
  }
@@ -3758,7 +3785,10 @@ QUnit.log(function( details ) {
3758
3785
  message += "<tr class='test-message'><th>Message: </th><td>" +
3759
3786
  "Diff suppressed as the depth of object is more than current max depth (" +
3760
3787
  QUnit.config.maxDepth + ").<p>Hint: Use <code>QUnit.dump.maxDepth</code> to " +
3761
- " run with a higher max depth or <a href='" + setUrl({ maxDepth: -1 }) + "'>" +
3788
+ //### BEGIN MODIFIED BY SAP
3789
+ // " run with a higher max depth or <a href='" + setUrl({ maxDepth: -1 }) + "'>" +
3790
+ " run with a higher max depth or <a href='" + escapeText( setUrl( { maxDepth: -1 } ) ) + "'>" +
3791
+ //### END MODIFIED BY SAP
3762
3792
  "Rerun</a> without max depth.</p></td></tr>";
3763
3793
  }
3764
3794
  }
@@ -277,7 +277,7 @@ sap.ui.define(["sap/base/assert"], function (assert) {
277
277
  *
278
278
  * @enum {string}
279
279
  * @public
280
- * @version 1.111.1
280
+ * @version 1.112.0
281
281
  */
282
282
  Storage.Type = {
283
283
  /**