@sap_oss/wdio-qmate-service 1.0.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 (625) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.yml +33 -0
  3. package/.reuse/dep5 +29 -0
  4. package/LICENSE +201 -0
  5. package/LICENSES/Apache-2.0.txt +73 -0
  6. package/README.md +20 -0
  7. package/docs/contact.md +10 -0
  8. package/docs/doc.md +5188 -0
  9. package/docs/gettingStarted/selectors.md +168 -0
  10. package/docs/gettingStarted/setup.md +8 -0
  11. package/docs/index.md +14 -0
  12. package/docs/style/custom.css +24 -0
  13. package/lib/index.d.ts +1 -0
  14. package/lib/index.js +171 -0
  15. package/lib/index.js.map +1 -0
  16. package/lib/reuse/authenticator/authConfig.d.ts +54 -0
  17. package/lib/reuse/authenticator/authConfig.js +55 -0
  18. package/lib/reuse/authenticator/authConfig.js.map +1 -0
  19. package/lib/reuse/authenticator/authHandler.d.ts +6 -0
  20. package/lib/reuse/authenticator/authHandler.js +37 -0
  21. package/lib/reuse/authenticator/authHandler.js.map +1 -0
  22. package/lib/reuse/authenticator/basicUrlAuthenticator.d.ts +2 -0
  23. package/lib/reuse/authenticator/basicUrlAuthenticator.js +36 -0
  24. package/lib/reuse/authenticator/basicUrlAuthenticator.js.map +1 -0
  25. package/lib/reuse/authenticator/customAuthenticator.d.ts +2 -0
  26. package/lib/reuse/authenticator/customAuthenticator.js +60 -0
  27. package/lib/reuse/authenticator/customAuthenticator.js.map +1 -0
  28. package/lib/reuse/authenticator/formAuthenticator.d.ts +2 -0
  29. package/lib/reuse/authenticator/formAuthenticator.js +57 -0
  30. package/lib/reuse/authenticator/formAuthenticator.js.map +1 -0
  31. package/lib/reuse/authenticator/plainAuthenticator.d.ts +2 -0
  32. package/lib/reuse/authenticator/plainAuthenticator.js +20 -0
  33. package/lib/reuse/authenticator/plainAuthenticator.js.map +1 -0
  34. package/lib/reuse/data/authenticators.json +16 -0
  35. package/lib/reuse/helper/clientsideUI5scripts.d.ts +1 -0
  36. package/lib/reuse/helper/clientsideUI5scripts.js +388 -0
  37. package/lib/reuse/helper/clientsideUI5scripts.js.map +1 -0
  38. package/lib/reuse/helper/jsDocGen.d.ts +1 -0
  39. package/lib/reuse/helper/jsDocGen.js +45 -0
  40. package/lib/reuse/helper/jsDocGen.js.map +1 -0
  41. package/lib/reuse/index.d.ts +5 -0
  42. package/lib/reuse/index.js +89 -0
  43. package/lib/reuse/index.js.map +1 -0
  44. package/lib/reuse/modules/common/Common.d.ts +12 -0
  45. package/lib/reuse/modules/common/Common.js +21 -0
  46. package/lib/reuse/modules/common/Common.js.map +1 -0
  47. package/lib/reuse/modules/common/assertion.d.ts +65 -0
  48. package/lib/reuse/modules/common/assertion.js +91 -0
  49. package/lib/reuse/modules/common/assertion.js.map +1 -0
  50. package/lib/reuse/modules/common/constants/date.constants.d.ts +8 -0
  51. package/lib/reuse/modules/common/constants/date.constants.js +13 -0
  52. package/lib/reuse/modules/common/constants/date.constants.js.map +1 -0
  53. package/lib/reuse/modules/common/constants/userInteraction.constants.d.ts +9 -0
  54. package/lib/reuse/modules/common/constants/userInteraction.constants.js +14 -0
  55. package/lib/reuse/modules/common/constants/userInteraction.constants.js.map +1 -0
  56. package/lib/reuse/modules/common/date.d.ts +84 -0
  57. package/lib/reuse/modules/common/date.js +164 -0
  58. package/lib/reuse/modules/common/date.js.map +1 -0
  59. package/lib/reuse/modules/common/navigation.d.ts +26 -0
  60. package/lib/reuse/modules/common/navigation.js +56 -0
  61. package/lib/reuse/modules/common/navigation.js.map +1 -0
  62. package/lib/reuse/modules/common/types/date.types.d.ts +2 -0
  63. package/lib/reuse/modules/common/types/date.types.js +3 -0
  64. package/lib/reuse/modules/common/types/date.types.js.map +1 -0
  65. package/lib/reuse/modules/common/userInteraction.d.ts +104 -0
  66. package/lib/reuse/modules/common/userInteraction.js +199 -0
  67. package/lib/reuse/modules/common/userInteraction.js.map +1 -0
  68. package/lib/reuse/modules/nonUi5/NonUi5.d.ts +12 -0
  69. package/lib/reuse/modules/nonUi5/NonUi5.js +21 -0
  70. package/lib/reuse/modules/nonUi5/NonUi5.js.map +1 -0
  71. package/lib/reuse/modules/nonUi5/assertion.d.ts +62 -0
  72. package/lib/reuse/modules/nonUi5/assertion.js +127 -0
  73. package/lib/reuse/modules/nonUi5/assertion.js.map +1 -0
  74. package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.d.ts +6 -0
  75. package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.js +11 -0
  76. package/lib/reuse/modules/nonUi5/constants/userInteraction.constants.js.map +1 -0
  77. package/lib/reuse/modules/nonUi5/element.d.ts +286 -0
  78. package/lib/reuse/modules/nonUi5/element.js +639 -0
  79. package/lib/reuse/modules/nonUi5/element.js.map +1 -0
  80. package/lib/reuse/modules/nonUi5/navigation.d.ts +17 -0
  81. package/lib/reuse/modules/nonUi5/navigation.js +44 -0
  82. package/lib/reuse/modules/nonUi5/navigation.js.map +1 -0
  83. package/lib/reuse/modules/nonUi5/userInteraction.d.ts +170 -0
  84. package/lib/reuse/modules/nonUi5/userInteraction.js +415 -0
  85. package/lib/reuse/modules/nonUi5/userInteraction.js.map +1 -0
  86. package/lib/reuse/modules/service/Service.d.ts +8 -0
  87. package/lib/reuse/modules/service/Service.js +17 -0
  88. package/lib/reuse/modules/service/Service.js.map +1 -0
  89. package/lib/reuse/modules/service/odata.d.ts +177 -0
  90. package/lib/reuse/modules/service/odata.js +347 -0
  91. package/lib/reuse/modules/service/odata.js.map +1 -0
  92. package/lib/reuse/modules/service/rest.d.ts +66 -0
  93. package/lib/reuse/modules/service/rest.js +168 -0
  94. package/lib/reuse/modules/service/rest.js.map +1 -0
  95. package/lib/reuse/modules/service/soap.d.ts +0 -0
  96. package/lib/reuse/modules/service/soap.js +2 -0
  97. package/lib/reuse/modules/service/soap.js.map +1 -0
  98. package/lib/reuse/modules/ui5/Ui5.d.ts +34 -0
  99. package/lib/reuse/modules/ui5/Ui5.js +41 -0
  100. package/lib/reuse/modules/ui5/Ui5.js.map +1 -0
  101. package/lib/reuse/modules/ui5/assertion.d.ts +183 -0
  102. package/lib/reuse/modules/ui5/assertion.js +493 -0
  103. package/lib/reuse/modules/ui5/assertion.js.map +1 -0
  104. package/lib/reuse/modules/ui5/confirmationDialog.d.ts +86 -0
  105. package/lib/reuse/modules/ui5/confirmationDialog.js +145 -0
  106. package/lib/reuse/modules/ui5/confirmationDialog.js.map +1 -0
  107. package/lib/reuse/modules/ui5/constants/mockserver.constants.d.ts +4 -0
  108. package/lib/reuse/modules/ui5/constants/mockserver.constants.js +9 -0
  109. package/lib/reuse/modules/ui5/constants/mockserver.constants.js.map +1 -0
  110. package/lib/reuse/modules/ui5/control.d.ts +84 -0
  111. package/lib/reuse/modules/ui5/control.js +132 -0
  112. package/lib/reuse/modules/ui5/control.js.map +1 -0
  113. package/lib/reuse/modules/ui5/date.d.ts +48 -0
  114. package/lib/reuse/modules/ui5/date.js +153 -0
  115. package/lib/reuse/modules/ui5/date.js.map +1 -0
  116. package/lib/reuse/modules/ui5/element.d.ts +160 -0
  117. package/lib/reuse/modules/ui5/element.js +349 -0
  118. package/lib/reuse/modules/ui5/element.js.map +1 -0
  119. package/lib/reuse/modules/ui5/errorDialog.d.ts +39 -0
  120. package/lib/reuse/modules/ui5/errorDialog.js +65 -0
  121. package/lib/reuse/modules/ui5/errorDialog.js.map +1 -0
  122. package/lib/reuse/modules/ui5/footerBar.d.ts +153 -0
  123. package/lib/reuse/modules/ui5/footerBar.js +240 -0
  124. package/lib/reuse/modules/ui5/footerBar.js.map +1 -0
  125. package/lib/reuse/modules/ui5/mockserver.d.ts +154 -0
  126. package/lib/reuse/modules/ui5/mockserver.js +665 -0
  127. package/lib/reuse/modules/ui5/mockserver.js.map +1 -0
  128. package/lib/reuse/modules/ui5/navigation.d.ts +103 -0
  129. package/lib/reuse/modules/ui5/navigation.js +275 -0
  130. package/lib/reuse/modules/ui5/navigation.js.map +1 -0
  131. package/lib/reuse/modules/ui5/navigationBar.d.ts +48 -0
  132. package/lib/reuse/modules/ui5/navigationBar.js +141 -0
  133. package/lib/reuse/modules/ui5/navigationBar.js.map +1 -0
  134. package/lib/reuse/modules/ui5/qunit.d.ts +17 -0
  135. package/lib/reuse/modules/ui5/qunit.js +52 -0
  136. package/lib/reuse/modules/ui5/qunit.js.map +1 -0
  137. package/lib/reuse/modules/ui5/session.d.ts +117 -0
  138. package/lib/reuse/modules/ui5/session.js +374 -0
  139. package/lib/reuse/modules/ui5/session.js.map +1 -0
  140. package/lib/reuse/modules/ui5/table.d.ts +61 -0
  141. package/lib/reuse/modules/ui5/table.js +188 -0
  142. package/lib/reuse/modules/ui5/table.js.map +1 -0
  143. package/lib/reuse/modules/ui5/types/mockserver.types.d.ts +2 -0
  144. package/lib/reuse/modules/ui5/types/mockserver.types.js +3 -0
  145. package/lib/reuse/modules/ui5/types/mockserver.types.js.map +1 -0
  146. package/lib/reuse/modules/ui5/userInteraction.d.ts +304 -0
  147. package/lib/reuse/modules/ui5/userInteraction.js +690 -0
  148. package/lib/reuse/modules/ui5/userInteraction.js.map +1 -0
  149. package/lib/reuse/modules/util/Util.d.ts +22 -0
  150. package/lib/reuse/modules/util/Util.js +27 -0
  151. package/lib/reuse/modules/util/Util.js.map +1 -0
  152. package/lib/reuse/modules/util/browser.d.ts +167 -0
  153. package/lib/reuse/modules/util/browser.js +367 -0
  154. package/lib/reuse/modules/util/browser.js.map +1 -0
  155. package/lib/reuse/modules/util/console.d.ts +56 -0
  156. package/lib/reuse/modules/util/console.js +152 -0
  157. package/lib/reuse/modules/util/console.js.map +1 -0
  158. package/lib/reuse/modules/util/constants/formatter.constants.d.ts +11 -0
  159. package/lib/reuse/modules/util/constants/formatter.constants.js +16 -0
  160. package/lib/reuse/modules/util/constants/formatter.constants.js.map +1 -0
  161. package/lib/reuse/modules/util/data.d.ts +36 -0
  162. package/lib/reuse/modules/util/data.js +87 -0
  163. package/lib/reuse/modules/util/data.js.map +1 -0
  164. package/lib/reuse/modules/util/file.d.ts +55 -0
  165. package/lib/reuse/modules/util/file.js +159 -0
  166. package/lib/reuse/modules/util/file.js.map +1 -0
  167. package/lib/reuse/modules/util/formatter.d.ts +90 -0
  168. package/lib/reuse/modules/util/formatter.js +210 -0
  169. package/lib/reuse/modules/util/formatter.js.map +1 -0
  170. package/lib/reuse/modules/util/function.d.ts +48 -0
  171. package/lib/reuse/modules/util/function.js +161 -0
  172. package/lib/reuse/modules/util/function.js.map +1 -0
  173. package/lib/reuse/modules/util/system.d.ts +17 -0
  174. package/lib/reuse/modules/util/system.js +58 -0
  175. package/lib/reuse/modules/util/system.js.map +1 -0
  176. package/lib/reuse/modules/util/types/formatter.types.d.ts +2 -0
  177. package/lib/reuse/modules/util/types/formatter.types.js +3 -0
  178. package/lib/reuse/modules/util/types/formatter.types.js.map +1 -0
  179. package/lib/scripts/clientsideUI5scripts.d.ts +1 -0
  180. package/lib/scripts/clientsideUI5scripts.js +315 -0
  181. package/lib/scripts/clientsideUI5scripts.js.map +1 -0
  182. package/lib/scripts/dataExchange/dataExchange.d.ts +1 -0
  183. package/lib/scripts/dataExchange/dataExchange.js +224 -0
  184. package/lib/scripts/dataExchange/dataExchange.js.map +1 -0
  185. package/lib/scripts/dataExchange/dataExchangeUtil.d.ts +63 -0
  186. package/lib/scripts/dataExchange/dataExchangeUtil.js +211 -0
  187. package/lib/scripts/dataExchange/dataExchangeUtil.js.map +1 -0
  188. package/lib/scripts/hooks/after.d.ts +8 -0
  189. package/lib/scripts/hooks/after.js +30 -0
  190. package/lib/scripts/hooks/after.js.map +1 -0
  191. package/lib/scripts/hooks/before.d.ts +8 -0
  192. package/lib/scripts/hooks/before.js +38 -0
  193. package/lib/scripts/hooks/before.js.map +1 -0
  194. package/lib/scripts/hooks/beforeSession.d.ts +8 -0
  195. package/lib/scripts/hooks/beforeSession.js +37 -0
  196. package/lib/scripts/hooks/beforeSession.js.map +1 -0
  197. package/lib/scripts/hooks/onComplete.d.ts +9 -0
  198. package/lib/scripts/hooks/onComplete.js +31 -0
  199. package/lib/scripts/hooks/onComplete.js.map +1 -0
  200. package/lib/scripts/hooks/onPrepare.d.ts +6 -0
  201. package/lib/scripts/hooks/onPrepare.js +36 -0
  202. package/lib/scripts/hooks/onPrepare.js.map +1 -0
  203. package/lib/scripts/hooks/utils/addLocatorCommands.d.ts +2 -0
  204. package/lib/scripts/hooks/utils/addLocatorCommands.js +193 -0
  205. package/lib/scripts/hooks/utils/addLocatorCommands.js.map +1 -0
  206. package/lib/scripts/hooks/utils/browserLog.d.ts +2 -0
  207. package/lib/scripts/hooks/utils/browserLog.js +39 -0
  208. package/lib/scripts/hooks/utils/browserLog.js.map +1 -0
  209. package/lib/scripts/hooks/utils/dataExchangeCommands.d.ts +9 -0
  210. package/lib/scripts/hooks/utils/dataExchangeCommands.js +46 -0
  211. package/lib/scripts/hooks/utils/dataExchangeCommands.js.map +1 -0
  212. package/lib/scripts/hooks/utils/decryption.d.ts +13 -0
  213. package/lib/scripts/hooks/utils/decryption.js +90 -0
  214. package/lib/scripts/hooks/utils/decryption.js.map +1 -0
  215. package/lib/scripts/hooks/utils/lib.d.ts +4 -0
  216. package/lib/scripts/hooks/utils/lib.js +330 -0
  217. package/lib/scripts/hooks/utils/lib.js.map +1 -0
  218. package/lib/scripts/hooks/utils/locatorCommands.d.ts +10 -0
  219. package/lib/scripts/hooks/utils/locatorCommands.js +216 -0
  220. package/lib/scripts/hooks/utils/locatorCommands.js.map +1 -0
  221. package/lib/scripts/locators/qmateLocator.d.ts +1 -0
  222. package/lib/scripts/locators/qmateLocator.js +1384 -0
  223. package/lib/scripts/locators/qmateLocator.js.map +1 -0
  224. package/lib/scripts/locators/uiveri5Locator.d.ts +1 -0
  225. package/lib/scripts/locators/uiveri5Locator.js +21 -0
  226. package/lib/scripts/locators/uiveri5Locator.js.map +1 -0
  227. package/mkdocs.yml +53 -0
  228. package/package.json +152 -0
  229. package/test/.eslintrc.yml +6 -0
  230. package/test/authenticator/package.json +13 -0
  231. package/test/authenticator/staticLogin/configCustom.js +22 -0
  232. package/test/authenticator/staticLogin/configCustomViaConfig.js +20 -0
  233. package/test/authenticator/staticLogin/configFiori.js +19 -0
  234. package/test/authenticator/staticLogin/configPlain.js +17 -0
  235. package/test/authenticator/staticLogin/configSapCloud.js +18 -0
  236. package/test/authenticator/staticLogin/html/custom.html +10 -0
  237. package/test/authenticator/staticLogin/html/fiori.html +10 -0
  238. package/test/authenticator/staticLogin/html/home.html +7 -0
  239. package/test/authenticator/staticLogin/html/sapCloud.html +10 -0
  240. package/test/authenticator/staticLogin/specs/custom.spec.js +6 -0
  241. package/test/authenticator/staticLogin/specs/customViaConfig.spec.js +10 -0
  242. package/test/authenticator/staticLogin/specs/fiori.spec.js +6 -0
  243. package/test/authenticator/staticLogin/specs/plain.spec.js +64 -0
  244. package/test/authenticator/staticLogin/specs/sapCloud.spec.js +6 -0
  245. package/test/authenticator/staticLogin/staticServerConfig.js +20 -0
  246. package/test/authenticator/systemLogin/configCustom.js +26 -0
  247. package/test/authenticator/systemLogin/configFiori.js +24 -0
  248. package/test/authenticator/systemLogin/configPlain.js +22 -0
  249. package/test/authenticator/systemLogin/configSapCloud.js +24 -0
  250. package/test/authenticator/systemLogin/specs/custom.spec.js +13 -0
  251. package/test/authenticator/systemLogin/specs/fiori.spec.js +12 -0
  252. package/test/authenticator/systemLogin/specs/plain.spec.js +21 -0
  253. package/test/authenticator/systemLogin/specs/sapCloud.spec.js +13 -0
  254. package/test/core/README.md +17 -0
  255. package/test/core/dataExchange/config.export.js +56 -0
  256. package/test/core/dataExchange/config.import.js +47 -0
  257. package/test/core/dataExchange/config.js +52 -0
  258. package/test/core/dataExchange/config.parallel.group.js +61 -0
  259. package/test/core/dataExchange/config.parallel.js +58 -0
  260. package/test/core/dataExchange/data/another/folder/data/anotherFolder/dummy1.txt +0 -0
  261. package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchase-orders/Limit-Purchase-Order.json +29 -0
  262. package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchase-orders/ServicePurchaseOrder.2Items.json +67 -0
  263. package/test/core/dataExchange/data/another/folder/data/anotherFolder/purchaseRequisition_HI.json +31 -0
  264. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/LimitPurchaseOrder.json +29 -0
  265. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/PurchaseOrderItems.json +58 -0
  266. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/PurchaseOrderWithScheduline.json +27 -0
  267. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServiceAndMaterialPurchaseOrder.json +65 -0
  268. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServicePurchaseOrder.json +39 -0
  269. package/test/core/dataExchange/data/another/folder/data/anotherFolder/subfolder/ServicePurchaseOrder2Items.json +67 -0
  270. package/test/core/dataExchange/data/my/folder/data/qs9/data.json +5 -0
  271. package/test/core/dataExchange/data/my/folder/data/qs9/dummy1.txt +0 -0
  272. package/test/core/dataExchange/data/my/folder/data/qs9/dummy2.txt +0 -0
  273. package/test/core/dataExchange/data/my/folder/data/qs9/empty.json +0 -0
  274. package/test/core/dataExchange/data/my/folder/data/qs9/purchaseRequisition.json +31 -0
  275. package/test/core/dataExchange/data/my/folder/data/qs9/supplierInvoice.json +17 -0
  276. package/test/core/dataExchange/data/my/folder/data/qs9/webUser.json +6 -0
  277. package/test/core/dataExchange/data/ui/moreDataFolder/anotherUser.json +6 -0
  278. package/test/core/dataExchange/data/ui/user.json +6 -0
  279. package/test/core/dataExchange/data/ui/webUser.json +6 -0
  280. package/test/core/dataExchange/specs/export.fast.spec.js +48 -0
  281. package/test/core/dataExchange/specs/export.slow.spec.js +50 -0
  282. package/test/core/dataExchange/specs/export.spec.js +103 -0
  283. package/test/core/dataExchange/specs/import.spec.js +144 -0
  284. package/test/core/dataExchange/specs/importExport.spec.js +196 -0
  285. package/test/core/dataExchange/utils.js +160 -0
  286. package/test/core/functional/README.md +30 -0
  287. package/test/core/functional/chaining/chaining.test.js +137 -0
  288. package/test/core/functional/chaining/test.conf.js +31 -0
  289. package/test/core/functional/locators/ancestorProperties.test.js +99 -0
  290. package/test/core/functional/locators/childProperties.test.js +40 -0
  291. package/test/core/functional/locators/descendantProperties.test.js +107 -0
  292. package/test/core/functional/locators/domProperties.test.js +60 -0
  293. package/test/core/functional/locators/elementProperties.test.js +114 -0
  294. package/test/core/functional/locators/mixedProperties.test.js +170 -0
  295. package/test/core/functional/locators/parentProperties.test.js +47 -0
  296. package/test/core/functional/locators/siblingProperties.test.js +120 -0
  297. package/test/core/functional/locators/test.locator.conf.js +38 -0
  298. package/test/core/functional/locators/utils.js +6 -0
  299. package/test/core/functional/nativeBrowser/runInBrowser.test.js +111 -0
  300. package/test/core/functional/nativeBrowser/test.conf.js +31 -0
  301. package/test/core/functional/nonUi5/basic.test.js +10 -0
  302. package/test/core/functional/nonUi5/getWithDomElement.test.js +51 -0
  303. package/test/core/functional/nonUi5/getWithDomElements.test.js +141 -0
  304. package/test/core/functional/nonUi5/test.conf.js +32 -0
  305. package/test/core/functional/ui5Properties/getAggregations.test.js +102 -0
  306. package/test/core/functional/ui5Properties/getAssociations.test.js +24 -0
  307. package/test/core/functional/ui5Properties/getBindingInfos.test.js +71 -0
  308. package/test/core/functional/ui5Properties/getProperties.test.js +226 -0
  309. package/test/core/functional/ui5Properties/test.conf.js +16 -0
  310. package/test/core/functional/uiveri5/sample.test.js +61 -0
  311. package/test/core/functional/uiveri5/test.conf.js +31 -0
  312. package/test/core/package-lock.json +0 -0
  313. package/test/core/package.json +12 -0
  314. package/test/core/testIntegration/config.js +17 -0
  315. package/test/core/testIntegration/configMultiCombo.js +17 -0
  316. package/test/core/testIntegration/configTable.js +18 -0
  317. package/test/core/testIntegration/filters1.spec.js +1849 -0
  318. package/test/core/testIntegration/multicombobox.spec.js +134 -0
  319. package/test/core/testIntegration/table.spec.js +80 -0
  320. package/test/helper/configurations/base.conf.js +43 -0
  321. package/test/helper/configurations/chrome.conf.js +47 -0
  322. package/test/helper/configurations/chrome.headless.conf.js +45 -0
  323. package/test/helper/configurations/sauce.labs.conf.js +37 -0
  324. package/test/helper/configurations/sauce.labs.tunnel.conf.js +39 -0
  325. package/test/helper/sleeper.js +19 -0
  326. package/test/helper/utils.js +15 -0
  327. package/test/helper/website/buttons.html +85 -0
  328. package/test/helper/website/checkBox.html +83 -0
  329. package/test/helper/website/dragAndDropFailing.html +83 -0
  330. package/test/helper/website/dragAndDropWdioExample.html +41 -0
  331. package/test/helper/website/dropdown.html +78 -0
  332. package/test/helper/website/forms.html +82 -0
  333. package/test/helper/website/hiddenAndVisible.html +60 -0
  334. package/test/helper/website/main.css +36 -0
  335. package/test/helper/website/scrollPage.html +261 -0
  336. package/test/helper/website/style.css +52 -0
  337. package/test/helper/website/tables.html +140 -0
  338. package/test/helper/website/waitForElements.html +73 -0
  339. package/test/reuse/common/assertion/expectDefined.spec.js +11 -0
  340. package/test/reuse/common/assertion/expectEqual.spec.js +52 -0
  341. package/test/reuse/common/assertion/expectFalse.spec.js +9 -0
  342. package/test/reuse/common/assertion/expectTrue.spec.js +9 -0
  343. package/test/reuse/common/assertion/expectUndefined.spec.js +11 -0
  344. package/test/reuse/common/assertion/expectUnequal.spec.js +25 -0
  345. package/test/reuse/common/assertion/expectUrlToBe.spec.js +27 -0
  346. package/test/reuse/common/assertion/test.assertion.conf.js +59 -0
  347. package/test/reuse/common/date/calculate.spec.js +163 -0
  348. package/test/reuse/common/date/getNextMonth.spec.js +105 -0
  349. package/test/reuse/common/date/getNextYear.spec.js +72 -0
  350. package/test/reuse/common/date/getPreviousMonth.spec.js +71 -0
  351. package/test/reuse/common/date/getPreviousYear.spec.js +72 -0
  352. package/test/reuse/common/date/getSpecific.spec.js +63 -0
  353. package/test/reuse/common/date/getToday.spec.js +78 -0
  354. package/test/reuse/common/date/getTomorrow.spec.js +72 -0
  355. package/test/reuse/common/date/test.date.conf.js +19 -0
  356. package/test/reuse/common/date/utils.js +6 -0
  357. package/test/reuse/common/navigation/navigateToUrl.spec.js +28 -0
  358. package/test/reuse/common/navigation/navigateToUrlAndRetry.spec.js +27 -0
  359. package/test/reuse/common/navigation/test.navigation.conf.js +25 -0
  360. package/test/reuse/common/userInteraction/clearAndFillActive.spec.js +100 -0
  361. package/test/reuse/common/userInteraction/clearAndFillActiveAndRetry.spec.js +106 -0
  362. package/test/reuse/common/userInteraction/fillActive.spec.js +230 -0
  363. package/test/reuse/common/userInteraction/fillActiveAndRetry.spec.js +172 -0
  364. package/test/reuse/common/userInteraction/pressKey.spec.js +105 -0
  365. package/test/reuse/common/userInteraction/test.userInteraction.conf.js +53 -0
  366. package/test/reuse/nonUi5/assertion/expectAttributeToBe.spec.js +45 -0
  367. package/test/reuse/nonUi5/assertion/expectAttributeToContain.spec.js +43 -0
  368. package/test/reuse/nonUi5/assertion/expectToBeNotVisible.spec.js +37 -0
  369. package/test/reuse/nonUi5/assertion/expectToBeVisible.spec.js +63 -0
  370. package/test/reuse/nonUi5/assertion/expectValueToBe.spec.js +25 -0
  371. package/test/reuse/nonUi5/assertion/test.assertion.conf.js +60 -0
  372. package/test/reuse/nonUi5/assertion/test.assertion.sauceLabs.conf.js +64 -0
  373. package/test/reuse/nonUi5/element/getAllDisplayed.spec.js +39 -0
  374. package/test/reuse/nonUi5/element/getAttributeValue.spec.js +58 -0
  375. package/test/reuse/nonUi5/element/getByChild.spec.js +70 -0
  376. package/test/reuse/nonUi5/element/getByClass.spec.js +64 -0
  377. package/test/reuse/nonUi5/element/getByCss.spec.js +65 -0
  378. package/test/reuse/nonUi5/element/getByCssContainingText.spec.js +83 -0
  379. package/test/reuse/nonUi5/element/getById.spec.js +35 -0
  380. package/test/reuse/nonUi5/element/getByName.spec.js +30 -0
  381. package/test/reuse/nonUi5/element/getByParent.spec.js +71 -0
  382. package/test/reuse/nonUi5/element/getByXPath.spec.js +30 -0
  383. package/test/reuse/nonUi5/element/getValue.spec.js +51 -0
  384. package/test/reuse/nonUi5/element/highlight.spec.js +18 -0
  385. package/test/reuse/nonUi5/element/isPresent.spec.js +39 -0
  386. package/test/reuse/nonUi5/element/isPresentByCss.spec.js +73 -0
  387. package/test/reuse/nonUi5/element/isPresentByXPath.spec.js +31 -0
  388. package/test/reuse/nonUi5/element/setInnerHTML.spec.js +23 -0
  389. package/test/reuse/nonUi5/element/test.element.conf.js +55 -0
  390. package/test/reuse/nonUi5/element/test.element.sauceLabs.conf.js +58 -0
  391. package/test/reuse/nonUi5/element/waitForAll.spec.js +24 -0
  392. package/test/reuse/nonUi5/element/waitToBeClickable.spec.js +24 -0
  393. package/test/reuse/nonUi5/element/waitToBePresent.spec.js +32 -0
  394. package/test/reuse/nonUi5/element/waitToBeVisible.spec.js +36 -0
  395. package/test/reuse/nonUi5/navigation/navigateToApplication.spec.js +13 -0
  396. package/test/reuse/nonUi5/navigation/test.navigation.conf.js +14 -0
  397. package/test/reuse/nonUi5/userInteraction/checkAttributeAndValue.spec.js +135 -0
  398. package/test/reuse/nonUi5/userInteraction/clear.spec.js +43 -0
  399. package/test/reuse/nonUi5/userInteraction/clearAndFill.spec.js +51 -0
  400. package/test/reuse/nonUi5/userInteraction/clearAndFillAndRetry.spec.js +58 -0
  401. package/test/reuse/nonUi5/userInteraction/clearAndRetry.spec.js +43 -0
  402. package/test/reuse/nonUi5/userInteraction/click.spec.js +60 -0
  403. package/test/reuse/nonUi5/userInteraction/clickAndRetry.spec.js +60 -0
  404. package/test/reuse/nonUi5/userInteraction/clickElementInSvg.spec.js +24 -0
  405. package/test/reuse/nonUi5/userInteraction/doubleClick.spec.js +22 -0
  406. package/test/reuse/nonUi5/userInteraction/dragAndDrop.spec.js +40 -0
  407. package/test/reuse/nonUi5/userInteraction/fill.spec.js +37 -0
  408. package/test/reuse/nonUi5/userInteraction/fillAndRetry.spec.js +39 -0
  409. package/test/reuse/nonUi5/userInteraction/mouseOverElement.spec.js +36 -0
  410. package/test/reuse/nonUi5/userInteraction/moveCursorAndClick.spec.js +24 -0
  411. package/test/reuse/nonUi5/userInteraction/rightClick.spec.js +13 -0
  412. package/test/reuse/nonUi5/userInteraction/scrollToElement.spec.js +35 -0
  413. package/test/reuse/nonUi5/userInteraction/test.userInteraction.conf.js +72 -0
  414. package/test/reuse/nonUi5/userInteraction/test.userInteraction.sauceLabs.conf.js +78 -0
  415. package/test/reuse/service/rest/db.json +8 -0
  416. package/test/reuse/service/rest/delete.spec.js +20 -0
  417. package/test/reuse/service/rest/get.spec.js +19 -0
  418. package/test/reuse/service/rest/init.spec.js +35 -0
  419. package/test/reuse/service/rest/patch.spec.js +29 -0
  420. package/test/reuse/service/rest/post.spec.js +37 -0
  421. package/test/reuse/service/rest/test.rest.conf.js +18 -0
  422. package/test/reuse/ui5/assertion/expectAttributeToBe.spec.js +106 -0
  423. package/test/reuse/ui5/assertion/expectAttributeToContain.spec.js +78 -0
  424. package/test/reuse/ui5/assertion/expectBindingContextPathToBe.spec.js +103 -0
  425. package/test/reuse/ui5/assertion/expectBindingPathToBe.spec.js +164 -0
  426. package/test/reuse/ui5/assertion/expectMessageToastTextToBe.spec.js +43 -0
  427. package/test/reuse/ui5/assertion/expectTextToBe.spec.js +39 -0
  428. package/test/reuse/ui5/assertion/expectToBeEnabled.spec.js +90 -0
  429. package/test/reuse/ui5/assertion/expectToBeNotEnabled.spec.js +62 -0
  430. package/test/reuse/ui5/assertion/expectToBeNotVisible.spec.js +52 -0
  431. package/test/reuse/ui5/assertion/expectToBeVisible.spec.js +69 -0
  432. package/test/reuse/ui5/assertion/expectToBeVisibleInViewport.spec.js +49 -0
  433. package/test/reuse/ui5/assertion/expectValidationError.spec.js +54 -0
  434. package/test/reuse/ui5/assertion/expectValidationSuccess.spec.js +53 -0
  435. package/test/reuse/ui5/assertion/expectValueToBe.spec.js +57 -0
  436. package/test/reuse/ui5/assertion/expectValueToBeDefined.spec.js +35 -0
  437. package/test/reuse/ui5/assertion/test.assertion.conf.js +28 -0
  438. package/test/reuse/ui5/assertion/test.assertion.sauceLab.conf.js +37 -0
  439. package/test/reuse/ui5/confirmationDialog/clickCancel.spec.js +88 -0
  440. package/test/reuse/ui5/confirmationDialog/clickCreate.spec.js +3 -0
  441. package/test/reuse/ui5/confirmationDialog/clickDelete.spec.js +89 -0
  442. package/test/reuse/ui5/confirmationDialog/clickNo.spec.js +96 -0
  443. package/test/reuse/ui5/confirmationDialog/clickOk.spec.js +66 -0
  444. package/test/reuse/ui5/confirmationDialog/clickRevokeApproval.spec.js +3 -0
  445. package/test/reuse/ui5/confirmationDialog/clickYes.spec.js +70 -0
  446. package/test/reuse/ui5/confirmationDialog/test.confirmationDialog.conf.js +20 -0
  447. package/test/reuse/ui5/confirmationDialog/test.confirmationDialog.sauceLab.conf.js +29 -0
  448. package/test/reuse/ui5/control/execute.spec.js +29 -0
  449. package/test/reuse/ui5/control/getAggregationProperty.spec.js +29 -0
  450. package/test/reuse/ui5/control/getAssociationProperty.spec.js +1 -0
  451. package/test/reuse/ui5/control/getBindingContextPathProperty.spec.js +30 -0
  452. package/test/reuse/ui5/control/getProperty.spec.js +30 -0
  453. package/test/reuse/ui5/control/getPropertyBinding.spec.js +30 -0
  454. package/test/reuse/ui5/control/test.control.conf.js +19 -0
  455. package/test/reuse/ui5/control/test.control.sauceLab.conf.js +30 -0
  456. package/test/reuse/ui5/date/fillRange.spec.js +53 -0
  457. package/test/reuse/ui5/date/pick.spec.js +136 -0
  458. package/test/reuse/ui5/date/pickRange.spec.js +143 -0
  459. package/test/reuse/ui5/date/test.date.conf.js +14 -0
  460. package/test/reuse/ui5/date/test.date.sauceLab.conf.js +26 -0
  461. package/test/reuse/ui5/element/getAllDisplayed.spec.js +71 -0
  462. package/test/reuse/ui5/element/getBindingValue.spec.js +78 -0
  463. package/test/reuse/ui5/element/getByChild.spec.js +124 -0
  464. package/test/reuse/ui5/element/getByParent.spec.js +134 -0
  465. package/test/reuse/ui5/element/getByText.spec.js +67 -0
  466. package/test/reuse/ui5/element/getDisplayed.spec.js +82 -0
  467. package/test/reuse/ui5/element/getId.spec.js +72 -0
  468. package/test/reuse/ui5/element/getPropertyValue.spec.js +91 -0
  469. package/test/reuse/ui5/element/highlight.spec.js +46 -0
  470. package/test/reuse/ui5/element/isVisible.spec.js +68 -0
  471. package/test/reuse/ui5/element/test.element.conf.js +22 -0
  472. package/test/reuse/ui5/element/test.element.sauceLab.conf.js +33 -0
  473. package/test/reuse/ui5/errorDialog/clickClose.spec.js +31 -0
  474. package/test/reuse/ui5/errorDialog/expectToBeVisible.spec.js +30 -0
  475. package/test/reuse/ui5/errorDialog/test.errorDialog.conf.js +13 -0
  476. package/test/reuse/ui5/errorDialog/test.errorDialog.sauceLab.conf.js +26 -0
  477. package/test/reuse/ui5/formatter/addRemoveLeadingZeros.spec.js +18 -0
  478. package/test/reuse/ui5/formatter/extractNumberFromString.spec.js +34 -0
  479. package/test/reuse/ui5/formatter/formatDate.spec.js +103 -0
  480. package/test/reuse/ui5/formatter/test.formatter.conf.js +14 -0
  481. package/test/reuse/ui5/formatter/test.formatter.sauceLab.conf.js +24 -0
  482. package/test/reuse/ui5/mockserver_qunit/Component.js +23 -0
  483. package/test/reuse/ui5/mockserver_qunit/LICENSE.txt +957 -0
  484. package/test/reuse/ui5/mockserver_qunit/NOTICE.txt +1 -0
  485. package/test/reuse/ui5/mockserver_qunit/controller/App.controller.js +37 -0
  486. package/test/reuse/ui5/mockserver_qunit/controller/BaseController.js +30 -0
  487. package/test/reuse/ui5/mockserver_qunit/controller/Home.controller.js +27 -0
  488. package/test/reuse/ui5/mockserver_qunit/controller/NotFound.controller.js +34 -0
  489. package/test/reuse/ui5/mockserver_qunit/controller/employee/Employee.controller.js +64 -0
  490. package/test/reuse/ui5/mockserver_qunit/controller/employee/EmployeeList.controller.js +22 -0
  491. package/test/reuse/ui5/mockserver_qunit/controller/employee/Resume.controller.js +83 -0
  492. package/test/reuse/ui5/mockserver_qunit/controller/employee/overview/EmployeeOverview.controller.js +11 -0
  493. package/test/reuse/ui5/mockserver_qunit/controller/employee/overview/EmployeeOverviewContent.controller.js +192 -0
  494. package/test/reuse/ui5/mockserver_qunit/i18n/i18n.properties +42 -0
  495. package/test/reuse/ui5/mockserver_qunit/index.html +21 -0
  496. package/test/reuse/ui5/mockserver_qunit/initMockServer.js +16 -0
  497. package/test/reuse/ui5/mockserver_qunit/localService/metadata.xml +61 -0
  498. package/test/reuse/ui5/mockserver_qunit/localService/mockdata/Employees.json +155 -0
  499. package/test/reuse/ui5/mockserver_qunit/localService/mockdata/Resumes.json +65 -0
  500. package/test/reuse/ui5/mockserver_qunit/localService/mockserver.js +146 -0
  501. package/test/reuse/ui5/mockserver_qunit/localService/mockserverLoadAllData.js +75 -0
  502. package/test/reuse/ui5/mockserver_qunit/manifest.json +169 -0
  503. package/test/reuse/ui5/mockserver_qunit/test/flpSandboxMockServer.html +63 -0
  504. package/test/reuse/ui5/mockserver_qunit/test/flpSandboxMockServerAllData.html +68 -0
  505. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/config.js +92 -0
  506. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/qunitExecution/specs/runQUnitTests.spec.js +14 -0
  507. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testDisplayNotFound/data/setup.json +11 -0
  508. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testDisplayNotFound/specs/testDisplayNotFound.spec.js +71 -0
  509. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/mock/Employees.json +204 -0
  510. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/mock/Resumes.json +114 -0
  511. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/setup.json +11 -0
  512. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/data/testShowEmployeeList.json +1 -0
  513. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/testShowEmployeeList/specs/testShowEmployeeList.spec.js +118 -0
  514. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/constants.js +25 -0
  515. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/mockDataMapper.js +23 -0
  516. package/test/reuse/ui5/mockserver_qunit/test/qmate/ui/utils/mockHelper.js +222 -0
  517. package/test/reuse/ui5/mockserver_qunit/test/unit/allTests.js +6 -0
  518. package/test/reuse/ui5/mockserver_qunit/test/unit/unitTests.qunit.html +38 -0
  519. package/test/reuse/ui5/mockserver_qunit/test/unit/utils/Conversions.js +13 -0
  520. package/test/reuse/ui5/mockserver_qunit/view/App.view.xml +9 -0
  521. package/test/reuse/ui5/mockserver_qunit/view/Home.view.xml +12 -0
  522. package/test/reuse/ui5/mockserver_qunit/view/NotFound.view.xml +11 -0
  523. package/test/reuse/ui5/mockserver_qunit/view/employee/Employee.view.xml +52 -0
  524. package/test/reuse/ui5/mockserver_qunit/view/employee/EmployeeList.view.xml +24 -0
  525. package/test/reuse/ui5/mockserver_qunit/view/employee/Resume.view.xml +35 -0
  526. package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeHobbies.view.xml +3 -0
  527. package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeNotes.view.xml +3 -0
  528. package/test/reuse/ui5/mockserver_qunit/view/employee/ResumeProjects.view.xml +3 -0
  529. package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverview.view.xml +13 -0
  530. package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverviewContent.view.xml +43 -0
  531. package/test/reuse/ui5/mockserver_qunit/view/employee/overview/EmployeeOverviewTop.view.xml +3 -0
  532. package/test/reuse/ui5/navigation/closePopups.spec.js +16 -0
  533. package/test/reuse/ui5/navigation/expectUnsupportedNavigationPopup.spec.js +81 -0
  534. package/test/reuse/ui5/navigation/navigateToApplication.spec.js +148 -0
  535. package/test/reuse/ui5/navigation/navigateToApplicationAndRetry.spec.js +153 -0
  536. package/test/reuse/ui5/navigation/navigateToApplicationWithQueryParams.spec.js +63 -0
  537. package/test/reuse/ui5/navigation/navigateToApplicationWithQueryParamsAndRetry.spec.js +64 -0
  538. package/test/reuse/ui5/navigation/navigateToSystemAndApplication.spec.js +45 -0
  539. package/test/reuse/ui5/navigation/navigateToSystemAndApplicationAndRetry.spec.js +43 -0
  540. package/test/reuse/ui5/navigation/test.navigation.conf.js +17 -0
  541. package/test/reuse/ui5/navigation/test.navigation.sauceLab.conf.js +33 -0
  542. package/test/reuse/ui5/navigation/test.navigation.static.conf.js +34 -0
  543. package/test/reuse/ui5/navigation/test.navigation.static.sauceLab.conf.js +41 -0
  544. package/test/reuse/ui5/navigation/website/main.css +36 -0
  545. package/test/reuse/ui5/navigation/website/main.html +50 -0
  546. package/test/reuse/ui5/navigationBar/clickBack.spec.js +38 -0
  547. package/test/reuse/ui5/navigationBar/clickUserIcon.spec.js +36 -0
  548. package/test/reuse/ui5/navigationBar/expectPageTitle.spec.js +22 -0
  549. package/test/reuse/ui5/navigationBar/expectShellHeader.spec.js +22 -0
  550. package/test/reuse/ui5/navigationBar/test.navigationBar.conf.js +17 -0
  551. package/test/reuse/ui5/navigationBar/test.navigationBar.sauceLab.conf.js +28 -0
  552. package/test/reuse/ui5/session/login.spec.js +78 -0
  553. package/test/reuse/ui5/session/loginFiori.spec.js +52 -0
  554. package/test/reuse/ui5/session/loginSapCloud.spec.js +51 -0
  555. package/test/reuse/ui5/session/logout.spec.js +48 -0
  556. package/test/reuse/ui5/session/switchUser.spec.js +48 -0
  557. package/test/reuse/ui5/session/test.session.conf.js +20 -0
  558. package/test/reuse/ui5/session/test.session.sauceLab.conf.js +29 -0
  559. package/test/reuse/ui5/table/clickSettingsButton.spec.js +58 -0
  560. package/test/reuse/ui5/table/sortColumnAscending.spec.js +84 -0
  561. package/test/reuse/ui5/table/sortColumnDescending.spec.js +84 -0
  562. package/test/reuse/ui5/table/test.table.conf.js +14 -0
  563. package/test/reuse/ui5/table/test.table.sauceLab.conf.js +25 -0
  564. package/test/reuse/ui5/table/test.table.sauceLab.tunnel.conf.js +25 -0
  565. package/test/reuse/ui5/userInteraction/clear.spec.js +75 -0
  566. package/test/reuse/ui5/userInteraction/clearAndFill.spec.js +157 -0
  567. package/test/reuse/ui5/userInteraction/clearAndFillAndRetry.spec.js +132 -0
  568. package/test/reuse/ui5/userInteraction/clearAndFillSmartFieldInput.spec.js +73 -0
  569. package/test/reuse/ui5/userInteraction/clearAndRetry.spec.js +57 -0
  570. package/test/reuse/ui5/userInteraction/click.spec.js +73 -0
  571. package/test/reuse/ui5/userInteraction/clickAndRetry.spec.js +52 -0
  572. package/test/reuse/ui5/userInteraction/clickSelectArrow.spec.js +87 -0
  573. package/test/reuse/ui5/userInteraction/clickSelectArrowAndRetry.spec.js +147 -0
  574. package/test/reuse/ui5/userInteraction/clickTab.spec.js +59 -0
  575. package/test/reuse/ui5/userInteraction/doubleClick.spec.js +73 -0
  576. package/test/reuse/ui5/userInteraction/dragAndDrop.spec.js +34 -0
  577. package/test/reuse/ui5/userInteraction/fill.spec.js +114 -0
  578. package/test/reuse/ui5/userInteraction/fillAndRetry.spec.js +120 -0
  579. package/test/reuse/ui5/userInteraction/mouseOverElement.spec.js +55 -0
  580. package/test/reuse/ui5/userInteraction/openF4Help.spec.js +56 -0
  581. package/test/reuse/ui5/userInteraction/rightClick.spec.js +72 -0
  582. package/test/reuse/ui5/userInteraction/scrollToElement.spec.js +89 -0
  583. package/test/reuse/ui5/userInteraction/searchFor.spec.js +155 -0
  584. package/test/reuse/ui5/userInteraction/selectBox.spec.js +128 -0
  585. package/test/reuse/ui5/userInteraction/selectCombobox.spec.js +115 -0
  586. package/test/reuse/ui5/userInteraction/selectMultiComboBox.spec.js +155 -0
  587. package/test/reuse/ui5/userInteraction/test.userInteraction.conf.js +35 -0
  588. package/test/reuse/ui5/userInteraction/test.userInteraction.sauceLab.conf.js +46 -0
  589. package/test/reuse/util/browser/back.spec.js +32 -0
  590. package/test/reuse/util/browser/clearBrowser.spec.js +35 -0
  591. package/test/reuse/util/browser/executeScript.spec.js +49 -0
  592. package/test/reuse/util/browser/getBaseUrl.spec.js +13 -0
  593. package/test/reuse/util/browser/getBrowserName.spec.js +18 -0
  594. package/test/reuse/util/browser/getCurrentUrl.spec.js +34 -0
  595. package/test/reuse/util/browser/getCurrentWindow.spec.js +42 -0
  596. package/test/reuse/util/browser/getUI5Version.spec.js +31 -0
  597. package/test/reuse/util/browser/logCurrentUrl.spec.js +23 -0
  598. package/test/reuse/util/browser/refresh.spec.js +52 -0
  599. package/test/reuse/util/browser/setBaseUrl.spec.js +13 -0
  600. package/test/reuse/util/browser/switchToDefaultContent.spec.js +34 -0
  601. package/test/reuse/util/browser/switchToIframe.spec.js +29 -0
  602. package/test/reuse/util/browser/switchToNewWindow.spec.js +142 -0
  603. package/test/reuse/util/browser/switchToWindow.spec.js +57 -0
  604. package/test/reuse/util/browser/test.browser.conf.js +27 -0
  605. package/test/reuse/util/data/data/test.json +3 -0
  606. package/test/reuse/util/data/data/test.secure.json +11 -0
  607. package/test/reuse/util/data/decrypt.spec.js +15 -0
  608. package/test/reuse/util/data/getData.spec.js +15 -0
  609. package/test/reuse/util/data/getSecureData.spec.js +57 -0
  610. package/test/reuse/util/data/test.data.conf.js +22 -0
  611. package/test/reuse/util/file/file.spec.js +90 -0
  612. package/test/reuse/util/file/pdfParser.spec.js +55 -0
  613. package/test/reuse/util/file/test.file.conf.js +15 -0
  614. package/test/reuse/util/file/testFiles/sample.pdf +198 -0
  615. package/test/reuse/util/file/testFiles/test.txt +5 -0
  616. package/test/reuse/util/file/testFiles/test2.txt +2 -0
  617. package/test/reuse/util/formatter/addRemoveLeadingZeros.spec.js +38 -0
  618. package/test/reuse/util/formatter/extractNumberFromString.spec.js +67 -0
  619. package/test/reuse/util/formatter/formatDate.spec.js +150 -0
  620. package/test/reuse/util/formatter/sliceStringAfter.spec.js +62 -0
  621. package/test/reuse/util/formatter/sliceStringAt.spec.js +62 -0
  622. package/test/reuse/util/formatter/stringifyJSON.spec.js +24 -0
  623. package/test/reuse/util/formatter/test.formatter.conf.js +20 -0
  624. package/test/reuse/util/formatter/trimString.spec.js +37 -0
  625. package/tsconfig.json +26 -0
