@sap/open.fe 1.96.0 → 1.97.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 (490) hide show
  1. package/package.json +1 -1
  2. package/packages/sap.fe.common/src/sap/fe/common/.library +1 -1
  3. package/packages/sap.fe.common/src/sap/fe/common/.theming +1 -1
  4. package/packages/sap.fe.common/src/sap/fe/common/MessageButton-dbg.js +57 -42
  5. package/packages/sap.fe.common/src/sap/fe/common/MessageButton.js +1 -1
  6. package/packages/sap.fe.common/src/sap/fe/common/library-dbg.js +1 -1
  7. package/packages/sap.fe.common/src/sap/fe/common/library-h2-preload.js +2 -2
  8. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js +4 -4
  9. package/packages/sap.fe.common/src/sap/fe/common/library-preload.js.map +3 -3
  10. package/packages/sap.fe.common/src/sap/fe/common/library.js +1 -1
  11. package/packages/sap.fe.common/src/sap/fe/common/manifest.json +3 -3
  12. package/packages/sap.fe.common/src/sap/fe/common/resources.json +4 -4
  13. package/packages/sap.fe.common/test/sap/fe/common/designtime/api.json +1 -1
  14. package/packages/sap.fe.common/test/sap/fe/common/designtime/apiref/api.json +1 -1
  15. package/packages/sap.fe.common/test/sap/fe/common/designtime/codeassistance/Library.xmlmeta.json +1 -1
  16. package/packages/sap.fe.core/src/sap/fe/core/.library +1 -1
  17. package/packages/sap.fe.core/src/sap/fe/core/.theming +1 -1
  18. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper-dbg.js +2 -2
  19. package/packages/sap.fe.core/src/sap/fe/core/AnnotationHelper.js +1 -1
  20. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils-dbg.js +59 -274
  21. package/packages/sap.fe.core/src/sap/fe/core/CommonUtils.js +1 -1
  22. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy-dbg.js +52 -64
  23. package/packages/sap.fe.core/src/sap/fe/core/RouterProxy.js +1 -1
  24. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent-dbg.js +2 -2
  25. package/packages/sap.fe.core/src/sap/fe/core/TemplateComponent.js +1 -1
  26. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper-dbg.js +18 -22
  27. package/packages/sap.fe.core/src/sap/fe/core/TransactionHelper.js +1 -1
  28. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling-dbg.js +80 -4
  29. package/packages/sap.fe.core/src/sap/fe/core/actions/messageHandling.js +1 -1
  30. package/packages/sap.fe.core/src/sap/fe/core/actions/operations-dbg.js +42 -23
  31. package/packages/sap.fe.core/src/sap/fe/core/actions/operations.js +1 -1
  32. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow-dbg.js +36 -21
  33. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/EditFlow.js +1 -1
  34. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation-dbg.js +9 -3
  35. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +1 -1
  36. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting-dbg.js +20 -50
  37. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/InternalRouting.js +1 -1
  38. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler-dbg.js +222 -102
  39. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
  40. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState-dbg.js +33 -6
  41. package/packages/sap.fe.core/src/sap/fe/core/controllerextensions/ViewState.js +1 -1
  42. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage-dbg.js +109 -111
  43. package/packages/sap.fe.core/src/sap/fe/core/controls/CustomQuickViewPage.js +1 -1
  44. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar.d-dbg.js +8 -0
  45. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar.d.js +5 -0
  46. package/packages/sap.fe.core/src/sap/fe/core/controls/filterbar.d.ts +0 -0
  47. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings-dbg.js +2 -1
  48. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  49. package/packages/sap.fe.core/src/sap/fe/core/converters/ManifestSettings.ts +4 -1
  50. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter-dbg.js +10 -1
  51. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  52. package/packages/sap.fe.core/src/sap/fe/core/converters/MetaModelConverter.ts +9 -1
  53. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField-dbg.js +2 -2
  54. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.js +1 -1
  55. package/packages/sap.fe.core/src/sap/fe/core/converters/annotations/DataField.ts +1 -1
  56. package/packages/sap.fe.core/src/sap/fe/core/converters/common/AnnotationConverter-dbg.js +67 -40
  57. package/packages/sap.fe.core/src/sap/fe/core/converters/common/AnnotationConverter.js +1 -1
  58. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Action-dbg.js +6 -3
  59. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Action.js +1 -1
  60. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Action.ts +6 -3
  61. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form-dbg.js +57 -18
  62. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.js +1 -1
  63. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Form.ts +51 -13
  64. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table-dbg.js +130 -19
  65. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.js +1 -1
  66. package/packages/sap.fe.core/src/sap/fe/core/converters/controls/Common/Table.ts +139 -18
  67. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ID-dbg.js +9 -1
  68. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ID.js +1 -1
  69. package/packages/sap.fe.core/src/sap/fe/core/converters/helpers/ID.ts +4 -0
  70. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter-dbg.js +18 -7
  71. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.js +1 -1
  72. package/packages/sap.fe.core/src/sap/fe/core/converters/templates/ListReportConverter.ts +17 -12
  73. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent-dbg.designtime.js +2 -1
  74. package/packages/sap.fe.core/src/sap/fe/core/designtime/AppComponent.designtime.js +1 -1
  75. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js +1 -1
  76. package/packages/sap.fe.core/src/sap/fe/core/designtime/library-preload.designtime.js.map +2 -2
  77. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter-dbg.js +27 -4
  78. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.js +1 -1
  79. package/packages/sap.fe.core/src/sap/fe/core/formatters/TableFormatter.ts +20 -3
  80. package/packages/sap.fe.core/src/sap/fe/core/fpm/manifest.json +2 -2
  81. package/packages/sap.fe.core/src/sap/fe/core/helpers/KeepAliveHelper-dbg.js +211 -0
  82. package/packages/sap.fe.core/src/sap/fe/core/helpers/KeepAliveHelper.js +5 -0
  83. package/packages/sap.fe.core/src/sap/fe/core/helpers/KeepAliveHelper.ts +202 -0
  84. package/packages/sap.fe.core/src/sap/fe/core/helpers/KeepAliveRefreshTypes-dbg.js +32 -0
  85. package/packages/sap.fe.core/src/sap/fe/core/helpers/KeepAliveRefreshTypes.js +5 -0
  86. package/packages/sap.fe.core/src/sap/fe/core/helpers/KeepAliveRefreshTypes.ts +36 -0
  87. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper-dbg.js +51 -0
  88. package/packages/sap.fe.core/src/sap/fe/core/helpers/ModelHelper.js +1 -1
  89. package/packages/sap.fe.core/src/sap/fe/core/library-dbg.js +1 -1
  90. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js +10 -9
  91. package/packages/sap.fe.core/src/sap/fe/core/library-h2-preload.js.map +1 -1
  92. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js +232 -228
  93. package/packages/sap.fe.core/src/sap/fe/core/library-preload.js.map +4 -4
  94. package/packages/sap.fe.core/src/sap/fe/core/library.js +1 -1
  95. package/packages/sap.fe.core/src/sap/fe/core/manifest.json +10 -10
  96. package/packages/sap.fe.core/src/sap/fe/core/messagebundle.properties +15 -1
  97. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ar.properties +10 -0
  98. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_bg.properties +10 -0
  99. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ca.properties +10 -0
  100. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cs.properties +10 -0
  101. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_cy.properties +10 -0
  102. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_da.properties +10 -0
  103. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_de.properties +10 -0
  104. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_el.properties +10 -0
  105. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en.properties +10 -0
  106. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_GB.properties +10 -0
  107. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_sappsd.properties +6 -0
  108. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saprigi.properties +11 -1
  109. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_en_US_saptrc.properties +11 -1
  110. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es.properties +10 -0
  111. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_es_MX.properties +10 -0
  112. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_et.properties +10 -0
  113. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fi.properties +10 -0
  114. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr.properties +10 -0
  115. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_fr_CA.properties +10 -0
  116. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hi.properties +10 -0
  117. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hr.properties +10 -0
  118. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_hu.properties +10 -0
  119. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_id.properties +11 -1
  120. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_it.properties +10 -0
  121. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_iw.properties +10 -0
  122. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ja.properties +19 -9
  123. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_kk.properties +10 -0
  124. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ko.properties +10 -0
  125. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lt.properties +10 -0
  126. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_lv.properties +10 -0
  127. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ms.properties +10 -0
  128. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_nl.properties +10 -0
  129. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_no.properties +10 -0
  130. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pl.properties +10 -0
  131. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt.properties +11 -1
  132. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_pt_PT.properties +10 -0
  133. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ro.properties +10 -0
  134. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_ru.properties +10 -0
  135. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sh.properties +10 -0
  136. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sk.properties +10 -0
  137. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sl.properties +10 -0
  138. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_sv.properties +10 -0
  139. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_th.properties +10 -0
  140. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_tr.properties +10 -0
  141. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_uk.properties +10 -0
  142. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_vi.properties +10 -0
  143. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_CN.properties +10 -0
  144. package/packages/sap.fe.core/src/sap/fe/core/messagebundle_zh_TW.properties +10 -0
  145. package/packages/sap.fe.core/src/sap/fe/core/resources.json +200 -121
  146. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory-dbg.js +30 -19
  147. package/packages/sap.fe.core/src/sap/fe/core/services/RoutingServiceFactory.js +1 -1
  148. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory-dbg.js +1 -1
  149. package/packages/sap.fe.core/src/sap/fe/core/services/TemplatedViewServiceFactory.js +1 -1
  150. package/packages/sap.fe.core/src/sap/fe/core/templating/EntitySetHelper-dbg.js +80 -7
  151. package/packages/sap.fe.core/src/sap/fe/core/templating/EntitySetHelper.js +1 -1
  152. package/packages/sap.fe.core/src/sap/fe/core/templating/EntitySetHelper.ts +42 -2
  153. package/packages/sap.fe.core/test/sap/fe/core/designtime/api.json +1 -1
  154. package/packages/sap.fe.core/test/sap/fe/core/designtime/apiref/api.json +1 -1
  155. package/packages/sap.fe.core/test/sap/fe/core/designtime/codeassistance/Library.xmlmeta.json +1 -1
  156. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/buildingBlockOverview.md +4 -0
  157. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/buildingBlocks/chart/chartDefault/ChartDefault.view.xml +1 -0
  158. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/controllerExtensions/viewState/manifest.json +2 -2
  159. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/CustomColumnAdaptation.fragment.xml +13 -10
  160. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/CustomColumnButton.fragment.xml +7 -4
  161. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/localService/service.cds +1 -2
  162. package/packages/sap.fe.core/test/sap/fe/core/fpmExplorer/topics/customElements/customColumn/customColumnContent/manifest.json +1 -0
  163. package/packages/sap.fe.core/test/sap/fe/core/jest/CommonUtils.spec.js +119 -0
  164. package/packages/sap.fe.core/test/sap/fe/core/jest/__snapshots__/TemplateConverter.spec.ts.snap +285 -4
  165. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.js +121 -0
  166. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/MessageHandler.spec.ts +79 -0
  167. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.js +147 -0
  168. package/packages/sap.fe.core/test/sap/fe/core/jest/controllerextensions/ViewState.spec.ts +96 -0
  169. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.js +51 -18
  170. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/Table.spec.ts +109 -17
  171. package/packages/sap.fe.core/test/sap/fe/core/jest/converters/__snapshots__/MetaModelConverter.spec.ts.snap +66 -0
  172. package/packages/sap.fe.core/test/sap/fe/core/jest/data/EntitySetHelper.cds +33 -0
  173. package/packages/sap.fe.core/test/sap/fe/core/jest/data/EntitySetHelperMainEntitySortableFalse.cds +12 -0
  174. package/packages/sap.fe.core/test/sap/fe/core/jest/data/TableGetSelectionMode.cds +8 -8
  175. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.js +68 -0
  176. package/packages/sap.fe.core/test/sap/fe/core/jest/formatters/TableFormatters.spec.ts +38 -0
  177. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/KeepAliveHelper.spec.js +483 -0
  178. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/KeepAliveHelper.spec.ts +376 -0
  179. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/KeepAliveHelperTestData/ControlRefreshStrategyTests.js +101 -0
  180. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/KeepAliveHelperTestData/ControlRefreshStrategyTests.ts +105 -0
  181. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/KeepAliveHelperTestData/ControlsForRefreshTests.js +103 -0
  182. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/KeepAliveHelperTestData/ControlsForRefreshTests.ts +106 -0
  183. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/KeepAliveHelperTestData/RefreshStrategyForIntentTests.js +118 -0
  184. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/KeepAliveHelperTestData/RefreshStrategyForIntentTests.ts +118 -0
  185. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/KeepAliveHelperTestData/StoreStrategyTests.js +101 -0
  186. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/KeepAliveHelperTestData/StoreStrategyTests.ts +102 -0
  187. package/packages/sap.fe.core/test/sap/fe/core/jest/helpers/ModelHelper.spec.js +118 -1
  188. package/packages/sap.fe.core/test/sap/fe/core/jest/services/RoutingServiceFactory.spec.js +70 -0
  189. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/EntitySetHelper.spec.js +89 -0
  190. package/packages/sap.fe.core/test/sap/fe/core/jest/templating/EntitySetHelper.spec.ts +73 -0
  191. package/packages/sap.fe.core/test/sap/fe/core/qunit/TemplatingExpressions.qunit.js +4 -2
  192. package/packages/sap.fe.core/test/sap/fe/core/qunit/apps/generalTests.json +6 -0
  193. package/packages/sap.fe.macros/src/sap/fe/macros/.library +1 -1
  194. package/packages/sap.fe.macros/src/sap/fe/macros/.theming +1 -1
  195. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate-dbg.js +15 -5
  196. package/packages/sap.fe.macros/src/sap/fe/macros/ChartDelegate.js +1 -1
  197. package/packages/sap.fe.macros/src/sap/fe/macros/CommonHelper-dbg.js +9 -5
  198. package/packages/sap.fe.macros/src/sap/fe/macros/CommonHelper.js +1 -1
  199. package/packages/sap.fe.macros/src/sap/fe/macros/DelegateUtil-dbg.js +30 -11
  200. package/packages/sap.fe.macros/src/sap/fe/macros/DelegateUtil.js +1 -1
  201. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI-dbg.js +3 -5
  202. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.js +1 -1
  203. package/packages/sap.fe.macros/src/sap/fe/macros/FieldAPI.ts +3 -5
  204. package/packages/sap.fe.macros/src/sap/fe/macros/FieldValueHelpDelegate-dbg.js +17 -3
  205. package/packages/sap.fe.macros/src/sap/fe/macros/FieldValueHelpDelegate.js +1 -1
  206. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI-dbg.js +1 -1
  207. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarAPI.ts +1 -2
  208. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate-dbg.js +4 -4
  209. package/packages/sap.fe.macros/src/sap/fe/macros/FilterBarDelegate.js +1 -1
  210. package/packages/sap.fe.macros/src/sap/fe/macros/FlexibleColumnLayoutActions.fragment.xml +6 -15
  211. package/packages/sap.fe.macros/src/sap/fe/macros/FormContainer.fragment.xml +14 -12
  212. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil-dbg.js +1 -1
  213. package/packages/sap.fe.macros/src/sap/fe/macros/PhantomUtil.js +1 -1
  214. package/packages/sap.fe.macros/src/sap/fe/macros/Table.fragment.xml +2 -1
  215. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata-dbg.js +12 -1
  216. package/packages/sap.fe.macros/src/sap/fe/macros/Table.metadata.js +1 -1
  217. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI-dbg.js +15 -8
  218. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.js +1 -1
  219. package/packages/sap.fe.macros/src/sap/fe/macros/TableAPI.ts +10 -0
  220. package/packages/sap.fe.macros/src/sap/fe/macros/chart/ChartHelper-dbg.js +1 -1
  221. package/packages/sap.fe.macros/src/sap/fe/macros/chart/ChartHelper.js +1 -1
  222. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper-dbg.js +81 -9
  223. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldHelper.js +1 -1
  224. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime-dbg.js +13 -3
  225. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldRuntime.js +1 -1
  226. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating-dbg.js +5 -5
  227. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.js +1 -1
  228. package/packages/sap.fe.macros/src/sap/fe/macros/field/FieldTemplating.ts +4 -4
  229. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkContactContent.fragment.xml +1 -7
  230. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate-dbg.js +5 -3
  231. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkDelegate.js +1 -1
  232. package/packages/sap.fe.macros/src/sap/fe/macros/field/QuickViewLinkForContact.fragment.xml +1 -1
  233. package/packages/sap.fe.macros/src/sap/fe/macros/formcontainer/FormContainerRuntime-dbg.js +46 -0
  234. package/packages/sap.fe.macros/src/sap/fe/macros/formcontainer/FormContainerRuntime.js +6 -0
  235. package/packages/sap.fe.macros/src/sap/fe/macros/internal/Field.fragment.xml +17 -8
  236. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/FieldStructure.fragment.xml +26 -16
  237. package/packages/sap.fe.macros/src/sap/fe/macros/internal/field/editStyle/File.fragment.xml +1 -0
  238. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating-dbg.js +4 -13
  239. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.js +1 -1
  240. package/packages/sap.fe.macros/src/sap/fe/macros/internal/helpers/DataPointTemplating.ts +10 -10
  241. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/TableDelegate-dbg.js +5 -3
  242. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +1 -1
  243. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper-dbg.js +72 -8
  244. package/packages/sap.fe.macros/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +1 -1
  245. package/packages/sap.fe.macros/src/sap/fe/macros/library-dbg.js +1 -1
  246. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js +12 -11
  247. package/packages/sap.fe.macros/src/sap/fe/macros/library-h2-preload.js.map +1 -1
  248. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js +93 -91
  249. package/packages/sap.fe.macros/src/sap/fe/macros/library-preload.js.map +4 -4
  250. package/packages/sap.fe.macros/src/sap/fe/macros/library.js +1 -1
  251. package/packages/sap.fe.macros/src/sap/fe/macros/manifest.json +9 -9
  252. package/packages/sap.fe.macros/src/sap/fe/macros/massedit/MassEditRuntime-dbg.js +1 -1
  253. package/packages/sap.fe.macros/src/sap/fe/macros/massedit/MassEditRuntime.js +1 -1
  254. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle.properties +5 -0
  255. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ar.properties +2 -2
  256. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_bg.properties +2 -2
  257. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ca.properties +2 -2
  258. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cs.properties +2 -2
  259. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_cy.properties +2 -2
  260. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_da.properties +2 -2
  261. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_de.properties +2 -2
  262. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_el.properties +2 -2
  263. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en.properties +1 -1
  264. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_GB.properties +1 -1
  265. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_en_US_sappsd.properties +3 -0
  266. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es.properties +2 -2
  267. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_es_MX.properties +2 -2
  268. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_et.properties +2 -2
  269. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fi.properties +2 -2
  270. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr.properties +2 -2
  271. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_fr_CA.properties +2 -2
  272. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hi.properties +2 -2
  273. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hr.properties +2 -2
  274. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_hu.properties +2 -2
  275. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_id.properties +2 -2
  276. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_it.properties +2 -2
  277. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_iw.properties +2 -2
  278. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ja.properties +3 -3
  279. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_kk.properties +2 -2
  280. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ko.properties +2 -2
  281. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lt.properties +2 -2
  282. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_lv.properties +2 -2
  283. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ms.properties +2 -2
  284. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_nl.properties +2 -2
  285. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_no.properties +2 -2
  286. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pl.properties +2 -2
  287. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt.properties +2 -2
  288. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_pt_PT.properties +2 -2
  289. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ro.properties +2 -2
  290. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_ru.properties +2 -2
  291. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sh.properties +2 -2
  292. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sk.properties +2 -2
  293. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sl.properties +2 -2
  294. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_sv.properties +2 -2
  295. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_th.properties +2 -2
  296. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_tr.properties +2 -2
  297. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_uk.properties +2 -2
  298. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_vi.properties +2 -2
  299. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_CN.properties +2 -2
  300. package/packages/sap.fe.macros/src/sap/fe/macros/messagebundle_zh_TW.properties +2 -2
  301. package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/MicroChartTitle.fragment.xml +21 -11
  302. package/packages/sap.fe.macros/src/sap/fe/macros/microchart/fragments/RadialMicroChart.fragment.xml +2 -1
  303. package/packages/sap.fe.macros/src/sap/fe/macros/resources.json +149 -110
  304. package/packages/sap.fe.macros/src/sap/fe/macros/table/Actions.fragment.xml +3 -0
  305. package/packages/sap.fe.macros/src/sap/fe/macros/table/ColumnContent.fragment.xml +70 -29
  306. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper-dbg.js +53 -36
  307. package/packages/sap.fe.macros/src/sap/fe/macros/table/TableHelper.js +1 -1
  308. package/packages/sap.fe.macros/src/sap/fe/macros/table/Utils-dbg.js +1 -1
  309. package/packages/sap.fe.macros/src/sap/fe/macros/table/Utils.js +1 -1
  310. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate-dbg.js +3 -4
  311. package/packages/sap.fe.macros/src/sap/fe/macros/table/delegates/TableDelegate.js +1 -1
  312. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/api.json +2 -2
  313. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/apiref/api.json +1 -1
  314. package/packages/sap.fe.macros/test/sap/fe/macros/designtime/codeassistance/Library.xmlmeta.json +1 -1
  315. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.js +844 -0
  316. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartDelegate.spec.ts +833 -0
  317. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartHelper.spec.js +495 -0
  318. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartHelper.spec.ts +440 -0
  319. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartUtils.spec.js +469 -0
  320. package/packages/sap.fe.macros/test/sap/fe/macros/jest/ChartUtils.spec.ts +448 -0
  321. package/packages/sap.fe.macros/test/sap/fe/macros/jest/CommonUtils.spec.js +94 -0
  322. package/packages/sap.fe.macros/test/sap/fe/macros/jest/CommonUtils.spec.ts +70 -0
  323. package/packages/sap.fe.macros/test/sap/fe/macros/jest/DatapointMacro.spec.js +12 -1
  324. package/packages/sap.fe.macros/test/sap/fe/macros/jest/DatapointMacro.spec.ts +11 -0
  325. package/packages/sap.fe.macros/test/sap/fe/macros/jest/DelegateUtil.spec.js +61 -0
  326. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldHelper.spec.js +46 -0
  327. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldHelper.spec.ts +30 -0
  328. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.js +13 -1
  329. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FieldMacroDataFieldTypes.spec.ts +11 -0
  330. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FormElement.spec.js +66 -0
  331. package/packages/sap.fe.macros/test/sap/fe/macros/jest/FormElement.spec.ts +35 -0
  332. package/packages/sap.fe.macros/test/sap/fe/macros/jest/SimpleFieldMacro.spec.js +48 -1
  333. package/packages/sap.fe.macros/test/sap/fe/macros/jest/SimpleFieldMacro.spec.ts +56 -0
  334. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableFieldLabel.spec.js +68 -0
  335. package/packages/sap.fe.macros/test/sap/fe/macros/jest/TableFieldLabel.spec.ts +65 -0
  336. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/ChartDelegate.spec.ts.snap +82 -0
  337. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/DatapointMacro.spec.ts.snap +23 -5
  338. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldHelper.spec.ts.snap +47 -0
  339. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FieldMacroDataFieldTypes.spec.ts.snap +52 -3
  340. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/FormElement.spec.ts.snap +25 -0
  341. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/QuickViewForm.spec.ts.snap +0 -3
  342. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/SimpleFieldMacro.spec.ts.snap +69 -0
  343. package/packages/sap.fe.macros/test/sap/fe/macros/jest/__snapshots__/TableFieldLabel.spec.ts.snap +451 -0
  344. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/FieldHelper.xml +68 -0
  345. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/Table.cds +13 -1
  346. package/packages/sap.fe.macros/test/sap/fe/macros/jest/data/TableFieldLabel.cds +152 -0
  347. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.js +116 -0
  348. package/packages/sap.fe.macros/test/sap/fe/macros/jest/field/FieldRuntime.spec.ts +115 -0
  349. package/packages/sap.fe.macros/test/sap/fe/macros/jest/form/FormElement.spec.js +86 -0
  350. package/packages/sap.fe.macros/test/sap/fe/macros/jest/form/FormElement.spec.ts +54 -0
  351. package/packages/sap.fe.macros/test/sap/fe/macros/jest/form/__snapshots__/FormElement.spec.ts.snap +33 -0
  352. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/Actions.spec.js +154 -0
  353. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/Actions.spec.ts +128 -0
  354. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.js +7 -2
  355. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/TableDelegate.spec.ts +23 -12
  356. package/packages/sap.fe.macros/test/sap/fe/macros/jest/table/delegates/__snapshots__/TableDelegate.spec.ts.snap +1 -1
  357. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/index.json +0 -5
  358. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FieldHelperTemplate.qunit.js +1 -1
  359. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FormElementTemplating.qunit.js +1 -1
  360. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/TableHelper.qunit.js +108 -1
  361. package/packages/sap.fe.navigation/src/sap/fe/navigation/.library +1 -1
  362. package/packages/sap.fe.navigation/src/sap/fe/navigation/.theming +1 -1
  363. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-dbg.js +1 -1
  364. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-h2-preload.js +2 -2
  365. package/packages/sap.fe.navigation/src/sap/fe/navigation/library-preload.js +2 -2
  366. package/packages/sap.fe.navigation/src/sap/fe/navigation/library.js +1 -1
  367. package/packages/sap.fe.navigation/src/sap/fe/navigation/manifest.json +3 -3
  368. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/api.json +1 -1
  369. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/apiref/api.json +1 -1
  370. package/packages/sap.fe.navigation/test/sap/fe/navigation/designtime/codeassistance/Library.xmlmeta.json +1 -1
  371. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.library +1 -1
  372. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/.theming +1 -1
  373. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-dbg.js +1 -1
  374. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-h2-preload.js +2 -2
  375. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js +4 -4
  376. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library-preload.js.map +1 -1
  377. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/library.js +1 -1
  378. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/manifest.json +3 -3
  379. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/resources.json +3 -3
  380. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/view/PlaceholderALP.fragment.html +1 -1
  381. package/packages/sap.fe.placeholder/src/sap/fe/placeholder/view/PlaceholderOVP.fragment.html +1 -1
  382. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/api.json +1 -1
  383. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/designtime/apiref/api.json +1 -1
  384. package/packages/sap.fe.templates/src/sap/fe/templates/.library +1 -1
  385. package/packages/sap.fe.templates/src/sap/fe/templates/.theming +1 -1
  386. package/packages/sap.fe.templates/src/sap/fe/templates/AnalyticalListPage/manifest.json +2 -2
  387. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent-dbg.js +1 -1
  388. package/packages/sap.fe.templates/src/sap/fe/templates/ListComponent.js +1 -1
  389. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReport.view.xml +2 -2
  390. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController-dbg.controller.js +91 -60
  391. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/ListReportController.controller.js +1 -1
  392. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/manifest.json +2 -2
  393. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/overrides/ViewState-dbg.js +31 -5
  394. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/overrides/ViewState.js +1 -1
  395. package/packages/sap.fe.templates/src/sap/fe/templates/ListReport/resources.json +5 -5
  396. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper-dbg.js +2 -2
  397. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/AnnotationHelper.js +1 -1
  398. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component-dbg.js +18 -1
  399. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/Component.js +1 -1
  400. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController-dbg.controller.js +114 -85
  401. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +1 -1
  402. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox-dbg.js +8 -0
  403. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +1 -1
  404. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/manifest.json +2 -2
  405. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/ViewState-dbg.js +23 -3
  406. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +1 -1
  407. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/resources.json +15 -15
  408. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating-dbg.js +6 -5
  409. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.js +1 -1
  410. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/templating/ObjectPageTemplating.ts +6 -4
  411. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPointTitle.fragment.xml +26 -16
  412. package/packages/sap.fe.templates/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +5 -5
  413. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl-dbg.controller.js +63 -9
  414. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +1 -1
  415. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer-dbg.controller.js +54 -32
  416. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +1 -1
  417. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController-dbg.js +24 -21
  418. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +1 -1
  419. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/view/Fcl.view.xml +2 -1
  420. package/packages/sap.fe.templates/src/sap/fe/templates/RootContainer/view/NavContainer.view.xml +1 -1
  421. package/packages/sap.fe.templates/src/sap/fe/templates/controls/Table.fragment.xml +2 -0
  422. package/packages/sap.fe.templates/src/sap/fe/templates/library-dbg.js +1 -1
  423. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js +8 -9
  424. package/packages/sap.fe.templates/src/sap/fe/templates/library-h2-preload.js.map +1 -1
  425. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js +23 -30
  426. package/packages/sap.fe.templates/src/sap/fe/templates/library-preload.js.map +4 -4
  427. package/packages/sap.fe.templates/src/sap/fe/templates/library.js +1 -1
  428. package/packages/sap.fe.templates/src/sap/fe/templates/manifest.json +13 -13
  429. package/packages/sap.fe.templates/src/sap/fe/templates/resources.json +51 -60
  430. package/packages/sap.fe.templates/test/sap/fe/templates/demokit/apps/itelo/webapp/manifest.json +1 -1
  431. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/api.json +1 -1
  432. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/apiref/api.json +1 -1
  433. package/packages/sap.fe.templates/test/sap/fe/templates/designtime/codeassistance/Library.xmlmeta.json +1 -1
  434. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/HeaderFacet.spec.js +95 -0
  435. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/HeaderFacet.spec.ts +66 -0
  436. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.js +134 -0
  437. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/ObjectPageHeaderForm.spec.ts +94 -0
  438. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/__snapshots__/HeaderFacet.spec.ts.snap +61 -0
  439. package/packages/sap.fe.templates/test/sap/fe/templates/jest/ObjectPage/view/fragments/__snapshots__/ObjectPageHeaderForm.spec.ts.snap +53 -0
  440. package/packages/sap.fe.test/src/sap/fe/test/.library +1 -1
  441. package/packages/sap.fe.test/src/sap/fe/test/.theming +1 -1
  442. package/packages/sap.fe.test/src/sap/fe/test/FCLView-dbg.js +0 -6
  443. package/packages/sap.fe.test/src/sap/fe/test/FCLView.js +1 -1
  444. package/packages/sap.fe.test/src/sap/fe/test/Flexibility-dbg.js +14 -3
  445. package/packages/sap.fe.test/src/sap/fe/test/Flexibility.js +1 -1
  446. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper-dbg.js +85 -8
  447. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.js +1 -1
  448. package/packages/sap.fe.test/src/sap/fe/test/JestTemplatingHelper.ts +54 -2
  449. package/packages/sap.fe.test/src/sap/fe/test/ListReport-dbg.js +0 -11
  450. package/packages/sap.fe.test/src/sap/fe/test/ListReport.js +1 -1
  451. package/packages/sap.fe.test/src/sap/fe/test/ObjectPage-dbg.js +0 -38
  452. package/packages/sap.fe.test/src/sap/fe/test/ObjectPage.js +1 -1
  453. package/packages/sap.fe.test/src/sap/fe/test/TemplatePage-dbg.js +0 -12
  454. package/packages/sap.fe.test/src/sap/fe/test/TemplatePage.js +1 -1
  455. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper-dbg.js +22 -1
  456. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.js +1 -1
  457. package/packages/sap.fe.test/src/sap/fe/test/UI5MockHelper.ts +14 -0
  458. package/packages/sap.fe.test/src/sap/fe/test/api/BaseAPI-dbg.js +21 -0
  459. package/packages/sap.fe.test/src/sap/fe/test/api/DialogAPI-dbg.js +9 -5
  460. package/packages/sap.fe.test/src/sap/fe/test/api/DialogAPI.js +1 -1
  461. package/packages/sap.fe.test/src/sap/fe/test/api/DialogActions-dbg.js +18 -5
  462. package/packages/sap.fe.test/src/sap/fe/test/api/DialogActions.js +1 -1
  463. package/packages/sap.fe.test/src/sap/fe/test/api/DialogAssertions-dbg.js +25 -5
  464. package/packages/sap.fe.test/src/sap/fe/test/api/DialogAssertions.js +1 -1
  465. package/packages/sap.fe.test/src/sap/fe/test/api/EditState-dbg.js +9 -0
  466. package/packages/sap.fe.test/src/sap/fe/test/api/EditState.js +1 -1
  467. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarActions-dbg.js +38 -4
  468. package/packages/sap.fe.test/src/sap/fe/test/api/FilterBarActions.js +1 -1
  469. package/packages/sap.fe.test/src/sap/fe/test/api/FormAssertions-dbg.js +33 -4
  470. package/packages/sap.fe.test/src/sap/fe/test/api/FormAssertions.js +1 -1
  471. package/packages/sap.fe.test/src/sap/fe/test/api/TableActions-dbg.js +1 -1
  472. package/packages/sap.fe.test/src/sap/fe/test/library-dbg.js +1 -1
  473. package/packages/sap.fe.test/src/sap/fe/test/library-h2-preload.js +3 -3
  474. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js +23 -16
  475. package/packages/sap.fe.test/src/sap/fe/test/library-preload.js.map +3 -3
  476. package/packages/sap.fe.test/src/sap/fe/test/library.js +1 -1
  477. package/packages/sap.fe.test/src/sap/fe/test/manifest.json +3 -3
  478. package/packages/sap.fe.test/src/sap/fe/test/resources.json +36 -34
  479. package/packages/sap.fe.test/test/sap/fe/test/designtime/api.json +1 -1
  480. package/packages/sap.fe.test/test/sap/fe/test/designtime/apiref/api.json +1 -1
  481. package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.jsmeta.json +1 -1
  482. package/packages/sap.fe.test/test/sap/fe/test/designtime/codeassistance/Library.xmlmeta.json +1 -1
  483. package/packages/sap.fe.common/test/sap/fe/common/relnotes/changes-1.96.json +0 -49
  484. package/packages/sap.fe.core/test/sap/fe/core/relnotes/changes-1.96.json +0 -189
  485. package/packages/sap.fe.macros/test/sap/fe/macros/qunit/macros/FieldRuntime.qunit.js +0 -73
  486. package/packages/sap.fe.macros/test/sap/fe/macros/relnotes/changes-1.96.json +0 -160
  487. package/packages/sap.fe.placeholder/test/sap/fe/placeholder/relnote/changes-1.96.json +0 -17
  488. package/packages/sap.fe.templates/src/sap/fe/templates/controls/OverflowToolbarButtonHover-dbg.js +0 -26
  489. package/packages/sap.fe.templates/src/sap/fe/templates/controls/OverflowToolbarButtonHover.js +0 -6
  490. package/packages/sap.fe.templates/test/sap/fe/templates/relnotes/changes-1.96.json +0 -153