@@ -0,0 +1,1384 @@
1
+ "use strict";
2
+ module.exports = {
3
+ ui5All: function ui5All(ui5Selector, index, opt_parentElement) {
4
+ //Polyfill
5
+ // https://tc39.github.io/ecma262/#sec-array.prototype.findindex
6
+ if (!Array.prototype.findIndex) {
7
+ Object.defineProperty(Array.prototype, "findIndex", {
8
+ value: function (predicate) {
9
+ // 1. Let O be ? ToObject(this value).
10
+ if (this == null) {
11
+ throw new TypeError('"this" is null or not defined');
12
+ }
13
+ var o = Object(this);
14
+ // 2. Let len be ? ToLength(? Get(O, "length")).
15
+ var len = o.length >>> 0;
16
+ // 3. If IsCallable(predicate) is false, throw a TypeError exception.
17
+ if (typeof predicate !== "function") {
18
+ throw new TypeError("predicate must be a function");
19
+ }
20
+ // 4. If thisArg was supplied, let T be thisArg; else let T be undefined.
21
+ var thisArg = arguments[1];
22
+ // 5. Let k be 0.
23
+ var k = 0;
24
+ // 6. Repeat, while k < len
25
+ while (k < len) {
26
+ // a. Let Pk be ! ToString(k).
27
+ // b. Let kValue be ? Get(O, Pk).
28
+ // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)).
29
+ // d. If testResult is true, return k.
30
+ var kValue = o[k];
31
+ if (predicate.call(thisArg, kValue, k, o)) {
32
+ return k;
33
+ }
34
+ // e. Increase k by 1.
35
+ k++;
36
+ }
37
+ // 7. Return -1.
38
+ return -1;
39
+ },
40
+ configurable: true,
41
+ writable: true
42
+ });
43
+ }
44
+ if (!Object.entries) {
45
+ Object.entries = function (obj) {
46
+ var ownProps = Object.keys(obj), i = ownProps.length, resArray = new Array(i); // preallocate the Array
47
+ while (i--)
48
+ resArray[i] = [ownProps[i], obj[ownProps[i]]];
49
+ return resArray;
50
+ };
51
+ }
52
+ var aCandidateControls = [];
53
+ function isEmptyObject(obj) {
54
+ return Object.entries(obj).length === 0 && obj.constructor === Object;
55
+ }
56
+ function getControlAllProperties(oControl) {
57
+ if (!oControl ||
58
+ !oControl.getMetadata ||
59
+ !oControl.getMetadata() ||
60
+ !oControl.getMetadata().getAllProperties) {
61
+ return null;
62
+ }
63
+ return oControl.getMetadata().getAllProperties();
64
+ }
65
+ function getControlAllAggregations(oControl) {
66
+ if (!oControl ||
67
+ !oControl.getMetadata ||
68
+ !oControl.getMetadata() ||
69
+ !oControl.getMetadata().getAllAggregations) {
70
+ return null;
71
+ }
72
+ return oControl.getMetadata().getAllAggregations();
73
+ }
74
+ function getControlAllAssociations(oControl) {
75
+ if (!oControl ||
76
+ !oControl.getMetadata ||
77
+ !oControl.getMetadata() ||
78
+ !oControl.getMetadata().getAllAssociations) {
79
+ return null;
80
+ }
81
+ return oControl.getMetadata().getAllAssociations();
82
+ }
83
+ function getControlProperty(oControl, sPropKey) {
84
+ if (!oControl ||
85
+ !oControl.getProperty ||
86
+ !oControl.getMetadata() ||
87
+ !oControl.getMetadata().getProperty ||
88
+ !oControl.getMetadata().getProperty(sPropKey) ||
89
+ !oControl.getMetadata().getProperty(sPropKey).get) {
90
+ return null;
91
+ }
92
+ return oControl.getMetadata().getProperty(sPropKey).get(oControl);
93
+ }
94
+ function getAggregationProperty(oControl, sPropKey) {
95
+ if (!oControl ||
96
+ !oControl.getAggregation ||
97
+ !oControl.getMetadata() ||
98
+ !oControl.getMetadata().getAggregation ||
99
+ !oControl.getMetadata().getAggregation(sPropKey) ||
100
+ !oControl.getMetadata().getAggregation(sPropKey).get) {
101
+ return null;
102
+ }
103
+ return oControl.getMetadata().getAggregation(sPropKey).get(oControl);
104
+ }
105
+ function getAssociationProperty(oControl, sPropKey) {
106
+ if (!oControl ||
107
+ !oControl.getAssociation ||
108
+ !oControl.getMetadata() ||
109
+ !oControl.getMetadata().getAssociation ||
110
+ !oControl.getMetadata().getAssociation(sPropKey) ||
111
+ !oControl.getMetadata().getAssociation(sPropKey).get) {
112
+ return null;
113
+ }
114
+ return oControl.getMetadata().getAssociation(sPropKey).get(oControl);
115
+ }
116
+ function getControlBindingContextPaths(oControl) {
117
+ if (!oControl)
118
+ return null;
119
+ var bindingContexts = jQuery.extend({}, oControl.oPropagatedProperties && oControl.oPropagatedProperties.oBindingContexts, oControl.oBindingContexts, oControl.mElementBindingContexts);
120
+ // reduce object to non-empty contexts
121
+ bindingContexts = Object.keys(bindingContexts).reduce(function (finalContexts, key) {
122
+ if (bindingContexts[key]) {
123
+ finalContexts[key] = bindingContexts[key];
124
+ }
125
+ return finalContexts;
126
+ }, {});
127
+ if (bindingContexts && Object.keys(bindingContexts).length > 0) {
128
+ var aKeys = Object.keys(bindingContexts);
129
+ var aBindingContextPaths = [];
130
+ for (let index = 0; index < aKeys.length; index++) {
131
+ if (aKeys[index] === "$cmd")
132
+ continue;
133
+ const oBindingContext = bindingContexts[aKeys[index]];
134
+ if (oBindingContext &&
135
+ oBindingContext.getPath &&
136
+ oBindingContext.getPath())
137
+ aBindingContextPaths.push(oBindingContext.getPath());
138
+ }
139
+ return aBindingContextPaths;
140
+ }
141
+ return null;
142
+ }
143
+ function isControlInViewName(oControl, sViewName) {
144
+ try {
145
+ // eslint-disable-next-line no-undef
146
+ if (!oControl || !sap.ui.core.Element || !sap.ui.core.mvc.View) {
147
+ return false;
148
+ }
149
+ if (oControl.getViewName &&
150
+ // eslint-disable-next-line no-undef
151
+ oControl instanceof sap.ui.core.mvc.View &&
152
+ wildCardAndNormalCompare(sViewName, oControl.getViewName())) {
153
+ return true;
154
+ }
155
+ else {
156
+ return isControlInViewName(oControl.getParent(), sViewName);
157
+ }
158
+ }
159
+ catch (error) {
160
+ return false;
161
+ }
162
+ }
163
+ function isControlInViewId(oControl, sViewId) {
164
+ try {
165
+ // eslint-disable-next-line no-undef
166
+ if (!oControl || !sap.ui.core.Element || !sap.ui.core.mvc.View) {
167
+ return false;
168
+ }
169
+ if (oControl.getId &&
170
+ wildCardAndNormalCompare(sViewId, oControl.getId()) &&
171
+ // eslint-disable-next-line no-undef
172
+ oControl instanceof sap.ui.core.mvc.View) {
173
+ return true;
174
+ }
175
+ else {
176
+ return isControlInViewId(oControl.getParent(), sViewId);
177
+ }
178
+ }
179
+ catch (error) {
180
+ return false;
181
+ }
182
+ }
183
+ function convertToString(value) {
184
+ if (value === undefined || value === null) {
185
+ return null;
186
+ }
187
+ return value.toString();
188
+ }
189
+ function isInt(value) {
190
+ return !isNaN(value) && (function (x) { return (x | 0) === x; })(parseFloat(value));
191
+ }
192
+ function retrieveNodesFromBody(index, opt_parentElement) {
193
+ // Logic to retrieve the element for chaining
194
+ if (index) {
195
+ if (!isInt(index) && index.nodeType) {
196
+ return index.querySelectorAll("*");
197
+ }
198
+ else if (opt_parentElement && opt_parentElement.nodeType) {
199
+ return opt_parentElement.querySelectorAll("*");
200
+ }
201
+ }
202
+ var sapBody = document.getElementsByClassName("sapUiBody");
203
+ if (!sapBody || !sapBody[0]) {
204
+ throw new Error("No body found");
205
+ }
206
+ return sapBody[0].querySelectorAll("*");
207
+ }
208
+ function retrieveNodeName(oNode) {
209
+ if (oNode) {
210
+ return oNode.nodeName;
211
+ }
212
+ return null;
213
+ }
214
+ function retrieveNodeAttributes(oNode) {
215
+ var domProperties = [];
216
+ if (oNode.attributes && oNode.attributes.length > 0) {
217
+ for (let index = 0; index < oNode.attributes.length; index++) {
218
+ var oElm = oNode.attributes[index];
219
+ if (oElm.nodeName && oElm.nodeValue) {
220
+ var nodeNm = oElm.nodeName;
221
+ var nodeValue = oElm.nodeValue;
222
+ var nodeVN = {};
223
+ nodeVN[nodeNm] = nodeValue;
224
+ domProperties.push(nodeVN);
225
+ }
226
+ }
227
+ }
228
+ return domProperties;
229
+ }
230
+ function retrieveCompositeBindings(oBinding, aBindingInfos) {
231
+ if (!oBinding)
232
+ return;
233
+ if (oBinding.getBindings && oBinding.getBindings() && aBindingInfos) {
234
+ var aBindings = oBinding.getBindings();
235
+ for (let i = 0; i < aBindings.length; i++) {
236
+ for (let j = 0; j < aBindingInfos.length; j++) {
237
+ try {
238
+ if (!aBindings[i].getBindings &&
239
+ aBindingInfos[j].path === aBindings[i].getPath() &&
240
+ aBindings[i].getValue) {
241
+ aBindingInfos[j].value = aBindings[i].getValue();
242
+ }
243
+ else if (aBindings[i].getBindings) {
244
+ retrieveCompositeBindings(aBindings[i], aBindingInfos);
245
+ }
246
+ // eslint-disable-next-line no-empty
247
+ }
248
+ catch (error) {
249
+ }
250
+ }
251
+ }
252
+ }
253
+ else if (!oBinding.getBindings && aBindingInfos) {
254
+ for (let j = 0; j < aBindingInfos.length; j++) {
255
+ try {
256
+ if (aBindingInfos[j].path === oBinding.getPath() &&
257
+ oBinding.getValue) {
258
+ aBindingInfos[j].value = oBinding.getValue();
259
+ }
260
+ // eslint-disable-next-line no-empty
261
+ }
262
+ catch (error) {
263
+ }
264
+ }
265
+ }
266
+ }
267
+ function retrieverBindingPaths(oControl, sPropKey) {
268
+ var aBindingInfos = [];
269
+ var aBindingInfoParts = oControl.getBindingInfo(sPropKey).parts;
270
+ try {
271
+ if (aBindingInfoParts && aBindingInfoParts.length > 0) {
272
+ for (let i = 0; i < aBindingInfoParts.length; i++) {
273
+ var sModel = "";
274
+ if (!aBindingInfoParts[i].path)
275
+ continue;
276
+ if (aBindingInfoParts[i].model)
277
+ sModel = aBindingInfoParts[i].model;
278
+ aBindingInfos.push({
279
+ model: sModel,
280
+ path: aBindingInfoParts[i].path,
281
+ value: ""
282
+ });
283
+ }
284
+ }
285
+ else {
286
+ var sBindingDataStr = oControl.getBindingInfo(sPropKey).path;
287
+ var sBindingDataModelStr = oControl.getBindingInfo(sPropKey).model;
288
+ if (sBindingDataStr) {
289
+ aBindingInfos.push({
290
+ model: sBindingDataModelStr,
291
+ path: sBindingDataStr,
292
+ value: ""
293
+ });
294
+ }
295
+ }
296
+ // Get values
297
+ if (oControl.getBinding && oControl.getBinding(sPropKey)) {
298
+ var oBinding = oControl.getBinding(sPropKey);
299
+ retrieveCompositeBindings(oBinding, aBindingInfos);
300
+ }
301
+ }
302
+ catch (error) {
303
+ //Continue
304
+ }
305
+ return aBindingInfos;
306
+ }
307
+ function getBindDataForAggregation(oControl, sPropKey) {
308
+ var aAggregation = getControlAllAggregations(oControl);
309
+ var aBindingInfos = [];
310
+ try {
311
+ if (aAggregation.hasOwnProperty(sPropKey)) {
312
+ if (!oControl || !sPropKey
313
+ || !aAggregation.hasOwnProperty(sPropKey)
314
+ || !oControl.getBindingInfo
315
+ || !oControl.getBindingInfo(sPropKey))
316
+ return aBindingInfos;
317
+ aBindingInfos = retrieverBindingPaths(oControl, sPropKey);
318
+ }
319
+ }
320
+ catch (e) {
321
+ // Do nothing
322
+ }
323
+ return aBindingInfos;
324
+ }
325
+ function getBindDataForAssociation(oControl, sPropKey) {
326
+ var aAssociation = getControlAllAssociations(oControl);
327
+ var aBindingInfos = [];
328
+ try {
329
+ if (aAssociation.hasOwnProperty(sPropKey)) {
330
+ if (!oControl || !sPropKey
331
+ || !aAssociation.hasOwnProperty(sPropKey)
332
+ || !oControl.getBindingInfo
333
+ || !oControl.getBindingInfo(sPropKey))
334
+ return aBindingInfos;
335
+ aBindingInfos = retrieverBindingPaths(oControl, sPropKey);
336
+ }
337
+ }
338
+ catch (e) {
339
+ // Do nothing
340
+ }
341
+ return aBindingInfos;
342
+ }
343
+ function getBindDataForProperty(oControl, sPropKey) {
344
+ var aProperties = getControlAllProperties(oControl);
345
+ var aBindingInfos = [];
346
+ try {
347
+ if (aProperties.hasOwnProperty(sPropKey)) {
348
+ if (!oControl || !sPropKey
349
+ || !aProperties.hasOwnProperty(sPropKey)
350
+ || !oControl.getBindingInfo
351
+ || !oControl.getBindingInfo(sPropKey))
352
+ return aBindingInfos;
353
+ aBindingInfos = retrieverBindingPaths(oControl, sPropKey);
354
+ }
355
+ }
356
+ catch (e) {
357
+ // Do nothing
358
+ }
359
+ return aBindingInfos;
360
+ }
361
+ function retrieveValidUI5ControlsSubElements(nodes) {
362
+ if (!nodes || nodes.length === 0) {
363
+ //console.log('no node html elements found');
364
+ return aCandidateControls;
365
+ }
366
+ Array.prototype.filter.call(nodes, function (node) {
367
+ //console.log("node -->" + node);
368
+ var nodeId = node.getAttribute("id");
369
+ if (!nodeId) {
370
+ var childNod = node.children;
371
+ //console.log("Number of child elements-->"+ childNod.length);
372
+ if (!childNod)
373
+ return false;
374
+ Array.prototype.filter.call(childNod, function (chNode) {
375
+ var chNodeId = chNode.getAttribute("id");
376
+ if (chNodeId) {
377
+ // eslint-disable-next-line no-undef
378
+ var oControl = sap.ui.getCore().byId(chNodeId);
379
+ if (oControl) {
380
+ //console.log("Control pushed-->"+ oControl.getId());
381
+ aCandidateControls.push(oControl);
382
+ }
383
+ else {
384
+ //console.log("Im in else iterate 1");
385
+ retrieveValidUI5ControlsSubElements(chNode.children);
386
+ return false;
387
+ }
388
+ }
389
+ else {
390
+ //console.log("Im in else iterate 2");
391
+ retrieveValidUI5ControlsSubElements(chNode.children);
392
+ return false;
393
+ }
394
+ });
395
+ }
396
+ else {
397
+ // eslint-disable-next-line no-undef
398
+ var oControl = sap.ui.getCore().byId(nodeId);
399
+ if (oControl) {
400
+ //console.log("Control pushed-->" + oControl.getId());
401
+ //console.log("Control pushed-->"+ oControl.getId());
402
+ aCandidateControls.push(oControl);
403
+ }
404
+ else {
405
+ //console.log("Im in else iterate 3 -->" + node.children.length);
406
+ retrieveValidUI5ControlsSubElements(node.children);
407
+ return false;
408
+ }
409
+ }
410
+ return oControl;
411
+ });
412
+ }
413
+ function findSiblingControls(oControl, oParentControl) {
414
+ if (!oControl || !oControl.getId || !oControl.getId())
415
+ return null;
416
+ if (!oParentControl.getId || !oParentControl.getId())
417
+ return null;
418
+ var sParentId = oParentControl.getId();
419
+ var aAllSiblingNodes = document.getElementById(sParentId).children;
420
+ aCandidateControls = [];
421
+ retrieveValidUI5ControlsSubElements(aAllSiblingNodes);
422
+ var aValidControls = aCandidateControls;
423
+ if (!aValidControls || aValidControls.length === 0)
424
+ return null;
425
+ var oControlIndx = aValidControls.findIndex(function (element) {
426
+ return element.getId() === oControl.getId();
427
+ });
428
+ if (oControlIndx === -1) {
429
+ throw new Error("Something is very wrong with prev/next control finder");
430
+ }
431
+ else {
432
+ aValidControls.splice(oControlIndx, 1);
433
+ return aValidControls;
434
+ }
435
+ }
436
+ function findPrevNextControl(oControl, oParentControl, bIsNext) {
437
+ if (!oControl || !oControl.getId || !oControl.getId())
438
+ return null;
439
+ if (!oParentControl.getId || !oParentControl.getId())
440
+ return null;
441
+ var sParentId = oParentControl.getId();
442
+ var aAllSiblingNodes = document.getElementById(sParentId).children;
443
+ aCandidateControls = [];
444
+ retrieveValidUI5ControlsSubElements(aAllSiblingNodes);
445
+ var aValidControls = aCandidateControls;
446
+ if (!aValidControls || aValidControls.length === 0)
447
+ return null;
448
+ var oControlIndx = aValidControls.findIndex(function (element) {
449
+ return element.getId() === oControl.getId();
450
+ });
451
+ if (oControlIndx === -1) {
452
+ throw new Error("Something is very wrong with prev/next control finder");
453
+ }
454
+ if (bIsNext && ((aValidControls.length - 1) > oControlIndx)) {
455
+ return aValidControls[oControlIndx + 1];
456
+ }
457
+ else if (!bIsNext && (oControlIndx > 0)) {
458
+ return aValidControls[oControlIndx - 1];
459
+ }
460
+ return null;
461
+ }
462
+ function extractBindingPathAndModelProperty(pathObj) {
463
+ var binding = {
464
+ model: "",
465
+ path: ""
466
+ };
467
+ if (!pathObj || !pathObj.path)
468
+ return binding;
469
+ if (pathObj.path.indexOf(">") !== -1) {
470
+ binding.model = pathObj.path.substring(0, pathObj.path.indexOf(">"));
471
+ binding.path = pathObj.path.substring(pathObj.path.indexOf(">") + 1, pathObj.path.length);
472
+ }
473
+ else {
474
+ binding.path = pathObj.path;
475
+ }
476
+ return binding;
477
+ }
478
+ function compareBindingPathAndModelProperty(key, locatorProperty, oControl) {
479
+ var extrPath = extractBindingPathAndModelProperty(locatorProperty);
480
+ var aBindindInfo = getBindDataForProperty(oControl, key);
481
+ if (aBindindInfo.length === 0) {
482
+ aBindindInfo = getBindDataForAggregation(oControl, key);
483
+ }
484
+ if (aBindindInfo.length === 0) {
485
+ aBindindInfo = getBindDataForAssociation(oControl, key);
486
+ }
487
+ if ((!extrPath.path && aBindindInfo.length > 0) ||
488
+ (!extrPath.path && aBindindInfo.length === 0)) {
489
+ return true;
490
+ }
491
+ else if (extrPath.path && aBindindInfo.length === 0) {
492
+ return false;
493
+ }
494
+ var aCandidatePath = [];
495
+ for (let index = 0; index < aBindindInfo.length; index++) {
496
+ const bindindInfo = aBindindInfo[index];
497
+ if ((extrPath.model && bindindInfo.model)) {
498
+ if ((extrPath.path && (bindindInfo.path !== null && bindindInfo.path !== undefined))
499
+ && wildCardAndNormalCompare(extrPath.model, bindindInfo.model)) {
500
+ //if(convertToString(bindindInfo.path) === convertToString(extrPath.path))
501
+ if (wildCardAndNormalCompare(extrPath.path, bindindInfo.path))
502
+ aCandidatePath.push(bindindInfo.path);
503
+ }
504
+ }
505
+ else {
506
+ if (extrPath.path && (bindindInfo.path !== null && bindindInfo.path !== undefined)) {
507
+ //if(convertToString(bindindInfo.path) === convertToString(extrPath.path))
508
+ if (wildCardAndNormalCompare(extrPath.path, bindindInfo.path)) {
509
+ aCandidatePath.push(bindindInfo.path);
510
+ }
511
+ }
512
+ }
513
+ }
514
+ return aCandidatePath.length > 0;
515
+ }
516
+ function wildCardAndNormalCompare(sWild, sValue) {
517
+ if ((sValue === undefined || sValue === null)
518
+ && (sWild === undefined || sWild === null))
519
+ return true;
520
+ else {
521
+ if (sValue === undefined || sValue === null)
522
+ sValue = "";
523
+ if (sWild === undefined || sWild === null)
524
+ sWild = "";
525
+ }
526
+ if (!sWild.trim() || sWild.indexOf("*") === -1) {
527
+ return (convertToString(sWild) === convertToString(sValue));
528
+ }
529
+ var aWilds = convertToString(sWild).trim().split("*");
530
+ sValue = convertToString(sValue);
531
+ for (var i = 0; i < aWilds.length; i++) {
532
+ if (!aWilds[i])
533
+ continue;
534
+ if (sValue.indexOf(aWilds[i]) === -1)
535
+ return false;
536
+ }
537
+ return true;
538
+ }
539
+ function compareAttributeToElementAttributes(sKey, sValue, aNodeAttributes) {
540
+ if (!sKey || !sValue || !aNodeAttributes)
541
+ return false;
542
+ for (let index = 0; index < aNodeAttributes.length; index++) {
543
+ var oElm = aNodeAttributes[index];
544
+ if (oElm) {
545
+ const aAttrKey = Object.keys(oElm);
546
+ const aAttrValue = Object.values(oElm);
547
+ if (aAttrKey && aAttrValue &&
548
+ aAttrKey.length > 0 && aAttrValue.length > 0 &&
549
+ aAttrValue[0] !== undefined && aAttrValue[0] !== null) {
550
+ if (aAttrKey[0] === sKey) {
551
+ var val = aAttrValue[0].toString();
552
+ if (wildCardAndNormalCompare(sValue, val)) {
553
+ return true;
554
+ }
555
+ }
556
+ }
557
+ }
558
+ }
559
+ return false;
560
+ }
561
+ function compareToDomProperties(oNode, mProperties) {
562
+ var bPass = true;
563
+ if (!mProperties || !oNode) {
564
+ console.log("No dom properties or no node to compare");
565
+ return bPass;
566
+ }
567
+ var aNodeAttributes = retrieveNodeAttributes(oNode);
568
+ for (var key in mProperties) {
569
+ var value = mProperties[key];
570
+ if (value) {
571
+ if (key === "nodeName") {
572
+ const nodeName = retrieveNodeName(oNode);
573
+ bPass = bPass && (nodeName.toLowerCase() === value.toLowerCase());
574
+ }
575
+ else {
576
+ if (Array.isArray(value)) {
577
+ value.map(function (attrValue) {
578
+ bPass = bPass && compareAttributeToElementAttributes(key, attrValue, aNodeAttributes);
579
+ });
580
+ }
581
+ else {
582
+ bPass = bPass && compareAttributeToElementAttributes(key, value, aNodeAttributes);
583
+ }
584
+ }
585
+ }
586
+ else {
587
+ return false;
588
+ }
589
+ }
590
+ return bPass;
591
+ }
592
+ function compareToProperties(mProperties, oControl) {
593
+ var bPass = true;
594
+ if (!mProperties) {
595
+ console.log("No properties to compare");
596
+ return bPass;
597
+ }
598
+ for (var key in mProperties) {
599
+ var value = mProperties[key];
600
+ if (key !== "domProperties" &&
601
+ key !== "metadata" &&
602
+ key !== "ancestorProperties" &&
603
+ key !== "descendantProperties" &&
604
+ key !== "siblingProperties") {
605
+ if (value && Array.isArray(value)) {
606
+ let bIsStringVal = false;
607
+ if (value.length > 0) {
608
+ //Check type
609
+ const stVal = value[0];
610
+ if (typeof stVal === "string") {
611
+ bIsStringVal = true;
612
+ }
613
+ }
614
+ value.map(function (valData) {
615
+ if (bIsStringVal) {
616
+ bPass = bPass && compareArrayStrElements(key, valData, oControl);
617
+ }
618
+ else {
619
+ bPass = bPass && compareBindingPathAndModelProperty(key, valData, oControl);
620
+ }
621
+ });
622
+ }
623
+ else if (value && typeof value === "object") {
624
+ bPass = bPass && compareBindingPathAndModelProperty(key, value, oControl);
625
+ }
626
+ else if (key === "bindingContextPath") {
627
+ var aPaths = getControlBindingContextPaths(oControl);
628
+ var bFound = false;
629
+ if (aPaths && aPaths.length) {
630
+ for (let index = 0; index < aPaths.length; index++) {
631
+ if (aPaths[index] && value) {
632
+ bFound = wildCardAndNormalCompare(value, aPaths[index]);
633
+ if (bFound) {
634
+ break;
635
+ }
636
+ }
637
+ }
638
+ }
639
+ bPass = bPass && bFound;
640
+ }
641
+ else if (key === "viewName") {
642
+ bPass = bPass && isControlInViewName(oControl, value);
643
+ }
644
+ else if (key === "viewId") {
645
+ bPass = bPass && isControlInViewId(oControl, value);
646
+ }
647
+ else {
648
+ if (key === "id") {
649
+ var bIdProp = compareId(oControl, value);
650
+ bPass = bPass && bIdProp;
651
+ }
652
+ else {
653
+ var bPropVal = compareProperty(oControl, key, value);
654
+ if (!bPropVal)
655
+ bPropVal = compareAggregation(oControl, key, value);
656
+ if (!bPropVal)
657
+ bPropVal = compareAssociation(oControl, key, value);
658
+ bPass = bPass && bPropVal;
659
+ }
660
+ }
661
+ }
662
+ }
663
+ return bPass;
664
+ }
665
+ function compareArrayStrElements(key, elemId, oControl) {
666
+ let bPass = false;
667
+ var aPropValues = [];
668
+ try {
669
+ aPropValues = getAssociationProperty(oControl, key) || [];
670
+ // eslint-disable-next-line no-empty
671
+ }
672
+ catch (error) {
673
+ }
674
+ if (aPropValues.length === 0) {
675
+ try {
676
+ //Try again
677
+ aPropValues = getAggregationProperty(oControl, key) || [];
678
+ // eslint-disable-next-line no-empty
679
+ }
680
+ catch (error) {
681
+ }
682
+ }
683
+ if (aPropValues.length === 0) {
684
+ try {
685
+ aPropValues = getControlProperty(oControl, key) || [];
686
+ }
687
+ catch (error) {
688
+ // Continue
689
+ }
690
+ }
691
+ if ((aPropValues.length === 0 && elemId) ||
692
+ (aPropValues.length > 0 && !elemId)) {
693
+ return bPass;
694
+ }
695
+ else if (aPropValues.length === 0 && !elemId) {
696
+ return true;
697
+ }
698
+ for (let index = 0; index < aPropValues.length; index++) {
699
+ const elem = aPropValues[index];
700
+ if (elem && elemId) {
701
+ let elemStr = elem;
702
+ if (typeof elem === "object" && elem.getId) {
703
+ elemStr = elem.getId();
704
+ }
705
+ else {
706
+ elemStr = elem;
707
+ }
708
+ const elemLow = elemStr.toLowerCase();
709
+ const elemIdLow = elemId.toLowerCase();
710
+ if (wildCardAndNormalCompare(elemIdLow, elemLow)) {
711
+ bPass = true;
712
+ break;
713
+ }
714
+ }
715
+ }
716
+ return bPass;
717
+ }
718
+ function compareProperty(oControl, key, value) {
719
+ var controlVal = null;
720
+ try {
721
+ controlVal = getControlProperty(oControl, key);
722
+ }
723
+ catch (e) {
724
+ // Property doesnt exist
725
+ }
726
+ if (controlVal !== null && controlVal !== undefined && value !== null && value !== undefined) {
727
+ //return convertToString(controlVal) === convertToString(value);
728
+ return wildCardAndNormalCompare(value, controlVal);
729
+ }
730
+ else if ((controlVal === null || controlVal === undefined) && value) {
731
+ return false;
732
+ }
733
+ }
734
+ function getId(oControl) {
735
+ if (!oControl ||
736
+ !oControl.getId) {
737
+ return null;
738
+ }
739
+ return oControl.getId();
740
+ }
741
+ function compareId(oControl, value) {
742
+ var controlVal = null;
743
+ try {
744
+ controlVal = getId(oControl);
745
+ }
746
+ catch (e) {
747
+ // Property doesnt exist
748
+ }
749
+ if (controlVal !== null && controlVal !== undefined && value) {
750
+ //return convertToString(controlVal) === convertToString(value);
751
+ return wildCardAndNormalCompare(value, controlVal);
752
+ }
753
+ else if ((controlVal === null || controlVal === undefined) && value) {
754
+ return false;
755
+ }
756
+ }
757
+ function compareAggregation(oControl, key, value) {
758
+ var controlVal = null;
759
+ try {
760
+ controlVal = getAggregationProperty(oControl, key);
761
+ }
762
+ catch (e) {
763
+ // Aggregation doesnt exist
764
+ }
765
+ if (controlVal !== null && controlVal !== undefined && value) {
766
+ //return convertToString(controlVal) === convertToString(value);
767
+ return wildCardAndNormalCompare(value, controlVal);
768
+ }
769
+ else if ((controlVal === null || controlVal === undefined) && value) {
770
+ return false;
771
+ }
772
+ }
773
+ function compareAssociation(oControl, key, value) {
774
+ var controlVal = null;
775
+ try {
776
+ controlVal = getAssociationProperty(oControl, key);
777
+ }
778
+ catch (e) {
779
+ // Association doesnt exist
780
+ }
781
+ if (controlVal !== null && controlVal !== undefined && value) {
782
+ //return convertToString(controlVal) === convertToString(value);
783
+ return wildCardAndNormalCompare(value, controlVal);
784
+ }
785
+ else if ((controlVal === null || controlVal === undefined) && value) {
786
+ return false;
787
+ }
788
+ }
789
+ function filterMetadata(elementProperties, oControl) {
790
+ //console.log("Beggining control---->" + controlVal);
791
+ var bPass = true;
792
+ var controlVal = oControl.getMetadata().getName();
793
+ if (!elementProperties)
794
+ return bPass;
795
+ if (!elementProperties.metadata)
796
+ return bPass;
797
+ var metadata = elementProperties.metadata;
798
+ if (!controlVal && metadata) {
799
+ bPass = false;
800
+ return bPass;
801
+ }
802
+ else if (controlVal && metadata) {
803
+ //console.log("Control val---->" + controlVal + " metadata--->"+ metadata);
804
+ bPass = bPass && (controlVal === metadata);
805
+ }
806
+ return bPass;
807
+ }
808
+ function compareToElementProperties(elementProperties, oControl) {
809
+ var bPass = true;
810
+ if ((!elementProperties || isEmptyObject(elementProperties)) && oControl) {
811
+ return bPass;
812
+ }
813
+ else if ((elementProperties && !isEmptyObject(elementProperties)) && !oControl) {
814
+ return false;
815
+ }
816
+ else if ((!elementProperties || isEmptyObject(elementProperties)) && !oControl) {
817
+ return bPass;
818
+ }
819
+ bPass = bPass && filterMetadata(elementProperties, oControl);
820
+ if (!bPass)
821
+ return bPass;
822
+ if (elementProperties && elementProperties.mProperties && typeof elementProperties.mProperties === "object") {
823
+ //if(oControl.getId() === "__box0")
824
+ bPass = bPass && compareToProperties(elementProperties.mProperties, oControl);
825
+ }
826
+ else if (elementProperties && typeof elementProperties === "object"
827
+ && !elementProperties.mProperties) {
828
+ bPass = bPass && compareToProperties(elementProperties, oControl);
829
+ }
830
+ if (elementProperties.domProperties && typeof elementProperties.domProperties === "object") {
831
+ var oNode = convertToDomElement(oControl);
832
+ bPass = bPass && compareToDomProperties(oNode, elementProperties.domProperties);
833
+ }
834
+ if (bPass) {
835
+ var selectObj = elementProperties;
836
+ if (elementProperties.mProperties) {
837
+ selectObj = elementProperties.mProperties;
838
+ }
839
+ if (selectObj.ancestorProperties) {
840
+ bPass = bPass && compareToAncestorProperties(selectObj.ancestorProperties, oControl);
841
+ }
842
+ if (selectObj.descendantProperties) {
843
+ bPass = bPass && compareToDescendantElementProperties(selectObj.descendantProperties, oControl);
844
+ }
845
+ if (selectObj.siblingProperties) {
846
+ var oParentControl = getValidParentControl(oControl);
847
+ bPass = bPass && compareToSiblingElementProperties(selectObj.siblingProperties, oControl, oParentControl);
848
+ }
849
+ if (selectObj.prevSiblingProperties || selectObj.nextSiblingProperties || selectObj.childProperties || selectObj.parentProperties) {
850
+ throw new Error("Nested properties can only be used for ancestorProperties, descendantProperties or siblingProperties.");
851
+ }
852
+ }
853
+ return bPass;
854
+ }
855
+ function compareToPrevElementProperties(elementProperties, oControl, oParentControl) {
856
+ var bPass = true;
857
+ if ((!elementProperties || isEmptyObject(elementProperties)) && oParentControl) {
858
+ return bPass;
859
+ }
860
+ else if ((elementProperties && !isEmptyObject(elementProperties)) && !oParentControl) {
861
+ return false;
862
+ }
863
+ else if ((!elementProperties || isEmptyObject(elementProperties)) && !oParentControl) {
864
+ return bPass;
865
+ }
866
+ var oPrevControl = findPrevNextControl(oControl, oParentControl, false);
867
+ if ((!elementProperties || isEmptyObject(elementProperties)) && oPrevControl) {
868
+ return bPass;
869
+ }
870
+ else if ((elementProperties && !isEmptyObject(elementProperties)) && !oPrevControl) {
871
+ return false;
872
+ }
873
+ else if ((!elementProperties || isEmptyObject(elementProperties)) && !oPrevControl) {
874
+ return bPass;
875
+ }
876
+ /*console.log("Previous Property Control Type -->"
877
+ + oPrevControl.getMetadata().getName()
878
+ + ", Id-->" + oPrevControl.getId());*/
879
+ return compareToElementProperties(elementProperties, oPrevControl);
880
+ }
881
+ function retrieveValidUI5Controls(nodes) {
882
+ var aCandidateValidControls = [];
883
+ if (!nodes || nodes.length === 0) {
884
+ throw new Error("no node html elements found");
885
+ }
886
+ Array.prototype.filter.call(nodes, function (node) {
887
+ var nodeId = node.getAttribute("id");
888
+ if (!nodeId) {
889
+ return false;
890
+ }
891
+ // eslint-disable-next-line no-undef
892
+ var oControl = sap.ui.getCore().byId(nodeId);
893
+ if (oControl) {
894
+ aCandidateValidControls.push(oControl);
895
+ }
896
+ return oControl;
897
+ });
898
+ return aCandidateValidControls;
899
+ }
900
+ function injectDataForProperties(domElement, oControl) {
901
+ // Inject properties
902
+ var aProperties = Object.keys(getControlAllProperties(oControl));
903
+ Array.prototype.filter.call(aProperties, function (key) {
904
+ var controlVal = getControlProperty(oControl, key);
905
+ domElement.setAttribute("data-" + key, controlVal);
906
+ return domElement;
907
+ });
908
+ // Inject aggregations
909
+ var aAggregation = Object.keys(getControlAllAggregations(oControl));
910
+ Array.prototype.filter.call(aAggregation, function (key) {
911
+ var controlVal = getAggregationProperty(oControl, key);
912
+ domElement.setAttribute("data-" + key, controlVal);
913
+ return domElement;
914
+ });
915
+ // Inject associations
916
+ var aAssociation = Object.keys(getControlAllAssociations(oControl));
917
+ Array.prototype.filter.call(aAssociation, function (key) {
918
+ var controlVal = getAssociationProperty(oControl, key);
919
+ domElement.setAttribute("data-" + key, controlVal);
920
+ return domElement;
921
+ });
922
+ //Inject bindingContextPath
923
+ var aBindingPathValues = getControlBindingContextPaths(oControl);
924
+ if (aBindingPathValues && aBindingPathValues.length > 0) {
925
+ domElement.setAttribute("data-bindingContextPath-size", aBindingPathValues.length);
926
+ for (let index = 0; index < aBindingPathValues.length; index++) {
927
+ const sBindingPathValue = aBindingPathValues[index];
928
+ domElement.setAttribute("data-bindingContextPath" + index, sBindingPathValue);
929
+ }
930
+ }
931
+ else {
932
+ domElement.setAttribute("data-bindingContextPath-size", 0);
933
+ }
934
+ //Inject BindingPath for property
935
+ Array.prototype.filter.call(aProperties, function (key) {
936
+ var oBindingDataStr = getBindingInfoDataString(oControl, key);
937
+ if (oBindingDataStr !== null && oBindingDataStr !== undefined) {
938
+ var sBindingDataStr = oBindingDataStr.toString();
939
+ if (sBindingDataStr && sBindingDataStr.trim() !== "") {
940
+ domElement.setAttribute("data-" + key + "-path", sBindingDataStr);
941
+ }
942
+ }
943
+ else {
944
+ return false;
945
+ }
946
+ return domElement;
947
+ });
948
+ //Inject BindingPath for aggregation
949
+ Array.prototype.filter.call(aAggregation, function (key) {
950
+ var oBindingDataStr = getBindingInfoDataAggregationString(oControl, key);
951
+ if (oBindingDataStr !== null && oBindingDataStr !== undefined) {
952
+ var sBindingDataStr = oBindingDataStr.toString();
953
+ if (sBindingDataStr && sBindingDataStr.trim() !== "") {
954
+ /*console.log("control-->"+ oControl.getId()
955
+ + ", key-->" + key
956
+ +", binding path-->" + sBindingDataStr);*/
957
+ domElement.setAttribute("data-" + key + "-path", sBindingDataStr);
958
+ }
959
+ }
960
+ else {
961
+ return false;
962
+ }
963
+ return domElement;
964
+ });
965
+ //Inject BindingPath for associations
966
+ Array.prototype.filter.call(aAssociation, function (key) {
967
+ var oBindingDataStr = getBindingInfoDataAssociationString(oControl, key);
968
+ if (oBindingDataStr !== null && oBindingDataStr !== undefined) {
969
+ var sBindingDataStr = oBindingDataStr.toString();
970
+ if (sBindingDataStr && sBindingDataStr.trim() !== "") {
971
+ /*console.log("control-->"+ oControl.getId()
972
+ + ", key-->" + key
973
+ +", binding path-->" + sBindingDataStr);*/
974
+ domElement.setAttribute("data-" + key + "-path", sBindingDataStr);
975
+ }
976
+ }
977
+ else {
978
+ return false;
979
+ }
980
+ return domElement;
981
+ });
982
+ }
983
+ function getBindingInfoDataString(oControl, key) {
984
+ var aBindingInfos = [];
985
+ try {
986
+ if (!oControl || !key
987
+ || !oControl.getBindingInfo
988
+ || !oControl.getBindingInfo(key))
989
+ return aBindingInfos;
990
+ var aBindingInfoParts = oControl.getBindingInfo(key).parts;
991
+ if (aBindingInfoParts && aBindingInfoParts.length > 0) {
992
+ for (var i = 0; i < aBindingInfoParts.length; i++) {
993
+ if (!aBindingInfoParts[i].path)
994
+ continue;
995
+ var sJoin = "";
996
+ if (!aBindingInfoParts[i].model)
997
+ sJoin = aBindingInfoParts[i].path;
998
+ else
999
+ sJoin = aBindingInfoParts[i].model + ">" + aBindingInfoParts[i].path;
1000
+ aBindingInfos.push(sJoin);
1001
+ }
1002
+ }
1003
+ else {
1004
+ sJoin = oControl.getBindingInfo(key).path;
1005
+ aBindingInfos.push(sJoin);
1006
+ }
1007
+ }
1008
+ catch (e) {
1009
+ // Just ignore and move forward
1010
+ }
1011
+ if (aBindingInfos.length > 0) {
1012
+ return aBindingInfos.join();
1013
+ }
1014
+ else {
1015
+ return null;
1016
+ }
1017
+ }
1018
+ function getBindingInfoDataAggregationString(oControl, key) {
1019
+ var aBindingInfos = [];
1020
+ try {
1021
+ if (!oControl || !key
1022
+ || !oControl.getBindingInfo
1023
+ || !oControl.getBindingInfo(key)
1024
+ || !oControl.getBindingInfo(key))
1025
+ return aBindingInfos;
1026
+ var aBindingInfoParts = oControl.getBindingInfo(key).parts;
1027
+ if (aBindingInfoParts && aBindingInfoParts.length > 0) {
1028
+ for (var i = 0; i < aBindingInfoParts.length; i++) {
1029
+ if (!aBindingInfoParts[i].path)
1030
+ continue;
1031
+ var sJoin = "";
1032
+ if (!aBindingInfoParts[i].model)
1033
+ sJoin = aBindingInfoParts[i].path;
1034
+ else
1035
+ sJoin = aBindingInfoParts[i].model + ">" + aBindingInfoParts[i].path;
1036
+ aBindingInfos.push(sJoin);
1037
+ }
1038
+ }
1039
+ else {
1040
+ sJoin = oControl.getBindingInfo(key).path;
1041
+ aBindingInfos.push(sJoin);
1042
+ }
1043
+ }
1044
+ catch (e) {
1045
+ // Just ignore and move forward
1046
+ }
1047
+ if (aBindingInfos.length > 0) {
1048
+ return aBindingInfos.join();
1049
+ }
1050
+ else {
1051
+ return null;
1052
+ }
1053
+ }
1054
+ function getBindingInfoDataAssociationString(oControl, key) {
1055
+ var aBindingInfos = [];
1056
+ try {
1057
+ if (!oControl || !key
1058
+ || !oControl.getBindingInfo
1059
+ || !oControl.getBindingInfo(key)
1060
+ || !oControl.getBindingInfo(key))
1061
+ return aBindingInfos;
1062
+ var aBindingInfoParts = oControl.getBindingInfo(key).parts;
1063
+ if (aBindingInfoParts && aBindingInfoParts.length > 0) {
1064
+ for (var i = 0; i < aBindingInfoParts.length; i++) {
1065
+ if (!aBindingInfoParts[i].path)
1066
+ continue;
1067
+ var sJoin = "";
1068
+ if (!aBindingInfoParts[i].model)
1069
+ sJoin = aBindingInfoParts[i].path;
1070
+ else
1071
+ sJoin = aBindingInfoParts[i].model + ">" + aBindingInfoParts[i].path;
1072
+ aBindingInfos.push(sJoin);
1073
+ }
1074
+ }
1075
+ else {
1076
+ sJoin = oControl.getBindingInfo(key).path;
1077
+ aBindingInfos.push(sJoin);
1078
+ }
1079
+ }
1080
+ catch (e) {
1081
+ // Just ignore and move forward
1082
+ }
1083
+ if (aBindingInfos.length > 0) {
1084
+ return aBindingInfos.join();
1085
+ }
1086
+ else {
1087
+ return null;
1088
+ }
1089
+ }
1090
+ function convertToDomElement(oControl) {
1091
+ if (!oControl || !oControl.getId || !oControl.getId()) {
1092
+ return null;
1093
+ }
1094
+ var domElem = document.getElementById(oControl.getId());
1095
+ if (domElem) {
1096
+ return domElem;
1097
+ }
1098
+ return null;
1099
+ }
1100
+ function convertToDomElements(aControls) {
1101
+ var aFoundNodes = [];
1102
+ Array.prototype.filter.call(aControls, function (oControl) {
1103
+ if (!oControl || !oControl.getId || !oControl.getId()) {
1104
+ return false;
1105
+ }
1106
+ var domElem = document.getElementById(oControl.getId());
1107
+ if (domElem) {
1108
+ injectDataForProperties(domElem, oControl);
1109
+ aFoundNodes.push(domElem);
1110
+ }
1111
+ return domElem;
1112
+ });
1113
+ return aFoundNodes;
1114
+ }
1115
+ function compareToNextElementProperties(elementProperties, oControl, oParentControl) {
1116
+ var bPass = true;
1117
+ if ((!elementProperties || isEmptyObject(elementProperties)) && oParentControl) {
1118
+ return bPass;
1119
+ }
1120
+ else if ((elementProperties && !isEmptyObject(elementProperties)) && !oParentControl) {
1121
+ return false;
1122
+ }
1123
+ else if ((!elementProperties || isEmptyObject(elementProperties)) && !oParentControl) {
1124
+ return bPass;
1125
+ }
1126
+ var oNextControl = findPrevNextControl(oControl, oParentControl, true);
1127
+ if ((!elementProperties || isEmptyObject(elementProperties)) && oNextControl) {
1128
+ return bPass;
1129
+ }
1130
+ else if ((elementProperties && !isEmptyObject(elementProperties)) && !oNextControl) {
1131
+ return false;
1132
+ }
1133
+ else if ((!elementProperties || isEmptyObject(elementProperties)) && !oNextControl) {
1134
+ return bPass;
1135
+ }
1136
+ /*console.log("Next Property Control Type -->"
1137
+ + oNextControl.getMetadata().getName()
1138
+ + ", Id-->" + oNextControl.getId()
1139
+ + ", bPass-->"+ bPass);*/
1140
+ return compareToElementProperties(elementProperties, oNextControl);
1141
+ }
1142
+ function compareToDescendantElementProperties(elementProperties, oControl) {
1143
+ var bPass = true;
1144
+ if ((!elementProperties || isEmptyObject(elementProperties)) && oControl) {
1145
+ return bPass;
1146
+ }
1147
+ else if ((elementProperties && !isEmptyObject(elementProperties)) && !oControl) {
1148
+ return false;
1149
+ }
1150
+ else if ((!elementProperties || isEmptyObject(elementProperties)) && !oControl) {
1151
+ return bPass;
1152
+ }
1153
+ var aChildrenControls = [];
1154
+ var aAllChildrenNodes = document.getElementById(oControl.getId()).children;
1155
+ aCandidateControls = [];
1156
+ retrieveValidUI5ControlsSubElements(aAllChildrenNodes);
1157
+ var aValidControls = aCandidateControls;
1158
+ if ((elementProperties || !isEmptyObject(elementProperties))
1159
+ && (!aValidControls || aValidControls.length === 0)) {
1160
+ return false;
1161
+ }
1162
+ else if ((!elementProperties || isEmptyObject(elementProperties))
1163
+ && (aValidControls && aValidControls.length > 0)) {
1164
+ return bPass;
1165
+ }
1166
+ else if ((!elementProperties || isEmptyObject(elementProperties))
1167
+ && (!aValidControls || aValidControls.length === 0)) {
1168
+ return bPass;
1169
+ }
1170
+ Array.prototype.filter.call(aValidControls, function (oChildControl) {
1171
+ var bIsEqual = compareToElementProperties(elementProperties, oChildControl);
1172
+ if (bIsEqual) {
1173
+ aChildrenControls.push(oChildControl);
1174
+ }
1175
+ return bIsEqual;
1176
+ });
1177
+ if (aChildrenControls && aChildrenControls.length > 0) {
1178
+ return true;
1179
+ }
1180
+ else {
1181
+ if (!aValidControls)
1182
+ return false;
1183
+ for (let index = 0; index < aValidControls.length; index++) {
1184
+ const childControl = aValidControls[index];
1185
+ if (compareToDescendantElementProperties(elementProperties, childControl)) {
1186
+ return true;
1187
+ }
1188
+ }
1189
+ return false;
1190
+ }
1191
+ }
1192
+ function compareToChildElementProperties(elementProperties, oControl) {
1193
+ var bPass = true;
1194
+ if ((!elementProperties || isEmptyObject(elementProperties)) && oControl) {
1195
+ return bPass;
1196
+ }
1197
+ else if ((elementProperties && !isEmptyObject(elementProperties)) && !oControl) {
1198
+ return false;
1199
+ }
1200
+ else if ((!elementProperties || isEmptyObject(elementProperties)) && !oControl) {
1201
+ return bPass;
1202
+ }
1203
+ var aChildrenControls = [];
1204
+ var aAllChildrenNodes = document.getElementById(oControl.getId()).children;
1205
+ aCandidateControls = [];
1206
+ retrieveValidUI5ControlsSubElements(aAllChildrenNodes);
1207
+ var aValidControls = aCandidateControls;
1208
+ if ((elementProperties || !isEmptyObject(elementProperties))
1209
+ && (!aValidControls || aValidControls.length === 0)) {
1210
+ return false;
1211
+ }
1212
+ else if ((!elementProperties || isEmptyObject(elementProperties))
1213
+ && (aValidControls && aValidControls.length > 0)) {
1214
+ return bPass;
1215
+ }
1216
+ else if ((!elementProperties || isEmptyObject(elementProperties))
1217
+ && (!aValidControls || aValidControls.length === 0)) {
1218
+ return bPass;
1219
+ }
1220
+ Array.prototype.filter.call(aValidControls, function (oChildControl) {
1221
+ var bIsEqual = compareToElementProperties(elementProperties, oChildControl);
1222
+ if (bIsEqual) {
1223
+ aChildrenControls.push(oChildControl);
1224
+ }
1225
+ return bIsEqual;
1226
+ });
1227
+ if (aChildrenControls && aChildrenControls.length > 0) {
1228
+ /*console.log("Child Property Control Type -->"
1229
+ + aChildrenControls[0].getMetadata().getName()
1230
+ + ", Id-->" + aChildrenControls[0].getId());*/
1231
+ }
1232
+ return aChildrenControls && aChildrenControls.length > 0;
1233
+ }
1234
+ function compareToSiblingElementProperties(elementProperties, oControl, oParentControl) {
1235
+ var bPass = true;
1236
+ if ((!elementProperties || isEmptyObject(elementProperties)) && oParentControl) {
1237
+ return bPass;
1238
+ }
1239
+ else if ((elementProperties && !isEmptyObject(elementProperties)) && !oParentControl) {
1240
+ return false;
1241
+ }
1242
+ else if ((!elementProperties || isEmptyObject(elementProperties)) && !oParentControl) {
1243
+ return bPass;
1244
+ }
1245
+ var aSiblingControls = findSiblingControls(oControl, oParentControl);
1246
+ if ((elementProperties || !isEmptyObject(elementProperties))
1247
+ && (!aSiblingControls || aSiblingControls.length === 0)) {
1248
+ return false;
1249
+ }
1250
+ else if ((!elementProperties || isEmptyObject(elementProperties))
1251
+ && (aSiblingControls && aSiblingControls.length > 0)) {
1252
+ return bPass;
1253
+ }
1254
+ else if ((!elementProperties || isEmptyObject(elementProperties))
1255
+ && (!aSiblingControls || aSiblingControls.length === 0)) {
1256
+ return bPass;
1257
+ }
1258
+ for (var i = 0; i < aValidControls.length; i++) {
1259
+ var bIsEqual = compareToElementProperties(elementProperties, aValidControls[i]);
1260
+ if (bIsEqual) {
1261
+ return bPass;
1262
+ }
1263
+ }
1264
+ return false;
1265
+ }
1266
+ function getValidParentControl(oControl) {
1267
+ if (!oControl || !oControl.getId || !oControl.getId())
1268
+ return null;
1269
+ var oParentControl = null;
1270
+ var domElem = document.getElementById(oControl.getId());
1271
+ if (!domElem)
1272
+ return null;
1273
+ var domParent = domElem.parentElement;
1274
+ for (;;) {
1275
+ if (!domParent)
1276
+ return null;
1277
+ var nodeId = domParent.getAttribute("id");
1278
+ if (nodeId) {
1279
+ // eslint-disable-next-line no-undef
1280
+ oParentControl = sap.ui.getCore().byId(nodeId);
1281
+ if (oParentControl) {
1282
+ /*console.log("Candidate Parent Property Control Type -->"
1283
+ + oParentControl.getMetadata().getName()
1284
+ + ", Id-->" + oParentControl.getId());*/
1285
+ return oParentControl;
1286
+ }
1287
+ }
1288
+ domParent = domParent.parentElement;
1289
+ }
1290
+ }
1291
+ function filterByIndex(aControls) {
1292
+ if ((index !== null && index !== undefined)
1293
+ && aControls && aControls.length > 0) {
1294
+ if (typeof index === "object" && index.nodeType) {
1295
+ return aControls;
1296
+ }
1297
+ else if ((index <= (aControls.length - 1)) && (index >= 0)) {
1298
+ return [aControls[index]];
1299
+ }
1300
+ else {
1301
+ return [];
1302
+ }
1303
+ }
1304
+ return aControls;
1305
+ }
1306
+ function compareToAncestorProperties(elementProperties, oControl) {
1307
+ if ((!elementProperties || isEmptyObject(elementProperties)) && oControl) {
1308
+ return true;
1309
+ }
1310
+ else if ((elementProperties && !isEmptyObject(elementProperties)) && !oControl) {
1311
+ return false;
1312
+ }
1313
+ else if ((!elementProperties || isEmptyObject(elementProperties)) && !oControl) {
1314
+ return true;
1315
+ }
1316
+ var oAncestorControl = oControl;
1317
+ for (;;) {
1318
+ oAncestorControl = getValidParentControl(oAncestorControl);
1319
+ if (!oAncestorControl)
1320
+ return false;
1321
+ if (compareToElementProperties(elementProperties, oAncestorControl)) {
1322
+ return true;
1323
+ }
1324
+ }
1325
+ }
1326
+ // eslint-disable-next-line no-undef
1327
+ if (!sap.ui || !sap.ui.getCore()) {
1328
+ throw new Error("This is not an UI5 App, please use other locators");
1329
+ }
1330
+ var nodes = retrieveNodesFromBody(index, opt_parentElement);
1331
+ if (!nodes || nodes.length === 0) {
1332
+ throw new Error("no node html elements found");
1333
+ }
1334
+ var aCandidateControl = [];
1335
+ var aValidControls = retrieveValidUI5Controls(nodes);
1336
+ if (aValidControls === null || aValidControls === undefined)
1337
+ return aCandidateControl;
1338
+ if (!ui5Selector) {
1339
+ throw new Error(`The selector your provided ${ui5Selector} is undefined/null, please provide a valid selector`);
1340
+ }
1341
+ if (!ui5Selector.elementProperties) {
1342
+ throw new Error(`The selector your provided ${JSON.stringify(ui5Selector)} does not contain elementProperties, please provide a valid selector with elementProperties`);
1343
+ }
1344
+ //console.log("going in...");
1345
+ Array.prototype.filter.call(aValidControls, function (oControl) {
1346
+ var isNotCandidate = !compareToElementProperties(ui5Selector.elementProperties, oControl);
1347
+ if (isNotCandidate)
1348
+ return false;
1349
+ var oParentControl = getValidParentControl(oControl);
1350
+ if (!oParentControl && ui5Selector.parentProperties) {
1351
+ throw new Error("no parent control found");
1352
+ }
1353
+ var isParentNotCandidate = !compareToElementProperties(ui5Selector.parentProperties, oParentControl);
1354
+ if (isParentNotCandidate)
1355
+ return false;
1356
+ var isAncestorNotCandidate = !compareToAncestorProperties(ui5Selector.ancestorProperties, oControl);
1357
+ if (isAncestorNotCandidate)
1358
+ return false;
1359
+ var isSiblingNotCandidate = !compareToSiblingElementProperties(ui5Selector.siblingProperties, oControl, oParentControl);
1360
+ if (isSiblingNotCandidate)
1361
+ return false;
1362
+ var isPrevSiblingNotCandidate = !compareToPrevElementProperties(ui5Selector.prevSiblingProperties, oControl, oParentControl);
1363
+ if (isPrevSiblingNotCandidate)
1364
+ return false;
1365
+ var isNextSiblingNotCandidate = !compareToNextElementProperties(ui5Selector.nextSiblingProperties, oControl, oParentControl);
1366
+ if (isNextSiblingNotCandidate)
1367
+ return false;
1368
+ var isChildNotCandidate = !compareToChildElementProperties(ui5Selector.childProperties, oControl);
1369
+ if (isChildNotCandidate)
1370
+ return false;
1371
+ var isDescendantNotCandidate = !compareToDescendantElementProperties(ui5Selector.descendantProperties, oControl);
1372
+ if (isDescendantNotCandidate)
1373
+ return false;
1374
+ if (oControl !== null && oControl !== undefined) {
1375
+ aCandidateControl.push(oControl);
1376
+ }
1377
+ return oControl !== null && oControl !== undefined;
1378
+ });
1379
+ aCandidateControl = filterByIndex(aCandidateControl);
1380
+ //console.log("Candidates found --->" + aCandidateControl.length);
1381
+ return convertToDomElements(aCandidateControl);
1382
+ }
1383
+ };
1384
+ //# sourceMappingURL=qmateLocator.js.map