@@ -0,0 +1,68 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/fe/core/formatters/TableFormatter", "sap/fe/core/formatters/TableFormatterTypes"], function (TableFormatter, TableFormatterTypes) {
6
+ "use strict";
7
+
8
+ var MessageType = TableFormatterTypes.MessageType;
9
+
10
+ var oRow;
11
+ beforeAll(function () {
12
+ try {
13
+ oRow = {
14
+ getBindingContext: function () {
15
+ return {
16
+ getPath: function () {
17
+ return "/rowBindingPath";
18
+ }
19
+ };
20
+ }
21
+ };
22
+ return Promise.resolve();
23
+ } catch (e) {
24
+ return Promise.reject(e);
25
+ }
26
+ });
27
+ describe("Table Formatters", function () {
28
+ it("rowHighlighting : 1 Error Message", function () {
29
+ var aMessage = [{
30
+ message: "mesg1",
31
+ type: MessageType.Error,
32
+ aTargets: ["/rowBindingPath/prop1"]
33
+ }];
34
+ expect(TableFormatter.rowHighlighting.call(oRow, MessageType.None, aMessage)).toEqual("Error");
35
+ });
36
+ it("rowHighlighting : 1 Warning Message", function () {
37
+ var aMessage = [{
38
+ message: "mesg1",
39
+ type: MessageType.Warning,
40
+ aTargets: ["/rowBindingPath/prop1"]
41
+ }];
42
+ expect(TableFormatter.rowHighlighting.call(oRow, MessageType.None, aMessage)).toEqual("Warning");
43
+ });
44
+ it("rowHighlighting: 2 Error + Warning Message", function () {
45
+ var aMessage = [{
46
+ message: "mesg2",
47
+ type: MessageType.Warning,
48
+ aTargets: ["/rowBindingPath/prop2"]
49
+ }, {
50
+ message: "mesg1",
51
+ type: MessageType.Error,
52
+ aTargets: ["/rowBindingPath/prop1"]
53
+ }];
54
+ expect(TableFormatter.rowHighlighting.call(oRow, MessageType.None, aMessage)).toEqual("Error");
55
+ aMessage = [{
56
+ message: "mesg1",
57
+ type: MessageType.Error,
58
+ aTargets: ["/rowBindingPath/prop1"]
59
+ }, {
60
+ message: "mesg2",
61
+ type: MessageType.Warning,
62
+ aTargets: ["/rowBindingPath/prop2"]
63
+ }];
64
+ expect(TableFormatter.rowHighlighting.call(oRow, MessageType.None, aMessage)).toEqual("Error");
65
+ });
66
+ });
67
+ }, false);
68
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRhYmxlRm9ybWF0dGVycy5zcGVjLnRzIl0sIm5hbWVzIjpbIm9Sb3ciLCJiZWZvcmVBbGwiLCJnZXRCaW5kaW5nQ29udGV4dCIsImdldFBhdGgiLCJkZXNjcmliZSIsIml0IiwiYU1lc3NhZ2UiLCJtZXNzYWdlIiwidHlwZSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJhVGFyZ2V0cyIsImV4cGVjdCIsIlRhYmxlRm9ybWF0dGVyIiwicm93SGlnaGxpZ2h0aW5nIiwiY2FsbCIsIk5vbmUiLCJ0b0VxdWFsIiwiV2FybmluZyJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7O0FBRUEsTUFBSUEsSUFBSjtBQUNBQyxFQUFBQSxTQUFTO0FBQUEsUUFBa0I7QUFDMUJELE1BQUFBLElBQUksR0FBRztBQUNORSxRQUFBQSxpQkFBaUIsRUFBRSxZQUFNO0FBQ3hCLGlCQUFPO0FBQ05DLFlBQUFBLE9BQU8sRUFBRTtBQUFBLHFCQUFNLGlCQUFOO0FBQUE7QUFESCxXQUFQO0FBR0E7QUFMSyxPQUFQO0FBRDBCO0FBUTFCLEtBUlE7QUFBQTtBQUFBO0FBQUEsSUFBVDtBQVNBQyxFQUFBQSxRQUFRLENBQUMsa0JBQUQsRUFBcUIsWUFBTTtBQUNsQ0MsSUFBQUEsRUFBRSxDQUFDLG1DQUFELEVBQXNDLFlBQU07QUFDN0MsVUFBSUMsUUFBUSxHQUFHLENBQUM7QUFBRUMsUUFBQUEsT0FBTyxFQUFFLE9BQVg7QUFBb0JDLFFBQUFBLElBQUksRUFBRUMsV0FBVyxDQUFDQyxLQUF0QztBQUE2Q0MsUUFBQUEsUUFBUSxFQUFFLENBQUMsdUJBQUQ7QUFBdkQsT0FBRCxDQUFmO0FBQ0FDLE1BQUFBLE1BQU0sQ0FBQ0MsY0FBYyxDQUFDQyxlQUFmLENBQStCQyxJQUEvQixDQUFvQ2YsSUFBcEMsRUFBMENTLFdBQVcsQ0FBQ08sSUFBdEQsRUFBNERWLFFBQTVELENBQUQsQ0FBTixDQUE4RVcsT0FBOUUsQ0FBc0YsT0FBdEY7QUFDQSxLQUhDLENBQUY7QUFLQVosSUFBQUEsRUFBRSxDQUFDLHFDQUFELEVBQXdDLFlBQU07QUFDL0MsVUFBSUMsUUFBUSxHQUFHLENBQUM7QUFBRUMsUUFBQUEsT0FBTyxFQUFFLE9BQVg7QUFBb0JDLFFBQUFBLElBQUksRUFBRUMsV0FBVyxDQUFDUyxPQUF0QztBQUErQ1AsUUFBQUEsUUFBUSxFQUFFLENBQUMsdUJBQUQ7QUFBekQsT0FBRCxDQUFmO0FBQ0FDLE1BQUFBLE1BQU0sQ0FBQ0MsY0FBYyxDQUFDQyxlQUFmLENBQStCQyxJQUEvQixDQUFvQ2YsSUFBcEMsRUFBMENTLFdBQVcsQ0FBQ08sSUFBdEQsRUFBNERWLFFBQTVELENBQUQsQ0FBTixDQUE4RVcsT0FBOUUsQ0FBc0YsU0FBdEY7QUFDQSxLQUhDLENBQUY7QUFLQVosSUFBQUEsRUFBRSxDQUFDLDRDQUFELEVBQStDLFlBQU07QUFDdEQsVUFBSUMsUUFBUSxHQUFHLENBQ2Q7QUFBRUMsUUFBQUEsT0FBTyxFQUFFLE9BQVg7QUFBb0JDLFFBQUFBLElBQUksRUFBRUMsV0FBVyxDQUFDUyxPQUF0QztBQUErQ1AsUUFBQUEsUUFBUSxFQUFFLENBQUMsdUJBQUQ7QUFBekQsT0FEYyxFQUVkO0FBQUVKLFFBQUFBLE9BQU8sRUFBRSxPQUFYO0FBQW9CQyxRQUFBQSxJQUFJLEVBQUVDLFdBQVcsQ0FBQ0MsS0FBdEM7QUFBNkNDLFFBQUFBLFFBQVEsRUFBRSxDQUFDLHVCQUFEO0FBQXZELE9BRmMsQ0FBZjtBQUlBQyxNQUFBQSxNQUFNLENBQUNDLGNBQWMsQ0FBQ0MsZUFBZixDQUErQkMsSUFBL0IsQ0FBb0NmLElBQXBDLEVBQTBDUyxXQUFXLENBQUNPLElBQXRELEVBQTREVixRQUE1RCxDQUFELENBQU4sQ0FBOEVXLE9BQTlFLENBQXNGLE9BQXRGO0FBQ0FYLE1BQUFBLFFBQVEsR0FBRyxDQUNWO0FBQUVDLFFBQUFBLE9BQU8sRUFBRSxPQUFYO0FBQW9CQyxRQUFBQSxJQUFJLEVBQUVDLFdBQVcsQ0FBQ0MsS0FBdEM7QUFBNkNDLFFBQUFBLFFBQVEsRUFBRSxDQUFDLHVCQUFEO0FBQXZELE9BRFUsRUFFVjtBQUFFSixRQUFBQSxPQUFPLEVBQUUsT0FBWDtBQUFvQkMsUUFBQUEsSUFBSSxFQUFFQyxXQUFXLENBQUNTLE9BQXRDO0FBQStDUCxRQUFBQSxRQUFRLEVBQUUsQ0FBQyx1QkFBRDtBQUF6RCxPQUZVLENBQVg7QUFJQUMsTUFBQUEsTUFBTSxDQUFDQyxjQUFjLENBQUNDLGVBQWYsQ0FBK0JDLElBQS9CLENBQW9DZixJQUFwQyxFQUEwQ1MsV0FBVyxDQUFDTyxJQUF0RCxFQUE0RFYsUUFBNUQsQ0FBRCxDQUFOLENBQThFVyxPQUE5RSxDQUFzRixPQUF0RjtBQUNBLEtBWEMsQ0FBRjtBQVlBLEdBdkJPLENBQVIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUYWJsZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQgeyBNYW5hZ2VkT2JqZWN0IH0gZnJvbSBcInNhcC91aS9iYXNlXCI7XG5cbmxldCBvUm93OiBhbnk7XG5iZWZvcmVBbGwoYXN5bmMgZnVuY3Rpb24oKSB7XG5cdG9Sb3cgPSB7XG5cdFx0Z2V0QmluZGluZ0NvbnRleHQ6ICgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGdldFBhdGg6ICgpID0+IFwiL3Jvd0JpbmRpbmdQYXRoXCJcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufSk7XG5kZXNjcmliZShcIlRhYmxlIEZvcm1hdHRlcnNcIiwgKCkgPT4ge1xuXHRpdChcInJvd0hpZ2hsaWdodGluZyA6IDEgRXJyb3IgTWVzc2FnZVwiLCAoKSA9PiB7XG5cdFx0bGV0IGFNZXNzYWdlID0gW3sgbWVzc2FnZTogXCJtZXNnMVwiLCB0eXBlOiBNZXNzYWdlVHlwZS5FcnJvciwgYVRhcmdldHM6IFtcIi9yb3dCaW5kaW5nUGF0aC9wcm9wMVwiXSB9XTtcblx0XHRleHBlY3QoVGFibGVGb3JtYXR0ZXIucm93SGlnaGxpZ2h0aW5nLmNhbGwob1JvdywgTWVzc2FnZVR5cGUuTm9uZSwgYU1lc3NhZ2UpKS50b0VxdWFsKFwiRXJyb3JcIik7XG5cdH0pO1xuXG5cdGl0KFwicm93SGlnaGxpZ2h0aW5nIDogMSBXYXJuaW5nIE1lc3NhZ2VcIiwgKCkgPT4ge1xuXHRcdGxldCBhTWVzc2FnZSA9IFt7IG1lc3NhZ2U6IFwibWVzZzFcIiwgdHlwZTogTWVzc2FnZVR5cGUuV2FybmluZywgYVRhcmdldHM6IFtcIi9yb3dCaW5kaW5nUGF0aC9wcm9wMVwiXSB9XTtcblx0XHRleHBlY3QoVGFibGVGb3JtYXR0ZXIucm93SGlnaGxpZ2h0aW5nLmNhbGwob1JvdywgTWVzc2FnZVR5cGUuTm9uZSwgYU1lc3NhZ2UpKS50b0VxdWFsKFwiV2FybmluZ1wiKTtcblx0fSk7XG5cblx0aXQoXCJyb3dIaWdobGlnaHRpbmc6IDIgRXJyb3IgKyBXYXJuaW5nIE1lc3NhZ2VcIiwgKCkgPT4ge1xuXHRcdGxldCBhTWVzc2FnZSA9IFtcblx0XHRcdHsgbWVzc2FnZTogXCJtZXNnMlwiLCB0eXBlOiBNZXNzYWdlVHlwZS5XYXJuaW5nLCBhVGFyZ2V0czogW1wiL3Jvd0JpbmRpbmdQYXRoL3Byb3AyXCJdIH0sXG5cdFx0XHR7IG1lc3NhZ2U6IFwibWVzZzFcIiwgdHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsIGFUYXJnZXRzOiBbXCIvcm93QmluZGluZ1BhdGgvcHJvcDFcIl0gfVxuXHRcdF07XG5cdFx0ZXhwZWN0KFRhYmxlRm9ybWF0dGVyLnJvd0hpZ2hsaWdodGluZy5jYWxsKG9Sb3csIE1lc3NhZ2VUeXBlLk5vbmUsIGFNZXNzYWdlKSkudG9FcXVhbChcIkVycm9yXCIpO1xuXHRcdGFNZXNzYWdlID0gW1xuXHRcdFx0eyBtZXNzYWdlOiBcIm1lc2cxXCIsIHR5cGU6IE1lc3NhZ2VUeXBlLkVycm9yLCBhVGFyZ2V0czogW1wiL3Jvd0JpbmRpbmdQYXRoL3Byb3AxXCJdIH0sXG5cdFx0XHR7IG1lc3NhZ2U6IFwibWVzZzJcIiwgdHlwZTogTWVzc2FnZVR5cGUuV2FybmluZywgYVRhcmdldHM6IFtcIi9yb3dCaW5kaW5nUGF0aC9wcm9wMlwiXSB9XG5cdFx0XTtcblx0XHRleHBlY3QoVGFibGVGb3JtYXR0ZXIucm93SGlnaGxpZ2h0aW5nLmNhbGwob1JvdywgTWVzc2FnZVR5cGUuTm9uZSwgYU1lc3NhZ2UpKS50b0VxdWFsKFwiRXJyb3JcIik7XG5cdH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,38 @@
1
+ import TableFormatter from "sap/fe/core/formatters/TableFormatter";
2
+ import { MessageType } from "sap/fe/core/formatters/TableFormatterTypes";
3
+ import { ManagedObject } from "sap/ui/base";
4
+
5
+ let oRow: any;
6
+ beforeAll(async function() {
7
+ oRow = {
8
+ getBindingContext: () => {
9
+ return {
10
+ getPath: () => "/rowBindingPath"
11
+ };
12
+ }
13
+ };
14
+ });
15
+ describe("Table Formatters", () => {
16
+ it("rowHighlighting : 1 Error Message", () => {
17
+ let aMessage = [{ message: "mesg1", type: MessageType.Error, aTargets: ["/rowBindingPath/prop1"] }];
18
+ expect(TableFormatter.rowHighlighting.call(oRow, MessageType.None, aMessage)).toEqual("Error");
19
+ });
20
+
21
+ it("rowHighlighting : 1 Warning Message", () => {
22
+ let aMessage = [{ message: "mesg1", type: MessageType.Warning, aTargets: ["/rowBindingPath/prop1"] }];
23
+ expect(TableFormatter.rowHighlighting.call(oRow, MessageType.None, aMessage)).toEqual("Warning");
24
+ });
25
+
26
+ it("rowHighlighting: 2 Error + Warning Message", () => {
27
+ let aMessage = [
28
+ { message: "mesg2", type: MessageType.Warning, aTargets: ["/rowBindingPath/prop2"] },
29
+ { message: "mesg1", type: MessageType.Error, aTargets: ["/rowBindingPath/prop1"] }
30
+ ];
31
+ expect(TableFormatter.rowHighlighting.call(oRow, MessageType.None, aMessage)).toEqual("Error");
32
+ aMessage = [
33
+ { message: "mesg1", type: MessageType.Error, aTargets: ["/rowBindingPath/prop1"] },
34
+ { message: "mesg2", type: MessageType.Warning, aTargets: ["/rowBindingPath/prop2"] }
35
+ ];
36
+ expect(TableFormatter.rowHighlighting.call(oRow, MessageType.None, aMessage)).toEqual("Error");
37
+ });
38
+ });
@@ -0,0 +1,483 @@
1
+ /*!
2
+ * SAP UI development toolkit for HTML5 (SAPUI5)
3
+ * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+ */
5
+ sap.ui.define(["sap/fe/core/helpers/KeepAliveHelper", "sap/fe/core/helpers/KeepAliveRefreshTypes", "sap/ui/core/mvc/View", "sap/base/Log", "./KeepAliveHelperTestData/StoreStrategyTests", "./KeepAliveHelperTestData/RefreshStrategyForIntentTests", "./KeepAliveHelperTestData/ControlRefreshStrategyTests", "./KeepAliveHelperTestData/ControlsForRefreshTests", "sap/fe/test/UI5MockHelper"], function (KeepAliveHelper, KeepAliveRefreshTypes, View, Log, StoreStrategyTests, RefreshStrategyForIntentTests, ControlRefreshStrategyTests, ControlsForRefreshTests, UI5MockHelper) {
6
+ "use strict";
7
+
8
+ var MockContext = UI5MockHelper.MockContext;
9
+ var MockControl = UI5MockHelper.MockControl;
10
+ var MockMetaModel = UI5MockHelper.MockMetaModel;
11
+ var MockModel = UI5MockHelper.MockModel;
12
+ var PATH_TO_STORE = KeepAliveRefreshTypes.PATH_TO_STORE;
13
+
14
+ describe("Keep Alive Helper Testing - #storeControlRefreshStrategyForHash", function () {
15
+ var internal;
16
+ var viewData;
17
+ var control;
18
+ var oMockGetModel;
19
+ var oMockInternalSetProperty;
20
+ var oMockViewDataGetProperty;
21
+ var refreshStrategyToTest;
22
+ beforeAll(function () {
23
+ try {
24
+ internal = new MockModel();
25
+ viewData = new MockModel();
26
+ control = new MockControl(); // mock model
27
+
28
+ oMockGetModel = jest.spyOn(control, "getModel");
29
+ oMockGetModel.mockImplementation(function (name) {
30
+ if (name === "internal") {
31
+ return internal;
32
+ } else if (name === "viewData") {
33
+ return viewData;
34
+ }
35
+ });
36
+ oMockInternalSetProperty = jest.spyOn(internal, "setProperty");
37
+ oMockViewDataGetProperty = jest.spyOn(viewData, "getProperty");
38
+ oMockViewDataGetProperty.mockImplementation(function (sPath) {
39
+ return sPath === PATH_TO_STORE ? refreshStrategyToTest : undefined;
40
+ });
41
+ return Promise.resolve();
42
+ } catch (e) {
43
+ return Promise.reject(e);
44
+ }
45
+ });
46
+ beforeEach(function () {
47
+ // Clean JSON
48
+ refreshStrategyToTest = {};
49
+ return Promise.resolve();
50
+ });
51
+ afterAll(function () {
52
+ try {
53
+ jest.restoreAllMocks();
54
+ return Promise.resolve();
55
+ } catch (e) {
56
+ return Promise.reject(e);
57
+ }
58
+ });
59
+ StoreStrategyTests.forEach(function (oTestData) {
60
+ it(oTestData.title, function () {
61
+ try {
62
+ // Cases to consider
63
+ refreshStrategyToTest = oTestData.refreshStrategies;
64
+ KeepAliveHelper.storeControlRefreshStrategyForHash(control, oTestData.hash);
65
+ expect(oMockInternalSetProperty).toHaveBeenLastCalledWith(PATH_TO_STORE, oTestData.result);
66
+ return Promise.resolve();
67
+ } catch (e) {
68
+ return Promise.reject(e);
69
+ }
70
+ });
71
+ });
72
+ });
73
+ describe("Keep Alive Helper Testing - #getRefreshStrategyForIntent", function () {
74
+ var refreshStrategies;
75
+ var semanticObject;
76
+ var action;
77
+ beforeEach(function () {
78
+ // Clean JSON
79
+ refreshStrategies = {};
80
+ semanticObject = undefined;
81
+ action = undefined;
82
+ return Promise.resolve();
83
+ });
84
+ afterAll(function () {
85
+ try {
86
+ jest.restoreAllMocks();
87
+ return Promise.resolve();
88
+ } catch (e) {
89
+ return Promise.reject(e);
90
+ }
91
+ });
92
+ RefreshStrategyForIntentTests.forEach(function (oTestData) {
93
+ it(oTestData.title, function () {
94
+ try {
95
+ // Cases to consider
96
+ expect(KeepAliveHelper.getRefreshStrategyForIntent(oTestData.refreshStrategies, oTestData.semanticObject, oTestData.action)).toEqual(oTestData.result);
97
+ return Promise.resolve();
98
+ } catch (e) {
99
+ return Promise.reject(e);
100
+ }
101
+ });
102
+ });
103
+ });
104
+ describe("Keep Alive Helper Testing - #getViewRefreshInfo", function () {
105
+ var viewData;
106
+ var view;
107
+ var oMockGetStrategy;
108
+ beforeAll(function () {
109
+ try {
110
+ viewData = {};
111
+ oMockGetStrategy = jest.spyOn(KeepAliveHelper, "getControlRefreshStrategyForContextPath");
112
+ oMockGetStrategy.mockReturnValue(jest.fn());
113
+ view = {
114
+ getViewData: function () {
115
+ return viewData;
116
+ }
117
+ };
118
+ return Promise.resolve();
119
+ } catch (e) {
120
+ return Promise.reject(e);
121
+ }
122
+ });
123
+ afterAll(function () {
124
+ try {
125
+ viewData = {};
126
+ jest.restoreAllMocks();
127
+ return Promise.resolve();
128
+ } catch (e) {
129
+ return Promise.reject(e);
130
+ }
131
+ });
132
+ it("With context Path", function () {
133
+ try {
134
+ var _viewData;
135
+
136
+ // Cases to consider
137
+ viewData.contextPath = "/SO";
138
+ KeepAliveHelper.getViewRefreshInfo(view);
139
+ expect(oMockGetStrategy).toHaveBeenCalledTimes(1);
140
+ expect(oMockGetStrategy).toHaveBeenLastCalledWith(view, (_viewData = viewData) === null || _viewData === void 0 ? void 0 : _viewData.contextPath);
141
+ return Promise.resolve();
142
+ } catch (e) {
143
+ return Promise.reject(e);
144
+ }
145
+ });
146
+ it("With entitySet", function () {
147
+ try {
148
+ var _viewData2;
149
+
150
+ // Cases to consider
151
+ viewData.entitySet = "SO";
152
+ KeepAliveHelper.getViewRefreshInfo(view);
153
+ expect(oMockGetStrategy).toHaveBeenCalledTimes(2);
154
+ expect(oMockGetStrategy).toHaveBeenLastCalledWith(view, "/" + ((_viewData2 = viewData) === null || _viewData2 === void 0 ? void 0 : _viewData2.entitySet));
155
+ return Promise.resolve();
156
+ } catch (e) {
157
+ return Promise.reject(e);
158
+ }
159
+ });
160
+ });
161
+ describe("Keep Alive Helper Testing - #getControlRefreshStrategyForContextPath", function () {
162
+ var internal;
163
+ var control;
164
+ var defaultModel;
165
+ var metaModel;
166
+ var oMockInternalGetProperty;
167
+ var oMockGetModel;
168
+ var oMockGetMetaModel;
169
+ var oMockGetObject;
170
+ var entitySet;
171
+ var refreshStrategyToTest;
172
+ beforeAll(function () {
173
+ try {
174
+ internal = new MockModel();
175
+ control = new MockControl();
176
+ defaultModel = new MockModel();
177
+ metaModel = new MockMetaModel(); // mock model
178
+
179
+ oMockGetModel = jest.spyOn(control, "getModel");
180
+ oMockGetModel.mockImplementation(function (name) {
181
+ if (name === "internal") {
182
+ return internal;
183
+ }
184
+
185
+ return defaultModel;
186
+ }); // mock internal model and refresh strategy
187
+
188
+ oMockInternalGetProperty = jest.spyOn(internal, "getProperty");
189
+ oMockInternalGetProperty.mockImplementation(function (sPath) {
190
+ return sPath === PATH_TO_STORE ? refreshStrategyToTest : undefined;
191
+ }); // mock metaModel and getObject
192
+
193
+ defaultModel.setMetaModel(metaModel);
194
+ oMockGetObject = jest.spyOn(metaModel, "getObject");
195
+ oMockGetObject.mockImplementation(function () {
196
+ return entitySet;
197
+ });
198
+ return Promise.resolve();
199
+ } catch (e) {
200
+ return Promise.reject(e);
201
+ }
202
+ });
203
+ beforeEach(function () {
204
+ // Clean JSON
205
+ refreshStrategyToTest = undefined;
206
+ entitySet = "";
207
+ return Promise.resolve();
208
+ });
209
+ afterAll(function () {
210
+ try {
211
+ jest.restoreAllMocks();
212
+ return Promise.resolve();
213
+ } catch (e) {
214
+ return Promise.reject(e);
215
+ }
216
+ });
217
+ ControlRefreshStrategyTests.forEach(function (oTestData) {
218
+ it(oTestData.title, function () {
219
+ try {
220
+ // Cases to consider
221
+ refreshStrategyToTest = oTestData.refreshStrategy;
222
+ entitySet = oTestData.entitySet;
223
+ expect(KeepAliveHelper.getControlRefreshStrategyForContextPath(control, oTestData.contextPath)).toEqual(oTestData.result);
224
+ return Promise.resolve();
225
+ } catch (e) {
226
+ return Promise.reject(e);
227
+ }
228
+ });
229
+ });
230
+ });
231
+ describe("Keep Alive Helper Testing - #getControlsForRefresh", function () {
232
+ var internal;
233
+ var aControls;
234
+ var view;
235
+ var defaultModel;
236
+ var metaModel;
237
+ var oMockInternalGetProperty;
238
+ var oMockGetModel;
239
+ var oMockGetMetaModel;
240
+ var oMockGetObject;
241
+ var entitySet;
242
+ var refreshStrategyToTest;
243
+ beforeAll(function () {
244
+ try {
245
+ internal = new MockModel();
246
+ view = new View();
247
+ defaultModel = new MockModel();
248
+ metaModel = new MockMetaModel(); // control mocks
249
+
250
+ var control1 = new MockControl();
251
+ var control2 = new MockControl();
252
+ var oMockControl1Data = jest.spyOn(control1, "data");
253
+ oMockControl1Data.mockImplementation(function (sKey) {
254
+ return sKey === "targetCollectionPath" ? "/SO" : undefined;
255
+ });
256
+ var oMockControl2Data = jest.spyOn(control2, "data");
257
+ oMockControl2Data.mockImplementation(function (sKey) {
258
+ return sKey === "targetCollectionPath" ? "/SO/_Item" : undefined;
259
+ });
260
+ aControls = [control1, control2]; // mock model
261
+
262
+ oMockGetModel = jest.spyOn(view, "getModel");
263
+ oMockGetModel.mockImplementation(function (name) {
264
+ if (name === "internal") {
265
+ return internal;
266
+ }
267
+
268
+ return defaultModel;
269
+ }); // mock internal model and refresh strategy
270
+
271
+ oMockInternalGetProperty = jest.spyOn(internal, "getProperty");
272
+ oMockInternalGetProperty.mockImplementation(function (sPath) {
273
+ return sPath === PATH_TO_STORE ? refreshStrategyToTest : undefined;
274
+ }); // mock metaModel and getObject
275
+
276
+ defaultModel.setMetaModel(metaModel);
277
+ oMockGetObject = jest.spyOn(metaModel, "getObject");
278
+ oMockGetObject.mockImplementation(function () {
279
+ return entitySet;
280
+ });
281
+ return Promise.resolve();
282
+ } catch (e) {
283
+ return Promise.reject(e);
284
+ }
285
+ });
286
+ beforeEach(function () {
287
+ // Clean JSON
288
+ refreshStrategyToTest = undefined;
289
+ entitySet = "";
290
+ return Promise.resolve();
291
+ });
292
+ afterAll(function () {
293
+ try {
294
+ jest.restoreAllMocks();
295
+ return Promise.resolve();
296
+ } catch (e) {
297
+ return Promise.reject(e);
298
+ }
299
+ });
300
+ ControlsForRefreshTests.forEach(function (oTestData) {
301
+ it(oTestData.title, function () {
302
+ try {
303
+ // Cases to consider
304
+ var result = oTestData.resultControlIndices.map(function (idx) {
305
+ return aControls[idx];
306
+ });
307
+ entitySet = oTestData.entitySet;
308
+ refreshStrategyToTest = oTestData.refreshStrategy;
309
+ expect(KeepAliveHelper.getControlsForRefresh(view, aControls)).toEqual(result);
310
+ return Promise.resolve();
311
+ } catch (e) {
312
+ return Promise.reject(e);
313
+ }
314
+ });
315
+ });
316
+ });
317
+ describe("Keep Alive Helper Testing - #restoreView", function () {
318
+ var internal;
319
+ var view;
320
+ var oMockInternalGetProperty;
321
+ var oMockInternalSetProperty;
322
+ var oMockBindingContext;
323
+ var oMockController;
324
+ var oMockGetId;
325
+ var oMockInfoLog;
326
+ var restoreStatus;
327
+ var spyRefreshResolve = jest.fn();
328
+ var spyRefreshReject = jest.fn();
329
+ var spyRestore = jest.fn();
330
+ var viewState = {};
331
+ beforeAll(function () {
332
+ try {
333
+ internal = new MockContext({});
334
+ view = new View();
335
+ spyRefreshResolve.mockResolvedValue({});
336
+ spyRefreshReject.mockRejectedValue({}); // mock view
337
+
338
+ oMockBindingContext = jest.spyOn(view, "getBindingContext");
339
+ oMockGetId = jest.spyOn(view, "getId");
340
+ oMockGetId.mockReturnValue("");
341
+ oMockBindingContext.mockReturnValue(internal);
342
+ oMockController = jest.spyOn(view, "getController");
343
+ viewState = {
344
+ onRestore: spyRestore
345
+ };
346
+ oMockController.mockImplementation(function () {
347
+ return {
348
+ viewState: viewState
349
+ };
350
+ });
351
+ oMockInternalGetProperty = jest.spyOn(internal, "getProperty");
352
+ oMockInternalSetProperty = jest.spyOn(internal, "setProperty");
353
+ oMockInternalGetProperty.mockImplementation(function (prop) {
354
+ return prop === "restoreStatus" ? restoreStatus : undefined;
355
+ }); // mock logs
356
+
357
+ oMockInfoLog = jest.spyOn(Log, "info");
358
+ oMockInfoLog.mockImplementation(function (msg) {
359
+ return msg;
360
+ });
361
+ return Promise.resolve();
362
+ } catch (e) {
363
+ return Promise.reject(e);
364
+ }
365
+ });
366
+ beforeEach(function () {
367
+ try {
368
+ // Clean JSON
369
+ restoreStatus = "";
370
+ viewState["refreshViewBindings"] = undefined;
371
+ return Promise.resolve();
372
+ } catch (e) {
373
+ return Promise.reject(e);
374
+ }
375
+ });
376
+ afterAll(function () {
377
+ try {
378
+ jest.restoreAllMocks();
379
+ return Promise.resolve();
380
+ } catch (e) {
381
+ return Promise.reject(e);
382
+ }
383
+ });
384
+ it("Refresh not pending", function () {
385
+ try {
386
+ restoreStatus = "done";
387
+ viewState["refreshViewBindings"] = spyRefreshResolve;
388
+ return Promise.resolve(KeepAliveHelper.restoreView(view)).then(function () {
389
+ expect(spyRefreshResolve).toHaveBeenCalledTimes(0);
390
+ expect(spyRestore).toHaveBeenCalledTimes(0);
391
+ expect(oMockInternalSetProperty).toHaveBeenCalledTimes(0);
392
+ });
393
+ } catch (e) {
394
+ return Promise.reject(e);
395
+ }
396
+ });
397
+ it("Refresh pending(no handler) and refresh, restore successfull", function () {
398
+ try {
399
+ restoreStatus = "pending";
400
+ viewState["refreshViewBindings"] = undefined;
401
+ return Promise.resolve(KeepAliveHelper.restoreView(view)).then(function () {
402
+ expect(spyRefreshResolve).toHaveBeenCalledTimes(0);
403
+ expect(spyRefreshReject).toHaveBeenCalledTimes(0);
404
+ expect(oMockInfoLog).toHaveBeenCalledTimes(0);
405
+ expect(spyRestore).toHaveBeenCalledTimes(1);
406
+ expect(oMockInternalSetProperty).toHaveBeenCalledTimes(1);
407
+ expect(oMockInternalSetProperty).toHaveBeenLastCalledWith("restoreStatus", "done");
408
+ });
409
+ } catch (e) {
410
+ return Promise.reject(e);
411
+ }
412
+ });
413
+ it("Refresh pending and refresh, restore successfull", function () {
414
+ try {
415
+ restoreStatus = "pending";
416
+ viewState["refreshViewBindings"] = spyRefreshResolve;
417
+ return Promise.resolve(KeepAliveHelper.restoreView(view)).then(function () {
418
+ expect(spyRefreshResolve).toHaveBeenCalledTimes(1);
419
+ expect(spyRefreshReject).toHaveBeenCalledTimes(0);
420
+ expect(oMockInfoLog).toHaveBeenCalledTimes(1);
421
+ expect(spyRestore).toHaveBeenCalledTimes(2);
422
+ expect(oMockInternalSetProperty).toHaveBeenCalledTimes(2);
423
+ expect(oMockInternalSetProperty).toHaveBeenLastCalledWith("restoreStatus", "done");
424
+ });
425
+ } catch (e) {
426
+ return Promise.reject(e);
427
+ }
428
+ });
429
+ it("Refresh pending and refresh unsuccessfull, restore successfull", function () {
430
+ try {
431
+ restoreStatus = "pending";
432
+ viewState["refreshViewBindings"] = spyRefreshReject;
433
+ return Promise.resolve(KeepAliveHelper.restoreView(view)).then(function () {
434
+ expect(spyRefreshResolve).toHaveBeenCalledTimes(1);
435
+ expect(spyRefreshReject).toHaveBeenCalledTimes(1);
436
+ expect(oMockInfoLog).toHaveBeenCalledTimes(1);
437
+ expect(oMockInternalSetProperty).toHaveBeenLastCalledWith("restoreStatus", "done");
438
+ });
439
+ } catch (e) {
440
+ return Promise.reject(e);
441
+ }
442
+ });
443
+ it("Refresh pending and refresh successfull, restore unsuccessfull", function () {
444
+ try {
445
+ restoreStatus = "pending";
446
+ viewState["refreshViewBindings"] = spyRefreshResolve;
447
+ spyRestore.mockImplementation(function () {
448
+ var error = new Error("restore error");
449
+ throw error;
450
+ });
451
+ return Promise.resolve(KeepAliveHelper.restoreView(view)).then(function () {
452
+ expect(spyRefreshResolve).toHaveBeenCalledTimes(2);
453
+ expect(spyRefreshReject).toHaveBeenCalledTimes(1);
454
+ expect(oMockInfoLog).toHaveBeenCalledTimes(2);
455
+ expect(spyRestore).toHaveBeenCalledTimes(3);
456
+ expect(oMockInternalSetProperty).toHaveBeenCalledTimes(2);
457
+ });
458
+ } catch (e) {
459
+ return Promise.reject(e);
460
+ }
461
+ });
462
+ it("Refresh pending and refresh and restore unsuccessfull", function () {
463
+ try {
464
+ restoreStatus = "pending";
465
+ viewState["refreshViewBindings"] = spyRefreshReject;
466
+ spyRestore.mockImplementation(function () {
467
+ var error = new Error("restore error");
468
+ throw error;
469
+ });
470
+ return Promise.resolve(KeepAliveHelper.restoreView(view)).then(function () {
471
+ expect(spyRefreshResolve).toHaveBeenCalledTimes(2);
472
+ expect(spyRefreshReject).toHaveBeenCalledTimes(2);
473
+ expect(oMockInfoLog).toHaveBeenCalledTimes(2);
474
+ expect(spyRestore).toHaveBeenCalledTimes(3);
475
+ expect(oMockInternalSetProperty).toHaveBeenCalledTimes(2);
476
+ });
477
+ } catch (e) {
478
+ return Promise.reject(e);
479
+ }
480
+ });
481
+ });
482
+ }, false);
483
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktlZXBBbGl2ZUhlbHBlci5zcGVjLnRzIl0sIm5hbWVzIjpbImRlc2NyaWJlIiwiaW50ZXJuYWwiLCJ2aWV3RGF0YSIsImNvbnRyb2wiLCJvTW9ja0dldE1vZGVsIiwib01vY2tJbnRlcm5hbFNldFByb3BlcnR5Iiwib01vY2tWaWV3RGF0YUdldFByb3BlcnR5IiwicmVmcmVzaFN0cmF0ZWd5VG9UZXN0IiwiYmVmb3JlQWxsIiwiTW9ja01vZGVsIiwiTW9ja0NvbnRyb2wiLCJqZXN0Iiwic3B5T24iLCJtb2NrSW1wbGVtZW50YXRpb24iLCJuYW1lIiwic1BhdGgiLCJQQVRIX1RPX1NUT1JFIiwidW5kZWZpbmVkIiwiYmVmb3JlRWFjaCIsImFmdGVyQWxsIiwicmVzdG9yZUFsbE1vY2tzIiwiU3RvcmVTdHJhdGVneVRlc3RzIiwiZm9yRWFjaCIsIm9UZXN0RGF0YSIsIml0IiwidGl0bGUiLCJyZWZyZXNoU3RyYXRlZ2llcyIsIktlZXBBbGl2ZUhlbHBlciIsInN0b3JlQ29udHJvbFJlZnJlc2hTdHJhdGVneUZvckhhc2giLCJoYXNoIiwiZXhwZWN0IiwidG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoIiwicmVzdWx0Iiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnRUZXN0cyIsImdldFJlZnJlc2hTdHJhdGVneUZvckludGVudCIsInRvRXF1YWwiLCJ2aWV3Iiwib01vY2tHZXRTdHJhdGVneSIsIm1vY2tSZXR1cm5WYWx1ZSIsImZuIiwiZ2V0Vmlld0RhdGEiLCJjb250ZXh0UGF0aCIsImdldFZpZXdSZWZyZXNoSW5mbyIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsImVudGl0eVNldCIsImRlZmF1bHRNb2RlbCIsIm1ldGFNb2RlbCIsIm9Nb2NrSW50ZXJuYWxHZXRQcm9wZXJ0eSIsIm9Nb2NrR2V0TWV0YU1vZGVsIiwib01vY2tHZXRPYmplY3QiLCJNb2NrTWV0YU1vZGVsIiwic2V0TWV0YU1vZGVsIiwiQ29udHJvbFJlZnJlc2hTdHJhdGVneVRlc3RzIiwicmVmcmVzaFN0cmF0ZWd5IiwiZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoIiwiYUNvbnRyb2xzIiwiVmlldyIsImNvbnRyb2wxIiwiY29udHJvbDIiLCJvTW9ja0NvbnRyb2wxRGF0YSIsInNLZXkiLCJvTW9ja0NvbnRyb2wyRGF0YSIsIkNvbnRyb2xzRm9yUmVmcmVzaFRlc3RzIiwicmVzdWx0Q29udHJvbEluZGljZXMiLCJtYXAiLCJpZHgiLCJnZXRDb250cm9sc0ZvclJlZnJlc2giLCJvTW9ja0JpbmRpbmdDb250ZXh0Iiwib01vY2tDb250cm9sbGVyIiwib01vY2tHZXRJZCIsIm9Nb2NrSW5mb0xvZyIsInJlc3RvcmVTdGF0dXMiLCJzcHlSZWZyZXNoUmVzb2x2ZSIsInNweVJlZnJlc2hSZWplY3QiLCJzcHlSZXN0b3JlIiwidmlld1N0YXRlIiwiTW9ja0NvbnRleHQiLCJtb2NrUmVzb2x2ZWRWYWx1ZSIsIm1vY2tSZWplY3RlZFZhbHVlIiwib25SZXN0b3JlIiwicHJvcCIsIkxvZyIsIm1zZyIsInJlc3RvcmVWaWV3IiwiZXJyb3IiLCJFcnJvciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7OztBQVVBQSxFQUFBQSxRQUFRLENBQUMsaUVBQUQsRUFBb0UsWUFBTTtBQUNqRixRQUFJQyxRQUFKO0FBQ0EsUUFBSUMsUUFBSjtBQUNBLFFBQUlDLE9BQUo7QUFDQSxRQUFJQyxhQUFKO0FBQ0EsUUFBSUMsd0JBQUo7QUFDQSxRQUFJQyx3QkFBSjtBQUNBLFFBQUlDLHFCQUFKO0FBRUFDLElBQUFBLFNBQVM7QUFBQSxVQUFrQjtBQUMxQlAsUUFBQUEsUUFBUSxHQUFHLElBQUlRLFNBQUosRUFBWDtBQUNBUCxRQUFBQSxRQUFRLEdBQUcsSUFBSU8sU0FBSixFQUFYO0FBRUFOLFFBQUFBLE9BQU8sR0FBRyxJQUFJTyxXQUFKLEVBQVYsQ0FKMEIsQ0FNMUI7O0FBQ0FOLFFBQUFBLGFBQWEsR0FBR08sSUFBSSxDQUFD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WUFBRCxDQUFOLENBQXFCM0IscUJBQXJCLENBQTJDLENBQTNDO0FBQ0FmLFVBQUFBLE1BQU0sQ0FBQzhDLFVBQUQsQ0FBTixDQUFtQi9CLHFCQUFuQixDQUF5QyxDQUF6QztBQUNBZixVQUFBQSxNQUFNLENBQUN6Qix3QkFBRCxDQUFOLENBQWlDd0MscUJBQWpDLENBQXVELENBQXZEO0FBYnVFO0FBY3ZFLE9BZEM7QUFBQTtBQUFBO0FBQUEsTUFBRjtBQWVBLEdBOUhPLENBQVIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgeyBTT1JlZnJlc2hTdHJhdGVneSwgUmVmcmVzaFN0cmF0ZWdpZXMsIFBBVEhfVE9fU1RPUkUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVSZWZyZXNoVHlwZXNcIjtcbmltcG9ydCB7IENvbnRyb2wgfSBmcm9tIFwic2FwL3VpL2NvcmVcIjtcbmltcG9ydCB7IFZpZXcgfSBmcm9tIFwic2FwL3VpL2NvcmUvbXZjXCI7XG5pbXBvcnQgeyBMb2cgfSBmcm9tIFwic2FwL2Jhc2VcIjtcbmltcG9ydCB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IFN0b3JlU3RyYXRlZ3lUZXN0cyBmcm9tIFwiLi9LZWVwQWxpdmVIZWxwZXJUZXN0RGF0YS9TdG9yZVN0cmF0ZWd5VGVzdHNcIjtcbmltcG9ydCBSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnRUZXN0cyBmcm9tIFwiLi9LZWVwQWxpdmVIZWxwZXJUZXN0RGF0YS9SZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnRUZXN0c1wiO1xuaW1wb3J0IENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lUZXN0cyBmcm9tIFwiLi9LZWVwQWxpdmVIZWxwZXJUZXN0RGF0YS9Db250cm9sUmVmcmVzaFN0cmF0ZWd5VGVzdHNcIjtcbmltcG9ydCBDb250cm9sc0ZvclJlZnJlc2hUZXN0cyBmcm9tIFwiLi9LZWVwQWxpdmVIZWxwZXJUZXN0RGF0YS9Db250cm9sc0ZvclJlZnJlc2hUZXN0c1wiO1xuaW1wb3J0IHsgTW9ja01vZGVsLCBNb2NrTWV0YU1vZGVsLCBNb2NrQ29udHJvbCwgTW9ja0NvbnRleHQgfSBmcm9tIFwic2FwL2ZlL3Rlc3QvVUk1TW9ja0hlbHBlclwiO1xuXG5kZXNjcmliZShcIktlZXAgQWxpdmUgSGVscGVyIFRlc3RpbmcgLSAjc3RvcmVDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9ySGFzaFwiLCAoKSA9PiB7XG5cdGxldCBpbnRlcm5hbCE6IE1vY2tNb2RlbDtcblx0bGV0IHZpZXdEYXRhITogTW9ja01vZGVsO1xuXHRsZXQgY29udHJvbCE6IE1vY2tDb250cm9sO1xuXHRsZXQgb01vY2tHZXRNb2RlbCE6IGplc3QuU3B5SW5zdGFuY2U7XG5cdGxldCBvTW9ja0ludGVybmFsU2V0UHJvcGVydHkhOiBqZXN0LlNweUluc3RhbmNlO1xuXHRsZXQgb01vY2tWaWV3RGF0YUdldFByb3BlcnR5ITogamVzdC5TcHlJbnN0YW5jZTtcblx0bGV0IHJlZnJlc2hTdHJhdGVneVRvVGVzdCE6IFJlZnJlc2hTdHJhdGVnaWVzIHwgdW5kZWZpbmVkO1xuXG5cdGJlZm9yZUFsbChhc3luYyBmdW5jdGlvbigpIHtcblx0XHRpbnRlcm5hbCA9IG5ldyBNb2NrTW9kZWwoKTtcblx0XHR2aWV3RGF0YSA9IG5ldyBNb2NrTW9kZWwoKTtcblxuXHRcdGNvbnRyb2wgPSBuZXcgTW9ja0NvbnRyb2woKTtcblxuXHRcdC8vIG1vY2sgbW9kZWxcblx0XHRvTW9ja0dldE1vZGVsID0gamVzdC5zcHlPbihjb250cm9sLCBcImdldE1vZGVsXCIpO1xuXHRcdG9Nb2NrR2V0TW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKG5hbWUgPT4ge1xuXHRcdFx0aWYgKG5hbWUgPT09IFwiaW50ZXJuYWxcIikge1xuXHRcdFx0XHRyZXR1cm4gaW50ZXJuYWw7XG5cdFx0XHR9IGVsc2UgaWYgKG5hbWUgPT09IFwidmlld0RhdGFcIikge1xuXHRcdFx0XHRyZXR1cm4gdmlld0RhdGE7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRvTW9ja0ludGVybmFsU2V0UHJvcGVydHkgPSBqZXN0LnNweU9uKGludGVybmFsLCBcInNldFByb3BlcnR5XCIpO1xuXHRcdG9Nb2NrVmlld0RhdGFHZXRQcm9wZXJ0eSA9IGplc3Quc3B5T24odmlld0RhdGEsIFwiZ2V0UHJvcGVydHlcIik7XG5cdFx0b01vY2tWaWV3RGF0YUdldFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbihzUGF0aCA9PiAoc1BhdGggPT09IFBBVEhfVE9fU1RPUkUgPyByZWZyZXNoU3RyYXRlZ3lUb1Rlc3QgOiB1bmRlZmluZWQpKTtcblx0fSk7XG5cdGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0Ly8gQ2xlYW4gSlNPTlxuXHRcdHJlZnJlc2hTdHJhdGVneVRvVGVzdCA9IHt9O1xuXHR9KTtcblxuXHRhZnRlckFsbChhc3luYyBmdW5jdGlvbigpIHtcblx0XHRqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuXHR9KTtcblxuXHRTdG9yZVN0cmF0ZWd5VGVzdHMuZm9yRWFjaChvVGVzdERhdGEgPT4ge1xuXHRcdGl0KG9UZXN0RGF0YS50aXRsZSwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Ly8gQ2FzZXMgdG8gY29uc2lkZXJcblx0XHRcdHJlZnJlc2hTdHJhdGVneVRvVGVzdCA9IG9UZXN0RGF0YS5yZWZyZXNoU3RyYXRlZ2llcztcblx0XHRcdEtlZXBBbGl2ZUhlbHBlci5zdG9yZUNvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JIYXNoKChjb250cm9sIGFzIHVua25vd24pIGFzIENvbnRyb2wsIG9UZXN0RGF0YS5oYXNoKTtcblx0XHRcdGV4cGVjdChvTW9ja0ludGVybmFsU2V0UHJvcGVydHkpLnRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aChQQVRIX1RPX1NUT1JFLCBvVGVzdERhdGEucmVzdWx0KTtcblx0XHR9KTtcblx0fSk7XG59KTtcblxuZGVzY3JpYmUoXCJLZWVwIEFsaXZlIEhlbHBlciBUZXN0aW5nIC0gI2dldFJlZnJlc2hTdHJhdGVneUZvckludGVudFwiLCAoKSA9PiB7XG5cdGxldCByZWZyZXNoU3RyYXRlZ2llcyE6IFJlZnJlc2hTdHJhdGVnaWVzO1xuXHRsZXQgc2VtYW50aWNPYmplY3QhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGxldCBhY3Rpb24hOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0Ly8gQ2xlYW4gSlNPTlxuXHRcdHJlZnJlc2hTdHJhdGVnaWVzID0ge307XG5cdFx0c2VtYW50aWNPYmplY3QgPSB1bmRlZmluZWQ7XG5cdFx0YWN0aW9uID0gdW5kZWZpbmVkO1xuXHR9KTtcblxuXHRhZnRlckFsbChhc3luYyBmdW5jdGlvbigpIHtcblx0XHRqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuXHR9KTtcblxuXHRSZWZyZXNoU3RyYXRlZ3lGb3JJbnRlbnRUZXN0cy5mb3JFYWNoKG9UZXN0RGF0YSA9PiB7XG5cdFx0aXQob1Rlc3REYXRhLnRpdGxlLCBhc3luYyAoKSA9PiB7XG5cdFx0XHQvLyBDYXNlcyB0byBjb25zaWRlclxuXHRcdFx0ZXhwZWN0KFxuXHRcdFx0XHRLZWVwQWxpdmVIZWxwZXIuZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50KG9UZXN0RGF0YS5yZWZyZXNoU3RyYXRlZ2llcywgb1Rlc3REYXRhLnNlbWFudGljT2JqZWN0LCBvVGVzdERhdGEuYWN0aW9uKVxuXHRcdFx0KS50b0VxdWFsKG9UZXN0RGF0YS5yZXN1bHQpO1xuXHRcdH0pO1xuXHR9KTtcbn0pO1xuXG5kZXNjcmliZShcIktlZXAgQWxpdmUgSGVscGVyIFRlc3RpbmcgLSAjZ2V0Vmlld1JlZnJlc2hJbmZvXCIsICgpID0+IHtcblx0bGV0IHZpZXdEYXRhITogQmFzZU1hbmlmZXN0U2V0dGluZ3M7XG5cdGxldCB2aWV3ITogb2JqZWN0O1xuXHRsZXQgb01vY2tHZXRTdHJhdGVneSE6IGplc3QuU3B5SW5zdGFuY2U7XG5cdGJlZm9yZUFsbChhc3luYyBmdW5jdGlvbigpIHtcblx0XHR2aWV3RGF0YSA9IHt9IGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzO1xuXHRcdG9Nb2NrR2V0U3RyYXRlZ3kgPSBqZXN0LnNweU9uKEtlZXBBbGl2ZUhlbHBlciwgXCJnZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGhcIik7XG5cdFx0b01vY2tHZXRTdHJhdGVneS5tb2NrUmV0dXJuVmFsdWUoamVzdC5mbigpKTtcblxuXHRcdHZpZXcgPSB7XG5cdFx0XHRnZXRWaWV3RGF0YTogKCkgPT4gdmlld0RhdGFcblx0XHR9O1xuXHR9KTtcblxuXHRhZnRlckFsbChhc3luYyBmdW5jdGlvbigpIHtcblx0XHR2aWV3RGF0YSA9IHt9IGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzO1xuXHRcdGplc3QucmVzdG9yZUFsbE1vY2tzKCk7XG5cdH0pO1xuXG5cdGl0KFwiV2l0aCBjb250ZXh0IFBhdGhcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdC8vIENhc2VzIHRvIGNvbnNpZGVyXG5cdFx0dmlld0RhdGEuY29udGV4dFBhdGggPSBcIi9TT1wiO1xuXHRcdEtlZXBBbGl2ZUhlbHBlci5nZXRWaWV3UmVmcmVzaEluZm8odmlldyBhcyBWaWV3KTtcblx0XHRleHBlY3Qob01vY2tHZXRTdHJhdGVneSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdGV4cGVjdChvTW9ja0dldFN0cmF0ZWd5KS50b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgodmlldywgdmlld0RhdGE/LmNvbnRleHRQYXRoKTtcblx0fSk7XG5cblx0aXQoXCJXaXRoIGVudGl0eVNldFwiLCBhc3luYyAoKSA9PiB7XG5cdFx0Ly8gQ2FzZXMgdG8gY29uc2lkZXJcblx0XHR2aWV3RGF0YS5lbnRpdHlTZXQgPSBcIlNPXCI7XG5cdFx0S2VlcEFsaXZlSGVscGVyLmdldFZpZXdSZWZyZXNoSW5mbyh2aWV3IGFzIFZpZXcpO1xuXHRcdGV4cGVjdChvTW9ja0dldFN0cmF0ZWd5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG5cdFx0ZXhwZWN0KG9Nb2NrR2V0U3RyYXRlZ3kpLnRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aCh2aWV3LCBcIi9cIiArIHZpZXdEYXRhPy5lbnRpdHlTZXQpO1xuXHR9KTtcbn0pO1xuXG5kZXNjcmliZShcIktlZXAgQWxpdmUgSGVscGVyIFRlc3RpbmcgLSAjZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoXCIsICgpID0+IHtcblx0bGV0IGludGVybmFsITogTW9ja01vZGVsO1xuXHRsZXQgY29udHJvbCE6IE1vY2tDb250cm9sO1xuXHRsZXQgZGVmYXVsdE1vZGVsITogTW9ja01vZGVsO1xuXHRsZXQgbWV0YU1vZGVsITogTW9ja01ldGFNb2RlbDtcblx0bGV0IG9Nb2NrSW50ZXJuYWxHZXRQcm9wZXJ0eSE6IGplc3QuU3B5SW5zdGFuY2U7XG5cdGxldCBvTW9ja0dldE1vZGVsITogamVzdC5TcHlJbnN0YW5jZTtcblx0bGV0IG9Nb2NrR2V0TWV0YU1vZGVsITogamVzdC5TcHlJbnN0YW5jZTtcblx0bGV0IG9Nb2NrR2V0T2JqZWN0ITogamVzdC5TcHlJbnN0YW5jZTtcblx0bGV0IGVudGl0eVNldCE6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRsZXQgcmVmcmVzaFN0cmF0ZWd5VG9UZXN0ITogU09SZWZyZXNoU3RyYXRlZ3kgfCB1bmRlZmluZWQ7XG5cblx0YmVmb3JlQWxsKGFzeW5jIGZ1bmN0aW9uKCkge1xuXHRcdGludGVybmFsID0gbmV3IE1vY2tNb2RlbCgpO1xuXHRcdGNvbnRyb2wgPSBuZXcgTW9ja0NvbnRyb2woKTtcblxuXHRcdGRlZmF1bHRNb2RlbCA9IG5ldyBNb2NrTW9kZWwoKTtcblx0XHRtZXRhTW9kZWwgPSBuZXcgTW9ja01ldGFNb2RlbCgpO1xuXG5cdFx0Ly8gbW9jayBtb2RlbFxuXHRcdG9Nb2NrR2V0TW9kZWwgPSBqZXN0LnNweU9uKGNvbnRyb2wsIFwiZ2V0TW9kZWxcIik7XG5cdFx0b01vY2tHZXRNb2RlbC5tb2NrSW1wbGVtZW50YXRpb24obmFtZSA9PiB7XG5cdFx0XHRpZiAobmFtZSA9PT0gXCJpbnRlcm5hbFwiKSB7XG5cdFx0XHRcdHJldHVybiBpbnRlcm5hbDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBkZWZhdWx0TW9kZWw7XG5cdFx0fSk7XG5cblx0XHQvLyBtb2NrIGludGVybmFsIG1vZGVsIGFuZCByZWZyZXNoIHN0cmF0ZWd5XG5cdFx0b01vY2tJbnRlcm5hbEdldFByb3BlcnR5ID0gamVzdC5zcHlPbihpbnRlcm5hbCwgXCJnZXRQcm9wZXJ0eVwiKTtcblx0XHRvTW9ja0ludGVybmFsR2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKHNQYXRoID0+IChzUGF0aCA9PT0gUEFUSF9UT19TVE9SRSA/IHJlZnJlc2hTdHJhdGVneVRvVGVzdCA6IHVuZGVmaW5lZCkpO1xuXG5cdFx0Ly8gbW9jayBtZXRhTW9kZWwgYW5kIGdldE9iamVjdFxuXHRcdGRlZmF1bHRNb2RlbC5zZXRNZXRhTW9kZWwobWV0YU1vZGVsKTtcblx0XHRvTW9ja0dldE9iamVjdCA9IGplc3Quc3B5T24obWV0YU1vZGVsLCBcImdldE9iamVjdFwiKTtcblx0XHRvTW9ja0dldE9iamVjdC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gZW50aXR5U2V0KTtcblx0fSk7XG5cdGJlZm9yZUVhY2goYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0Ly8gQ2xlYW4gSlNPTlxuXHRcdHJlZnJlc2hTdHJhdGVneVRvVGVzdCA9IHVuZGVmaW5lZDtcblx0XHRlbnRpdHlTZXQgPSBcIlwiO1xuXHR9KTtcblxuXHRhZnRlckFsbChhc3luYyBmdW5jdGlvbigpIHtcblx0XHRqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuXHR9KTtcblxuXHRDb250cm9sUmVmcmVzaFN0cmF0ZWd5VGVzdHMuZm9yRWFjaChvVGVzdERhdGEgPT4ge1xuXHRcdGl0KG9UZXN0RGF0YS50aXRsZSwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Ly8gQ2FzZXMgdG8gY29uc2lkZXJcblx0XHRcdHJlZnJlc2hTdHJhdGVneVRvVGVzdCA9IG9UZXN0RGF0YS5yZWZyZXNoU3RyYXRlZ3k7XG5cdFx0XHRlbnRpdHlTZXQgPSBvVGVzdERhdGEuZW50aXR5U2V0O1xuXHRcdFx0ZXhwZWN0KEtlZXBBbGl2ZUhlbHBlci5nZXRDb250cm9sUmVmcmVzaFN0cmF0ZWd5Rm9yQ29udGV4dFBhdGgoKGNvbnRyb2wgYXMgdW5rbm93bikgYXMgQ29udHJvbCwgb1Rlc3REYXRhLmNvbnRleHRQYXRoKSkudG9FcXVhbChcblx0XHRcdFx0b1Rlc3REYXRhLnJlc3VsdFxuXHRcdFx0KTtcblx0XHR9KTtcblx0fSk7XG59KTtcblxuZGVzY3JpYmUoXCJLZWVwIEFsaXZlIEhlbHBlciBUZXN0aW5nIC0gI2dldENvbnRyb2xzRm9yUmVmcmVzaFwiLCAoKSA9PiB7XG5cdGxldCBpbnRlcm5hbCE6IE1vY2tNb2RlbDtcblx0bGV0IGFDb250cm9scyE6IE1vY2tDb250cm9sW107XG5cdGxldCB2aWV3ITogVmlldztcblx0bGV0IGRlZmF1bHRNb2RlbCE6IE1vY2tNb2RlbDtcblx0bGV0IG1ldGFNb2RlbCE6IE1vY2tNZXRhTW9kZWw7XG5cdGxldCBvTW9ja0ludGVybmFsR2V0UHJvcGVydHkhOiBqZXN0LlNweUluc3RhbmNlO1xuXHRsZXQgb01vY2tHZXRNb2RlbCE6IGplc3QuU3B5SW5zdGFuY2U7XG5cdGxldCBvTW9ja0dldE1ldGFNb2RlbCE6IGplc3QuU3B5SW5zdGFuY2U7XG5cdGxldCBvTW9ja0dldE9iamVjdCE6IGplc3QuU3B5SW5zdGFuY2U7XG5cdGxldCBlbnRpdHlTZXQhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGxldCByZWZyZXNoU3RyYXRlZ3lUb1Rlc3QhOiBTT1JlZnJlc2hTdHJhdGVneSB8IHVuZGVmaW5lZDtcblxuXHRiZWZvcmVBbGwoYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0aW50ZXJuYWwgPSBuZXcgTW9ja01vZGVsKCk7XG5cdFx0dmlldyA9IG5ldyBWaWV3KCk7XG5cdFx0ZGVmYXVsdE1vZGVsID0gbmV3IE1vY2tNb2RlbCgpO1xuXHRcdG1ldGFNb2RlbCA9IG5ldyBNb2NrTWV0YU1vZGVsKCk7XG5cblx0XHQvLyBjb250cm9sIG1vY2tzXG5cdFx0Y29uc3QgY29udHJvbDEgPSBuZXcgTW9ja0NvbnRyb2woKTtcblx0XHRjb25zdCBjb250cm9sMiA9IG5ldyBNb2NrQ29udHJvbCgpO1xuXHRcdGNvbnN0IG9Nb2NrQ29udHJvbDFEYXRhID0gamVzdC5zcHlPbihjb250cm9sMSwgXCJkYXRhXCIpO1xuXHRcdG9Nb2NrQ29udHJvbDFEYXRhLm1vY2tJbXBsZW1lbnRhdGlvbihzS2V5ID0+IChzS2V5ID09PSBcInRhcmdldENvbGxlY3Rpb25QYXRoXCIgPyBcIi9TT1wiIDogdW5kZWZpbmVkKSk7XG5cdFx0Y29uc3Qgb01vY2tDb250cm9sMkRhdGEgPSBqZXN0LnNweU9uKGNvbnRyb2wyLCBcImRhdGFcIik7XG5cdFx0b01vY2tDb250cm9sMkRhdGEubW9ja0ltcGxlbWVudGF0aW9uKHNLZXkgPT4gKHNLZXkgPT09IFwidGFyZ2V0Q29sbGVjdGlvblBhdGhcIiA/IFwiL1NPL19JdGVtXCIgOiB1bmRlZmluZWQpKTtcblx0XHRhQ29udHJvbHMgPSBbY29udHJvbDEsIGNvbnRyb2wyXTtcblxuXHRcdC8vIG1vY2sgbW9kZWxcblx0XHRvTW9ja0dldE1vZGVsID0gamVzdC5zcHlPbih2aWV3LCBcImdldE1vZGVsXCIpO1xuXHRcdG9Nb2NrR2V0TW9kZWwubW9ja0ltcGxlbWVudGF0aW9uKG5hbWUgPT4ge1xuXHRcdFx0aWYgKG5hbWUgPT09IFwiaW50ZXJuYWxcIikge1xuXHRcdFx0XHRyZXR1cm4gaW50ZXJuYWw7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZGVmYXVsdE1vZGVsO1xuXHRcdH0pO1xuXG5cdFx0Ly8gbW9jayBpbnRlcm5hbCBtb2RlbCBhbmQgcmVmcmVzaCBzdHJhdGVneVxuXHRcdG9Nb2NrSW50ZXJuYWxHZXRQcm9wZXJ0eSA9IGplc3Quc3B5T24oaW50ZXJuYWwsIFwiZ2V0UHJvcGVydHlcIik7XG5cdFx0b01vY2tJbnRlcm5hbEdldFByb3BlcnR5Lm1vY2tJbXBsZW1lbnRhdGlvbihzUGF0aCA9PiAoc1BhdGggPT09IFBBVEhfVE9fU1RPUkUgPyByZWZyZXNoU3RyYXRlZ3lUb1Rlc3QgOiB1bmRlZmluZWQpKTtcblxuXHRcdC8vIG1vY2sgbWV0YU1vZGVsIGFuZCBnZXRPYmplY3Rcblx0XHRkZWZhdWx0TW9kZWwuc2V0TWV0YU1vZGVsKG1ldGFNb2RlbCk7XG5cdFx0b01vY2tHZXRPYmplY3QgPSBqZXN0LnNweU9uKG1ldGFNb2RlbCwgXCJnZXRPYmplY3RcIik7XG5cdFx0b01vY2tHZXRPYmplY3QubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IGVudGl0eVNldCk7XG5cdH0pO1xuXHRiZWZvcmVFYWNoKGFzeW5jIGZ1bmN0aW9uKCkge1xuXHRcdC8vIENsZWFuIEpTT05cblx0XHRyZWZyZXNoU3RyYXRlZ3lUb1Rlc3QgPSB1bmRlZmluZWQ7XG5cdFx0ZW50aXR5U2V0ID0gXCJcIjtcblx0fSk7XG5cblx0YWZ0ZXJBbGwoYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0amVzdC5yZXN0b3JlQWxsTW9ja3MoKTtcblx0fSk7XG5cblx0Q29udHJvbHNGb3JSZWZyZXNoVGVzdHMuZm9yRWFjaChvVGVzdERhdGEgPT4ge1xuXHRcdGl0KG9UZXN0RGF0YS50aXRsZSwgYXN5bmMgKCkgPT4ge1xuXHRcdFx0Ly8gQ2FzZXMgdG8gY29uc2lkZXJcblx0XHRcdGNvbnN0IHJlc3VsdDogTW9ja0NvbnRyb2xbXSA9IG9UZXN0RGF0YS5yZXN1bHRDb250cm9sSW5kaWNlcy5tYXAoaWR4ID0+IGFDb250cm9sc1tpZHhdKTtcblxuXHRcdFx0ZW50aXR5U2V0ID0gb1Rlc3REYXRhLmVudGl0eVNldDtcblx0XHRcdHJlZnJlc2hTdHJhdGVneVRvVGVzdCA9IG9UZXN0RGF0YS5yZWZyZXNoU3RyYXRlZ3k7XG5cdFx0XHRleHBlY3QoS2VlcEFsaXZlSGVscGVyLmdldENvbnRyb2xzRm9yUmVmcmVzaCh2aWV3LCAoYUNvbnRyb2xzIGFzIHVua25vd24pIGFzIENvbnRyb2xbXSkpLnRvRXF1YWwocmVzdWx0KTtcblx0XHR9KTtcblx0fSk7XG59KTtcblxuZGVzY3JpYmUoXCJLZWVwIEFsaXZlIEhlbHBlciBUZXN0aW5nIC0gI3Jlc3RvcmVWaWV3XCIsICgpID0+IHtcblx0bGV0IGludGVybmFsITogTW9ja0NvbnRleHQ7XG5cdGxldCB2aWV3ITogVmlldztcblx0bGV0IG9Nb2NrSW50ZXJuYWxHZXRQcm9wZXJ0eSE6IGplc3QuU3B5SW5zdGFuY2U7XG5cdGxldCBvTW9ja0ludGVybmFsU2V0UHJvcGVydHkhOiBqZXN0LlNweUluc3RhbmNlO1xuXHRsZXQgb01vY2tCaW5kaW5nQ29udGV4dCE6IGplc3QuU3B5SW5zdGFuY2U7XG5cdGxldCBvTW9ja0NvbnRyb2xsZXIhOiBqZXN0LlNweUluc3RhbmNlO1xuXHRsZXQgb01vY2tHZXRJZCE6IGplc3QuU3B5SW5zdGFuY2U7XG5cdGxldCBvTW9ja0luZm9Mb2chOiBqZXN0LlNweUluc3RhbmNlO1xuXHRsZXQgcmVzdG9yZVN0YXR1cyE6IHN0cmluZztcblx0Y29uc3Qgc3B5UmVmcmVzaFJlc29sdmU6IGplc3QuTW9jayA9IGplc3QuZm4oKTtcblx0Y29uc3Qgc3B5UmVmcmVzaFJlamVjdDogamVzdC5Nb2NrID0gamVzdC5mbigpO1xuXHRjb25zdCBzcHlSZXN0b3JlOiBqZXN0Lk1vY2sgPSBqZXN0LmZuKCk7XG5cdGxldCB2aWV3U3RhdGU6IGFueSA9IHt9O1xuXHRiZWZvcmVBbGwoYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0aW50ZXJuYWwgPSBuZXcgTW9ja0NvbnRleHQoe30pO1xuXHRcdHZpZXcgPSBuZXcgVmlldygpO1xuXHRcdHNweVJlZnJlc2hSZXNvbHZlLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblx0XHRzcHlSZWZyZXNoUmVqZWN0Lm1vY2tSZWplY3RlZFZhbHVlKHt9KTtcblxuXHRcdC8vIG1vY2sgdmlld1xuXHRcdG9Nb2NrQmluZGluZ0NvbnRleHQgPSBqZXN0LnNweU9uKHZpZXcsIFwiZ2V0QmluZGluZ0NvbnRleHRcIik7XG5cdFx0b01vY2tHZXRJZCA9IGplc3Quc3B5T24odmlldywgXCJnZXRJZFwiKTtcblx0XHRvTW9ja0dldElkLm1vY2tSZXR1cm5WYWx1ZShcIlwiKTtcblx0XHRvTW9ja0JpbmRpbmdDb250ZXh0Lm1vY2tSZXR1cm5WYWx1ZShpbnRlcm5hbCk7XG5cdFx0b01vY2tDb250cm9sbGVyID0gamVzdC5zcHlPbih2aWV3LCBcImdldENvbnRyb2xsZXJcIik7XG5cdFx0dmlld1N0YXRlID0ge1xuXHRcdFx0b25SZXN0b3JlOiBzcHlSZXN0b3JlXG5cdFx0fTtcblx0XHRvTW9ja0NvbnRyb2xsZXIubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG5cdFx0XHR2aWV3U3RhdGU6IHZpZXdTdGF0ZVxuXHRcdH0pKTtcblxuXHRcdG9Nb2NrSW50ZXJuYWxHZXRQcm9wZXJ0eSA9IGplc3Quc3B5T24oaW50ZXJuYWwsIFwiZ2V0UHJvcGVydHlcIik7XG5cdFx0b01vY2tJbnRlcm5hbFNldFByb3BlcnR5ID0gamVzdC5zcHlPbihpbnRlcm5hbCwgXCJzZXRQcm9wZXJ0eVwiKTtcblx0XHRvTW9ja0ludGVybmFsR2V0UHJvcGVydHkubW9ja0ltcGxlbWVudGF0aW9uKHByb3AgPT4gKHByb3AgPT09IFwicmVzdG9yZVN0YXR1c1wiID8gcmVzdG9yZVN0YXR1cyA6IHVuZGVmaW5lZCkpO1xuXG5cdFx0Ly8gbW9jayBsb2dzXG5cdFx0b01vY2tJbmZvTG9nID0gamVzdC5zcHlPbihMb2csIFwiaW5mb1wiKTtcblx0XHRvTW9ja0luZm9Mb2cubW9ja0ltcGxlbWVudGF0aW9uKG1zZyA9PiBtc2cpO1xuXHR9KTtcblx0YmVmb3JlRWFjaChhc3luYyBmdW5jdGlvbigpIHtcblx0XHQvLyBDbGVhbiBKU09OXG5cdFx0cmVzdG9yZVN0YXR1cyA9IFwiXCI7XG5cdFx0dmlld1N0YXRlW1wicmVmcmVzaFZpZXdCaW5kaW5nc1wiXSA9IHVuZGVmaW5lZDtcblx0fSk7XG5cblx0YWZ0ZXJBbGwoYXN5bmMgZnVuY3Rpb24oKSB7XG5cdFx0amVzdC5yZXN0b3JlQWxsTW9ja3MoKTtcblx0fSk7XG5cdGl0KFwiUmVmcmVzaCBub3QgcGVuZGluZ1wiLCBhc3luYyAoKSA9PiB7XG5cdFx0cmVzdG9yZVN0YXR1cyA9IFwiZG9uZVwiO1xuXHRcdHZpZXdTdGF0ZVtcInJlZnJlc2hWaWV3QmluZGluZ3NcIl0gPSBzcHlSZWZyZXNoUmVzb2x2ZTtcblxuXHRcdGF3YWl0IEtlZXBBbGl2ZUhlbHBlci5yZXN0b3JlVmlldyh2aWV3KTtcblx0XHRleHBlY3Qoc3B5UmVmcmVzaFJlc29sdmUpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRleHBlY3Qoc3B5UmVzdG9yZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdGV4cGVjdChvTW9ja0ludGVybmFsU2V0UHJvcGVydHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0fSk7XG5cdGl0KFwiUmVmcmVzaCBwZW5kaW5nKG5vIGhhbmRsZXIpIGFuZCByZWZyZXNoLCByZXN0b3JlIHN1Y2Nlc3NmdWxsXCIsIGFzeW5jICgpID0+IHtcblx0XHRyZXN0b3JlU3RhdHVzID0gXCJwZW5kaW5nXCI7XG5cdFx0dmlld1N0YXRlW1wicmVmcmVzaFZpZXdCaW5kaW5nc1wiXSA9IHVuZGVmaW5lZDtcblx0XHRhd2FpdCBLZWVwQWxpdmVIZWxwZXIucmVzdG9yZVZpZXcodmlldyk7XG5cblx0XHRleHBlY3Qoc3B5UmVmcmVzaFJlc29sdmUpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRleHBlY3Qoc3B5UmVmcmVzaFJlamVjdCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDApO1xuXHRcdGV4cGVjdChvTW9ja0luZm9Mb2cpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcblx0XHRleHBlY3Qoc3B5UmVzdG9yZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdGV4cGVjdChvTW9ja0ludGVybmFsU2V0UHJvcGVydHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRleHBlY3Qob01vY2tJbnRlcm5hbFNldFByb3BlcnR5KS50b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgoXCJyZXN0b3JlU3RhdHVzXCIsIFwiZG9uZVwiKTtcblx0fSk7XG5cdGl0KFwiUmVmcmVzaCBwZW5kaW5nIGFuZCByZWZyZXNoLCByZXN0b3JlIHN1Y2Nlc3NmdWxsXCIsIGFzeW5jICgpID0+IHtcblx0XHRyZXN0b3JlU3RhdHVzID0gXCJwZW5kaW5nXCI7XG5cdFx0dmlld1N0YXRlW1wicmVmcmVzaFZpZXdCaW5kaW5nc1wiXSA9IHNweVJlZnJlc2hSZXNvbHZlO1xuXHRcdGF3YWl0IEtlZXBBbGl2ZUhlbHBlci5yZXN0b3JlVmlldyh2aWV3KTtcblxuXHRcdGV4cGVjdChzcHlSZWZyZXNoUmVzb2x2ZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdGV4cGVjdChzcHlSZWZyZXNoUmVqZWN0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMCk7XG5cdFx0ZXhwZWN0KG9Nb2NrSW5mb0xvZykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXHRcdGV4cGVjdChzcHlSZXN0b3JlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG5cdFx0ZXhwZWN0KG9Nb2NrSW50ZXJuYWxTZXRQcm9wZXJ0eSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuXHRcdGV4cGVjdChvTW9ja0ludGVybmFsU2V0UHJvcGVydHkpLnRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aChcInJlc3RvcmVTdGF0dXNcIiwgXCJkb25lXCIpO1xuXHR9KTtcblxuXHRpdChcIlJlZnJlc2ggcGVuZGluZyBhbmQgcmVmcmVzaCB1bnN1Y2Nlc3NmdWxsLCByZXN0b3JlIHN1Y2Nlc3NmdWxsXCIsIGFzeW5jICgpID0+IHtcblx0XHRyZXN0b3JlU3RhdHVzID0gXCJwZW5kaW5nXCI7XG5cdFx0dmlld1N0YXRlW1wicmVmcmVzaFZpZXdCaW5kaW5nc1wiXSA9IHNweVJlZnJlc2hSZWplY3Q7XG5cdFx0YXdhaXQgS2VlcEFsaXZlSGVscGVyLnJlc3RvcmVWaWV3KHZpZXcpO1xuXG5cdFx0ZXhwZWN0KHNweVJlZnJlc2hSZXNvbHZlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0ZXhwZWN0KHNweVJlZnJlc2hSZWplY3QpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRleHBlY3Qob01vY2tJbmZvTG9nKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cdFx0ZXhwZWN0KG9Nb2NrSW50ZXJuYWxTZXRQcm9wZXJ0eSkudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKFwicmVzdG9yZVN0YXR1c1wiLCBcImRvbmVcIik7XG5cdH0pO1xuXG5cdGl0KFwiUmVmcmVzaCBwZW5kaW5nIGFuZCByZWZyZXNoIHN1Y2Nlc3NmdWxsLCByZXN0b3JlIHVuc3VjY2Vzc2Z1bGxcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdHJlc3RvcmVTdGF0dXMgPSBcInBlbmRpbmdcIjtcblx0XHR2aWV3U3RhdGVbXCJyZWZyZXNoVmlld0JpbmRpbmdzXCJdID0gc3B5UmVmcmVzaFJlc29sdmU7XG5cdFx0c3B5UmVzdG9yZS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuXHRcdFx0Y29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJyZXN0b3JlIGVycm9yXCIpO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fSk7XG5cdFx0YXdhaXQgS2VlcEFsaXZlSGVscGVyLnJlc3RvcmVWaWV3KHZpZXcpO1xuXG5cdFx0ZXhwZWN0KHNweVJlZnJlc2hSZXNvbHZlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG5cdFx0ZXhwZWN0KHNweVJlZnJlc2hSZWplY3QpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblx0XHRleHBlY3Qob01vY2tJbmZvTG9nKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG5cdFx0ZXhwZWN0KHNweVJlc3RvcmUpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcblx0XHRleHBlY3Qob01vY2tJbnRlcm5hbFNldFByb3BlcnR5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG5cdH0pO1xuXG5cdGl0KFwiUmVmcmVzaCBwZW5kaW5nIGFuZCByZWZyZXNoIGFuZCByZXN0b3JlIHVuc3VjY2Vzc2Z1bGxcIiwgYXN5bmMgKCkgPT4ge1xuXHRcdHJlc3RvcmVTdGF0dXMgPSBcInBlbmRpbmdcIjtcblx0XHR2aWV3U3RhdGVbXCJyZWZyZXNoVmlld0JpbmRpbmdzXCJdID0gc3B5UmVmcmVzaFJlamVjdDtcblx0XHRzcHlSZXN0b3JlLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7XG5cdFx0XHRjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcInJlc3RvcmUgZXJyb3JcIik7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9KTtcblx0XHRhd2FpdCBLZWVwQWxpdmVIZWxwZXIucmVzdG9yZVZpZXcodmlldyk7XG5cblx0XHRleHBlY3Qoc3B5UmVmcmVzaFJlc29sdmUpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcblx0XHRleHBlY3Qoc3B5UmVmcmVzaFJlamVjdCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuXHRcdGV4cGVjdChvTW9ja0luZm9Mb2cpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcblx0XHRleHBlY3Qoc3B5UmVzdG9yZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuXHRcdGV4cGVjdChvTW9ja0ludGVybmFsU2V0UHJvcGVydHkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcblx0fSk7XG59KTtcbiJdfQ==