@wdio/image-comparison-core 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 (416) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/LICENSE +21 -0
  3. package/README.md +12 -0
  4. package/assets/ios/ipadair4th.ipadair5th-bottom.png +0 -0
  5. package/assets/ios/ipadair4th.ipadair5th-top.png +0 -0
  6. package/assets/ios/ipadmini6th-bottom.png +0 -0
  7. package/assets/ios/ipadmini6th-top.png +0 -0
  8. package/assets/ios/ipadpro11-bottom.png +0 -0
  9. package/assets/ios/ipadpro11-top.png +0 -0
  10. package/assets/ios/ipadpro129-bottom.png +0 -0
  11. package/assets/ios/ipadpro129-top.png +0 -0
  12. package/assets/ios/iphone11promax-bottom.png +0 -0
  13. package/assets/ios/iphone11promax-top.png +0 -0
  14. package/assets/ios/iphone12.iphone12pro-top.png +0 -0
  15. package/assets/ios/iphone12.iphone12pro.iphone13.iphone13pro.iphone14-bottom.png +0 -0
  16. package/assets/ios/iphone12mini-top.png +0 -0
  17. package/assets/ios/iphone12mini.iphone13mini-bottom.png +0 -0
  18. package/assets/ios/iphone12promax-top.png +0 -0
  19. package/assets/ios/iphone12promax.iphone13promax.iphone14plus-bottom.png +0 -0
  20. package/assets/ios/iphone13.iphone13pro.iphone14-top.png +0 -0
  21. package/assets/ios/iphone13mini-top.png +0 -0
  22. package/assets/ios/iphone13promax.iphone14plus-top.png +0 -0
  23. package/assets/ios/iphone14pro-bottom.png +0 -0
  24. package/assets/ios/iphone14pro-top.png +0 -0
  25. package/assets/ios/iphone14promax-bottom.png +0 -0
  26. package/assets/ios/iphone14promax-top.png +0 -0
  27. package/assets/ios/iphone15-bottom.png +0 -0
  28. package/assets/ios/iphone15-top.png +0 -0
  29. package/assets/ios/iphonex.iphonexs.iphone11pro-bottom.png +0 -0
  30. package/assets/ios/iphonex.iphonexs.iphone11pro-top.png +0 -0
  31. package/assets/ios/iphonexr.iphone11-bottom.png +0 -0
  32. package/assets/ios/iphonexr.iphone11-top.png +0 -0
  33. package/assets/ios/iphonexsmax-bottom.png +0 -0
  34. package/assets/ios/iphonexsmax-top.png +0 -0
  35. package/dist/base.d.ts +18 -0
  36. package/dist/base.d.ts.map +1 -0
  37. package/dist/base.interfaces.d.ts +200 -0
  38. package/dist/base.interfaces.d.ts.map +1 -0
  39. package/dist/base.interfaces.js +1 -0
  40. package/dist/base.js +58 -0
  41. package/dist/base.test.d.ts +2 -0
  42. package/dist/base.test.d.ts.map +1 -0
  43. package/dist/base.test.js +45 -0
  44. package/dist/clientSideScripts/checkMetaTag.d.ts +2 -0
  45. package/dist/clientSideScripts/checkMetaTag.d.ts.map +1 -0
  46. package/dist/clientSideScripts/checkMetaTag.js +9 -0
  47. package/dist/clientSideScripts/checkMetaTag.test.d.ts +2 -0
  48. package/dist/clientSideScripts/checkMetaTag.test.d.ts.map +1 -0
  49. package/dist/clientSideScripts/checkMetaTag.test.js +25 -0
  50. package/dist/clientSideScripts/customCss.interfaces.d.ts +8 -0
  51. package/dist/clientSideScripts/customCss.interfaces.d.ts.map +1 -0
  52. package/dist/clientSideScripts/customCss.interfaces.js +1 -0
  53. package/dist/clientSideScripts/drawTabbableOnCanvas.d.ts +8 -0
  54. package/dist/clientSideScripts/drawTabbableOnCanvas.d.ts.map +1 -0
  55. package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.d.ts +4 -0
  56. package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.d.ts.map +1 -0
  57. package/dist/clientSideScripts/drawTabbableOnCanvas.interfaces.js +1 -0
  58. package/dist/clientSideScripts/drawTabbableOnCanvas.js +275 -0
  59. package/dist/clientSideScripts/drawTabbableOnCanvas.test.d.ts +2 -0
  60. package/dist/clientSideScripts/drawTabbableOnCanvas.test.d.ts.map +1 -0
  61. package/dist/clientSideScripts/drawTabbableOnCanvas.test.js +251 -0
  62. package/dist/clientSideScripts/elementPosition.interfaces.d.ts +3 -0
  63. package/dist/clientSideScripts/elementPosition.interfaces.d.ts.map +1 -0
  64. package/dist/clientSideScripts/elementPosition.interfaces.js +1 -0
  65. package/dist/clientSideScripts/getBoundingClientRect.d.ts +6 -0
  66. package/dist/clientSideScripts/getBoundingClientRect.d.ts.map +1 -0
  67. package/dist/clientSideScripts/getBoundingClientRect.js +12 -0
  68. package/dist/clientSideScripts/getBoundingClientRect.test.d.ts +2 -0
  69. package/dist/clientSideScripts/getBoundingClientRect.test.d.ts.map +1 -0
  70. package/dist/clientSideScripts/getBoundingClientRect.test.js +28 -0
  71. package/dist/clientSideScripts/getDocumentScrollHeight.d.ts +5 -0
  72. package/dist/clientSideScripts/getDocumentScrollHeight.d.ts.map +1 -0
  73. package/dist/clientSideScripts/getDocumentScrollHeight.js +48 -0
  74. package/dist/clientSideScripts/getDocumentScrollHeight.test.d.ts +2 -0
  75. package/dist/clientSideScripts/getDocumentScrollHeight.test.d.ts.map +1 -0
  76. package/dist/clientSideScripts/getDocumentScrollHeight.test.js +30 -0
  77. package/dist/clientSideScripts/getElementPositionTopDom.d.ts +6 -0
  78. package/dist/clientSideScripts/getElementPositionTopDom.d.ts.map +1 -0
  79. package/dist/clientSideScripts/getElementPositionTopDom.js +11 -0
  80. package/dist/clientSideScripts/getElementPositionTopDom.test.d.ts +2 -0
  81. package/dist/clientSideScripts/getElementPositionTopDom.test.d.ts.map +1 -0
  82. package/dist/clientSideScripts/getElementPositionTopDom.test.js +11 -0
  83. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.d.ts +14 -0
  84. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.d.ts.map +1 -0
  85. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.js +19 -0
  86. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.d.ts +2 -0
  87. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.d.ts.map +1 -0
  88. package/dist/clientSideScripts/getElementPositionTopScreenNativeMobile.test.js +52 -0
  89. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.d.ts +6 -0
  90. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.d.ts.map +1 -0
  91. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.js +17 -0
  92. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.d.ts +2 -0
  93. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.d.ts.map +1 -0
  94. package/dist/clientSideScripts/getMobileWebviewClickAndDimensions.test.js +47 -0
  95. package/dist/clientSideScripts/getScreenDimensions.d.ts +6 -0
  96. package/dist/clientSideScripts/getScreenDimensions.d.ts.map +1 -0
  97. package/dist/clientSideScripts/getScreenDimensions.js +104 -0
  98. package/dist/clientSideScripts/getScreenDimensions.test.d.ts +2 -0
  99. package/dist/clientSideScripts/getScreenDimensions.test.d.ts.map +1 -0
  100. package/dist/clientSideScripts/getScreenDimensions.test.js +161 -0
  101. package/dist/clientSideScripts/hideRemoveElements.d.ts +8 -0
  102. package/dist/clientSideScripts/hideRemoveElements.d.ts.map +1 -0
  103. package/dist/clientSideScripts/hideRemoveElements.js +60 -0
  104. package/dist/clientSideScripts/hideRemoveElements.test.d.ts +2 -0
  105. package/dist/clientSideScripts/hideRemoveElements.test.d.ts.map +1 -0
  106. package/dist/clientSideScripts/hideRemoveElements.test.js +199 -0
  107. package/dist/clientSideScripts/hideScrollbars.d.ts +9 -0
  108. package/dist/clientSideScripts/hideScrollbars.d.ts.map +1 -0
  109. package/dist/clientSideScripts/hideScrollbars.js +15 -0
  110. package/dist/clientSideScripts/hideScrollbars.test.d.ts +2 -0
  111. package/dist/clientSideScripts/hideScrollbars.test.d.ts.map +1 -0
  112. package/dist/clientSideScripts/hideScrollbars.test.js +12 -0
  113. package/dist/clientSideScripts/injectWebviewOverlay.d.ts +5 -0
  114. package/dist/clientSideScripts/injectWebviewOverlay.d.ts.map +1 -0
  115. package/dist/clientSideScripts/injectWebviewOverlay.js +35 -0
  116. package/dist/clientSideScripts/injectWebviewOverlay.test.d.ts +2 -0
  117. package/dist/clientSideScripts/injectWebviewOverlay.test.d.ts.map +1 -0
  118. package/dist/clientSideScripts/injectWebviewOverlay.test.js +74 -0
  119. package/dist/clientSideScripts/removeElementFromDom.d.ts +5 -0
  120. package/dist/clientSideScripts/removeElementFromDom.d.ts.map +1 -0
  121. package/dist/clientSideScripts/removeElementFromDom.js +9 -0
  122. package/dist/clientSideScripts/removeElementFromDom.test.d.ts +2 -0
  123. package/dist/clientSideScripts/removeElementFromDom.test.d.ts.map +1 -0
  124. package/dist/clientSideScripts/removeElementFromDom.test.js +43 -0
  125. package/dist/clientSideScripts/screenDimensions.interfaces.d.ts +96 -0
  126. package/dist/clientSideScripts/screenDimensions.interfaces.d.ts.map +1 -0
  127. package/dist/clientSideScripts/screenDimensions.interfaces.js +1 -0
  128. package/dist/clientSideScripts/scrollElementIntoView.d.ts +5 -0
  129. package/dist/clientSideScripts/scrollElementIntoView.d.ts.map +1 -0
  130. package/dist/clientSideScripts/scrollElementIntoView.js +31 -0
  131. package/dist/clientSideScripts/scrollElementIntoView.test.d.ts +2 -0
  132. package/dist/clientSideScripts/scrollElementIntoView.test.d.ts.map +1 -0
  133. package/dist/clientSideScripts/scrollElementIntoView.test.js +79 -0
  134. package/dist/clientSideScripts/scrollToPosition.d.ts +5 -0
  135. package/dist/clientSideScripts/scrollToPosition.d.ts.map +1 -0
  136. package/dist/clientSideScripts/scrollToPosition.js +25 -0
  137. package/dist/clientSideScripts/scrollToPosition.test.d.ts +2 -0
  138. package/dist/clientSideScripts/scrollToPosition.test.d.ts.map +1 -0
  139. package/dist/clientSideScripts/scrollToPosition.test.js +72 -0
  140. package/dist/clientSideScripts/setCustomCss.d.ts +6 -0
  141. package/dist/clientSideScripts/setCustomCss.d.ts.map +1 -0
  142. package/dist/clientSideScripts/setCustomCss.js +36 -0
  143. package/dist/clientSideScripts/setCustomCss.test.d.ts +2 -0
  144. package/dist/clientSideScripts/setCustomCss.test.d.ts.map +1 -0
  145. package/dist/clientSideScripts/setCustomCss.test.js +68 -0
  146. package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.d.ts +11 -0
  147. package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.d.ts.map +1 -0
  148. package/dist/clientSideScripts/statusAddressToolBarOffsets.interfaces.js +1 -0
  149. package/dist/clientSideScripts/toggleTextTransparency.d.ts +5 -0
  150. package/dist/clientSideScripts/toggleTextTransparency.d.ts.map +1 -0
  151. package/dist/clientSideScripts/toggleTextTransparency.js +16 -0
  152. package/dist/clientSideScripts/toggleTextTransparency.test.d.ts +2 -0
  153. package/dist/clientSideScripts/toggleTextTransparency.test.d.ts.map +1 -0
  154. package/dist/clientSideScripts/toggleTextTransparency.test.js +35 -0
  155. package/dist/clientSideScripts/waitForFonts.d.ts +8 -0
  156. package/dist/clientSideScripts/waitForFonts.d.ts.map +1 -0
  157. package/dist/clientSideScripts/waitForFonts.js +20 -0
  158. package/dist/clientSideScripts/waitForFonts.test.d.ts +2 -0
  159. package/dist/clientSideScripts/waitForFonts.test.d.ts.map +1 -0
  160. package/dist/clientSideScripts/waitForFonts.test.js +37 -0
  161. package/dist/commands/check.interfaces.d.ts +35 -0
  162. package/dist/commands/check.interfaces.d.ts.map +1 -0
  163. package/dist/commands/check.interfaces.js +1 -0
  164. package/dist/commands/checkAppElement.d.ts +7 -0
  165. package/dist/commands/checkAppElement.d.ts.map +1 -0
  166. package/dist/commands/checkAppElement.js +44 -0
  167. package/dist/commands/checkAppElement.test.d.ts +2 -0
  168. package/dist/commands/checkAppElement.test.d.ts.map +1 -0
  169. package/dist/commands/checkAppElement.test.js +241 -0
  170. package/dist/commands/checkAppScreen.d.ts +7 -0
  171. package/dist/commands/checkAppScreen.d.ts.map +1 -0
  172. package/dist/commands/checkAppScreen.js +73 -0
  173. package/dist/commands/checkAppScreen.test.d.ts +2 -0
  174. package/dist/commands/checkAppScreen.test.d.ts.map +1 -0
  175. package/dist/commands/checkAppScreen.test.js +295 -0
  176. package/dist/commands/checkElement.d.ts +7 -0
  177. package/dist/commands/checkElement.d.ts.map +1 -0
  178. package/dist/commands/checkElement.js +10 -0
  179. package/dist/commands/checkElement.test.d.ts +2 -0
  180. package/dist/commands/checkElement.test.d.ts.map +1 -0
  181. package/dist/commands/checkElement.test.js +66 -0
  182. package/dist/commands/checkFullPageScreen.d.ts +7 -0
  183. package/dist/commands/checkFullPageScreen.d.ts.map +1 -0
  184. package/dist/commands/checkFullPageScreen.js +56 -0
  185. package/dist/commands/checkFullPageScreen.test.d.ts +2 -0
  186. package/dist/commands/checkFullPageScreen.test.d.ts.map +1 -0
  187. package/dist/commands/checkFullPageScreen.test.js +259 -0
  188. package/dist/commands/checkScreen.d.ts +7 -0
  189. package/dist/commands/checkScreen.d.ts.map +1 -0
  190. package/dist/commands/checkScreen.js +10 -0
  191. package/dist/commands/checkScreen.test.d.ts +2 -0
  192. package/dist/commands/checkScreen.test.d.ts.map +1 -0
  193. package/dist/commands/checkScreen.test.js +62 -0
  194. package/dist/commands/checkTabbablePage.d.ts +7 -0
  195. package/dist/commands/checkTabbablePage.d.ts.map +1 -0
  196. package/dist/commands/checkTabbablePage.js +28 -0
  197. package/dist/commands/checkTabbablePage.test.d.ts +2 -0
  198. package/dist/commands/checkTabbablePage.test.d.ts.map +1 -0
  199. package/dist/commands/checkTabbablePage.test.js +200 -0
  200. package/dist/commands/checkWebElement.d.ts +7 -0
  201. package/dist/commands/checkWebElement.d.ts.map +1 -0
  202. package/dist/commands/checkWebElement.js +52 -0
  203. package/dist/commands/checkWebElement.test.d.ts +2 -0
  204. package/dist/commands/checkWebElement.test.d.ts.map +1 -0
  205. package/dist/commands/checkWebElement.test.js +278 -0
  206. package/dist/commands/checkWebScreen.d.ts +7 -0
  207. package/dist/commands/checkWebScreen.d.ts.map +1 -0
  208. package/dist/commands/checkWebScreen.js +50 -0
  209. package/dist/commands/checkWebScreen.test.d.ts +2 -0
  210. package/dist/commands/checkWebScreen.test.d.ts.map +1 -0
  211. package/dist/commands/checkWebScreen.test.js +227 -0
  212. package/dist/commands/element.interfaces.d.ts +27 -0
  213. package/dist/commands/element.interfaces.d.ts.map +1 -0
  214. package/dist/commands/element.interfaces.js +1 -0
  215. package/dist/commands/fullPage.interfaces.d.ts +38 -0
  216. package/dist/commands/fullPage.interfaces.d.ts.map +1 -0
  217. package/dist/commands/fullPage.interfaces.js +1 -0
  218. package/dist/commands/save.interfaces.d.ts +27 -0
  219. package/dist/commands/save.interfaces.d.ts.map +1 -0
  220. package/dist/commands/save.interfaces.js +1 -0
  221. package/dist/commands/saveAppElement.d.ts +7 -0
  222. package/dist/commands/saveAppElement.d.ts.map +1 -0
  223. package/dist/commands/saveAppElement.js +30 -0
  224. package/dist/commands/saveAppElement.test.d.ts +2 -0
  225. package/dist/commands/saveAppElement.test.d.ts.map +1 -0
  226. package/dist/commands/saveAppElement.test.js +199 -0
  227. package/dist/commands/saveAppScreen.d.ts +7 -0
  228. package/dist/commands/saveAppScreen.d.ts.map +1 -0
  229. package/dist/commands/saveAppScreen.js +43 -0
  230. package/dist/commands/saveAppScreen.test.d.ts +2 -0
  231. package/dist/commands/saveAppScreen.test.d.ts.map +1 -0
  232. package/dist/commands/saveAppScreen.test.js +221 -0
  233. package/dist/commands/saveElement.d.ts +7 -0
  234. package/dist/commands/saveElement.d.ts.map +1 -0
  235. package/dist/commands/saveElement.js +10 -0
  236. package/dist/commands/saveElement.test.d.ts +2 -0
  237. package/dist/commands/saveElement.test.d.ts.map +1 -0
  238. package/dist/commands/saveElement.test.js +62 -0
  239. package/dist/commands/saveFullPageScreen.d.ts +7 -0
  240. package/dist/commands/saveFullPageScreen.d.ts.map +1 -0
  241. package/dist/commands/saveFullPageScreen.js +60 -0
  242. package/dist/commands/saveFullPageScreen.test.d.ts +2 -0
  243. package/dist/commands/saveFullPageScreen.test.d.ts.map +1 -0
  244. package/dist/commands/saveFullPageScreen.test.js +293 -0
  245. package/dist/commands/saveScreen.d.ts +7 -0
  246. package/dist/commands/saveScreen.d.ts.map +1 -0
  247. package/dist/commands/saveScreen.js +10 -0
  248. package/dist/commands/saveScreen.test.d.ts +2 -0
  249. package/dist/commands/saveScreen.test.d.ts.map +1 -0
  250. package/dist/commands/saveScreen.test.js +47 -0
  251. package/dist/commands/saveTabbablePage.d.ts +7 -0
  252. package/dist/commands/saveTabbablePage.d.ts.map +1 -0
  253. package/dist/commands/saveTabbablePage.js +20 -0
  254. package/dist/commands/saveTabbablePage.test.d.ts +2 -0
  255. package/dist/commands/saveTabbablePage.test.d.ts.map +1 -0
  256. package/dist/commands/saveTabbablePage.test.js +74 -0
  257. package/dist/commands/saveWebElement.d.ts +7 -0
  258. package/dist/commands/saveWebElement.d.ts.map +1 -0
  259. package/dist/commands/saveWebElement.js +53 -0
  260. package/dist/commands/saveWebElement.test.d.ts +2 -0
  261. package/dist/commands/saveWebElement.test.d.ts.map +1 -0
  262. package/dist/commands/saveWebElement.test.js +253 -0
  263. package/dist/commands/saveWebScreen.d.ts +7 -0
  264. package/dist/commands/saveWebScreen.d.ts.map +1 -0
  265. package/dist/commands/saveWebScreen.js +48 -0
  266. package/dist/commands/saveWebScreen.test.d.ts +2 -0
  267. package/dist/commands/saveWebScreen.test.d.ts.map +1 -0
  268. package/dist/commands/saveWebScreen.test.js +222 -0
  269. package/dist/commands/screen.interfaces.d.ts +16 -0
  270. package/dist/commands/screen.interfaces.d.ts.map +1 -0
  271. package/dist/commands/screen.interfaces.js +1 -0
  272. package/dist/commands/tabbable.interfaces.d.ts +29 -0
  273. package/dist/commands/tabbable.interfaces.d.ts.map +1 -0
  274. package/dist/commands/tabbable.interfaces.js +1 -0
  275. package/dist/helpers/afterScreenshot.d.ts +7 -0
  276. package/dist/helpers/afterScreenshot.d.ts.map +1 -0
  277. package/dist/helpers/afterScreenshot.interfaces.d.ts +46 -0
  278. package/dist/helpers/afterScreenshot.interfaces.d.ts.map +1 -0
  279. package/dist/helpers/afterScreenshot.interfaces.js +1 -0
  280. package/dist/helpers/afterScreenshot.js +55 -0
  281. package/dist/helpers/afterScreenshot.test.d.ts +2 -0
  282. package/dist/helpers/afterScreenshot.test.d.ts.map +1 -0
  283. package/dist/helpers/afterScreenshot.test.js +241 -0
  284. package/dist/helpers/beforeScreenshot.d.ts +6 -0
  285. package/dist/helpers/beforeScreenshot.d.ts.map +1 -0
  286. package/dist/helpers/beforeScreenshot.interfaces.d.ts +15 -0
  287. package/dist/helpers/beforeScreenshot.interfaces.d.ts.map +1 -0
  288. package/dist/helpers/beforeScreenshot.interfaces.js +1 -0
  289. package/dist/helpers/beforeScreenshot.js +79 -0
  290. package/dist/helpers/beforeScreenshot.test.d.ts +2 -0
  291. package/dist/helpers/beforeScreenshot.test.d.ts.map +1 -0
  292. package/dist/helpers/beforeScreenshot.test.js +261 -0
  293. package/dist/helpers/compare.interfaces.d.ts +16 -0
  294. package/dist/helpers/compare.interfaces.d.ts.map +1 -0
  295. package/dist/helpers/compare.interfaces.js +1 -0
  296. package/dist/helpers/constants.d.ts +108 -0
  297. package/dist/helpers/constants.d.ts.map +1 -0
  298. package/dist/helpers/constants.interfaces.d.ts +30 -0
  299. package/dist/helpers/constants.interfaces.d.ts.map +1 -0
  300. package/dist/helpers/constants.interfaces.js +11 -0
  301. package/dist/helpers/constants.js +436 -0
  302. package/dist/helpers/options.d.ts +64 -0
  303. package/dist/helpers/options.d.ts.map +1 -0
  304. package/dist/helpers/options.interfaces.d.ts +363 -0
  305. package/dist/helpers/options.interfaces.d.ts.map +1 -0
  306. package/dist/helpers/options.interfaces.js +1 -0
  307. package/dist/helpers/options.js +184 -0
  308. package/dist/helpers/options.test.d.ts +2 -0
  309. package/dist/helpers/options.test.d.ts.map +1 -0
  310. package/dist/helpers/options.test.js +428 -0
  311. package/dist/helpers/utils.d.ts +134 -0
  312. package/dist/helpers/utils.d.ts.map +1 -0
  313. package/dist/helpers/utils.interfaces.d.ts +254 -0
  314. package/dist/helpers/utils.interfaces.d.ts.map +1 -0
  315. package/dist/helpers/utils.interfaces.js +1 -0
  316. package/dist/helpers/utils.js +566 -0
  317. package/dist/helpers/utils.test.d.ts +2 -0
  318. package/dist/helpers/utils.test.d.ts.map +1 -0
  319. package/dist/helpers/utils.test.js +900 -0
  320. package/dist/index.d.ts +26 -0
  321. package/dist/index.d.ts.map +1 -0
  322. package/dist/index.js +18 -0
  323. package/dist/methods/compareReport.interfaces.d.ts +109 -0
  324. package/dist/methods/compareReport.interfaces.d.ts.map +1 -0
  325. package/dist/methods/compareReport.interfaces.js +1 -0
  326. package/dist/methods/createCompareReport.d.ts +7 -0
  327. package/dist/methods/createCompareReport.d.ts.map +1 -0
  328. package/dist/methods/createCompareReport.js +61 -0
  329. package/dist/methods/createCompareReport.test.d.ts +2 -0
  330. package/dist/methods/createCompareReport.test.d.ts.map +1 -0
  331. package/dist/methods/createCompareReport.test.js +236 -0
  332. package/dist/methods/elementPosition.d.ts +18 -0
  333. package/dist/methods/elementPosition.d.ts.map +1 -0
  334. package/dist/methods/elementPosition.interfaces.d.ts +14 -0
  335. package/dist/methods/elementPosition.interfaces.d.ts.map +1 -0
  336. package/dist/methods/elementPosition.interfaces.js +1 -0
  337. package/dist/methods/elementPosition.js +34 -0
  338. package/dist/methods/images.d.ts +69 -0
  339. package/dist/methods/images.d.ts.map +1 -0
  340. package/dist/methods/images.executeImageCompare.test.d.ts +2 -0
  341. package/dist/methods/images.executeImageCompare.test.d.ts.map +1 -0
  342. package/dist/methods/images.executeImageCompare.test.js +770 -0
  343. package/dist/methods/images.interfaces.d.ts +214 -0
  344. package/dist/methods/images.interfaces.d.ts.map +1 -0
  345. package/dist/methods/images.interfaces.js +1 -0
  346. package/dist/methods/images.js +428 -0
  347. package/dist/methods/images.test.d.ts +2 -0
  348. package/dist/methods/images.test.d.ts.map +1 -0
  349. package/dist/methods/images.test.js +1465 -0
  350. package/dist/methods/instanceData.d.ts +6 -0
  351. package/dist/methods/instanceData.d.ts.map +1 -0
  352. package/dist/methods/instanceData.interfaces.d.ts +57 -0
  353. package/dist/methods/instanceData.interfaces.d.ts.map +1 -0
  354. package/dist/methods/instanceData.interfaces.js +1 -0
  355. package/dist/methods/instanceData.js +42 -0
  356. package/dist/methods/instanceData.test.d.ts +2 -0
  357. package/dist/methods/instanceData.test.d.ts.map +1 -0
  358. package/dist/methods/instanceData.test.js +224 -0
  359. package/dist/methods/processDiffPixels.d.ts +59 -0
  360. package/dist/methods/processDiffPixels.d.ts.map +1 -0
  361. package/dist/methods/processDiffPixels.js +242 -0
  362. package/dist/methods/processDiffPixels.test.d.ts +2 -0
  363. package/dist/methods/processDiffPixels.test.d.ts.map +1 -0
  364. package/dist/methods/processDiffPixels.test.js +122 -0
  365. package/dist/methods/rectangles.d.ts +51 -0
  366. package/dist/methods/rectangles.d.ts.map +1 -0
  367. package/dist/methods/rectangles.interfaces.d.ts +146 -0
  368. package/dist/methods/rectangles.interfaces.d.ts.map +1 -0
  369. package/dist/methods/rectangles.interfaces.js +1 -0
  370. package/dist/methods/rectangles.js +266 -0
  371. package/dist/methods/rectangles.test.d.ts +2 -0
  372. package/dist/methods/rectangles.test.d.ts.map +1 -0
  373. package/dist/methods/rectangles.test.js +853 -0
  374. package/dist/methods/screenshots.d.ts +37 -0
  375. package/dist/methods/screenshots.d.ts.map +1 -0
  376. package/dist/methods/screenshots.interfaces.d.ts +203 -0
  377. package/dist/methods/screenshots.interfaces.d.ts.map +1 -0
  378. package/dist/methods/screenshots.interfaces.js +1 -0
  379. package/dist/methods/screenshots.js +394 -0
  380. package/dist/methods/screenshots.test.d.ts +2 -0
  381. package/dist/methods/screenshots.test.d.ts.map +1 -0
  382. package/dist/methods/screenshots.test.js +656 -0
  383. package/dist/methods/takeElementScreenshots.d.ts +3 -0
  384. package/dist/methods/takeElementScreenshots.d.ts.map +1 -0
  385. package/dist/methods/takeElementScreenshots.js +104 -0
  386. package/dist/methods/takeElementScreenshots.test.d.ts +2 -0
  387. package/dist/methods/takeElementScreenshots.test.d.ts.map +1 -0
  388. package/dist/methods/takeElementScreenshots.test.js +314 -0
  389. package/dist/methods/takeFullPageScreenshots.d.ts +3 -0
  390. package/dist/methods/takeFullPageScreenshots.d.ts.map +1 -0
  391. package/dist/methods/takeFullPageScreenshots.js +56 -0
  392. package/dist/methods/takeFullPageScreenshots.test.d.ts +2 -0
  393. package/dist/methods/takeFullPageScreenshots.test.d.ts.map +1 -0
  394. package/dist/methods/takeFullPageScreenshots.test.js +72 -0
  395. package/dist/methods/takeWebScreenshots.d.ts +3 -0
  396. package/dist/methods/takeWebScreenshots.d.ts.map +1 -0
  397. package/dist/methods/takeWebScreenshots.js +41 -0
  398. package/dist/methods/takeWebScreenshots.test.d.ts +2 -0
  399. package/dist/methods/takeWebScreenshots.test.d.ts.map +1 -0
  400. package/dist/methods/takeWebScreenshots.test.js +149 -0
  401. package/dist/mocks/image.d.ts +4 -0
  402. package/dist/mocks/image.d.ts.map +1 -0
  403. package/dist/mocks/image.js +3 -0
  404. package/dist/mocks/mocks.d.ts +745 -0
  405. package/dist/mocks/mocks.d.ts.map +1 -0
  406. package/dist/mocks/mocks.js +392 -0
  407. package/dist/resemble/compare.interfaces.d.ts +136 -0
  408. package/dist/resemble/compare.interfaces.d.ts.map +1 -0
  409. package/dist/resemble/compare.interfaces.js +1 -0
  410. package/dist/resemble/compareImages.d.ts +3 -0
  411. package/dist/resemble/compareImages.d.ts.map +1 -0
  412. package/dist/resemble/compareImages.js +21 -0
  413. package/dist/resemble/resemble.jimp.cjs +981 -0
  414. package/dist/resemble/resemble.jimp.d.cts +46 -0
  415. package/dist/resemble/resemble.jimp.d.cts.map +1 -0
  416. package/package.json +47 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,82 @@
1
+ # @wdio/image-comparison-core
2
+
3
+ ## 1.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - 1326e99: ## 💥 Major Release: New @wdio/image-comparison-core Package
8
+
9
+ ### 🏗️ Architectural Refactor
10
+
11
+ This release introduces a **completely new core architecture** with the dedicated `@wdio/image-comparison-core` package, replacing the generic `webdriver-image-comparison` module with a WDIO-specific solution.
12
+
13
+ #### What was the problem?
14
+
15
+ - The old `webdriver-image-comparison` package was designed for generic webdriver usage
16
+ - Complex integration between generic and WDIO-specific code
17
+ - Limited test coverage (~58%) making maintenance difficult
18
+ - Mixed responsibilities between core logic and service integration
19
+
20
+ #### What changed?
21
+
22
+ ✅ **New dedicated core package**: `@wdio/image-comparison-core` - purpose-built for WebdriverIO
23
+ ✅ **Cleaner architecture**: Modular design with clear separation of concerns
24
+ ✅ **Enhanced test coverage**: Improved from ~58% to ~90% across all metrics
25
+ ✅ **Better maintainability**: Organized codebase with comprehensive TypeScript interfaces
26
+ ✅ **WDIO-specific dependencies**: Only depends on `@wdio/logger`, `@wdio/types`, etc.
27
+
28
+ ### 🧪 Testing Improvements
29
+
30
+ - **100% branch coverage** on critical decision points
31
+ - **Comprehensive unit tests** for all major functions
32
+ - **Optimized mocks** for complex scenarios
33
+ - **Better test isolation** and reliability
34
+
35
+ | Before/After | % Stmts | % Branch | % Funcs | % Lines |
36
+ | ------------------ | ------- | -------- | ------- | ------- |
37
+ | **Previous** | 58.59 | 91.4 | 80.71 | 58.59 |
38
+ | **After refactor** | 90.55 | 96.38 | 93.99 | 90.55 |
39
+
40
+ ### 🔧 Service Integration
41
+
42
+ The `@wdio/visual-service` now imports from the new `@wdio/image-comparison-core` package while maintaining the same public API and functionality for users.
43
+
44
+ ### 📈 Performance & Quality
45
+
46
+ - **Modular architecture**: Easier to maintain and extend
47
+ - **Type safety**: Comprehensive TypeScript coverage
48
+ - **Clean exports**: Well-defined public API
49
+ - **Internal interfaces**: Proper separation of concerns
50
+
51
+ ### 🔄 Backward Compatibility
52
+
53
+ ✅ **No breaking changes** for end users
54
+ ✅ **Same public API** maintained
55
+ ✅ **Existing configurations** continue to work
56
+ ✅ **All existing functionality** preserved
57
+
58
+ ### 🎯 Future Benefits
59
+
60
+ This refactor sets the foundation for:
61
+
62
+ - Easier addition of new features
63
+ - Better bug fixing capabilities
64
+ - Enhanced mobile and native app support
65
+ - More reliable MultiRemote functionality
66
+
67
+ ### 📦 Dependency Updates
68
+
69
+ - Updated most dependencies to their latest versions
70
+ - Improved security with latest package versions
71
+ - Better compatibility with current WebdriverIO ecosystem
72
+ - Enhanced performance through updated dependencies
73
+ - Remove unused packages
74
+
75
+ ***
76
+
77
+ **Note**: This is an architectural improvement that modernizes the codebase while maintaining full backward compatibility. All existing functionality remains unchanged for users.
78
+
79
+ ***
80
+ ## Committers: 1
81
+
82
+ - Wim Selles ([@wswebcreation](https://github.com/wswebcreation))
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 OpenJS Foundation
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,12 @@
1
+ WebdriverIO Image Comparison Core
2
+ ==========================
3
+
4
+ ## Installation
5
+
6
+ The easiest way is to keep `@wdio/image-comparison-core` as a dev-dependency in your `package.json`, via:
7
+
8
+ ```sh
9
+ npm install @wdio/image-comparison-core --save-dev
10
+ ```
11
+
12
+ Instructions on how to get started can be found in the [visual testing](https://webdriver.io/docs/visual-testing) docs on the WebdriverIO project page.
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/dist/base.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ import type { Folders } from './base.interfaces.js';
2
+ import type { ClassOptions, DefaultOptions } from './helpers/options.interfaces.js';
3
+ export default class BaseClass {
4
+ defaultOptions: DefaultOptions;
5
+ folders: Folders;
6
+ constructor(options: ClassOptions);
7
+ /**
8
+ * Setup the folder structure for screenshots
9
+ * @private
10
+ */
11
+ private _setupFolders;
12
+ /**
13
+ * Clear the runtime folders (actual and diff)
14
+ * @private
15
+ */
16
+ private _clearRuntimeFolders;
17
+ }
18
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AAInF,MAAM,CAAC,OAAO,OAAO,SAAS;IAC1B,cAAc,EAAE,cAAc,CAAA;IAC9B,OAAO,EAAE,OAAO,CAAA;gBAEJ,OAAO,EAAE,YAAY;IAajC;;;OAGG;IACH,OAAO,CAAC,aAAa;IAgBrB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CAiB/B"}
@@ -0,0 +1,200 @@
1
+ export interface Folders {
2
+ /** The actual folder where the current screenshots need to be saved */
3
+ actualFolder: string;
4
+ /** The baseline folder where the baseline screenshots can be found */
5
+ baselineFolder: string;
6
+ /** The diff folder where the differences are saved */
7
+ diffFolder: string;
8
+ }
9
+ export interface FolderPaths {
10
+ /** The actual folder path where the current screenshots need to be saved */
11
+ actualFolderPath: string;
12
+ /** The baseline folder path where the baseline screenshots can be found */
13
+ baselineFolderPath: string;
14
+ /** The diff folder path where the differences are saved */
15
+ diffFolderPath: string;
16
+ }
17
+ export interface FilePaths {
18
+ /** The actual file path where the current screenshots need to be saved */
19
+ actualFilePath: string;
20
+ /** The baseline file path where the baseline screenshots can be found */
21
+ baselineFilePath: string;
22
+ /** The diff file path where the difference is saved */
23
+ diffFilePath: string;
24
+ }
25
+ export interface BaseWebScreenshotOptions {
26
+ /**
27
+ * Disable the blinking cursor
28
+ * @default false
29
+ */
30
+ disableBlinkingCursor?: boolean;
31
+ /**
32
+ * Disable all CSS animations
33
+ * @default false
34
+ */
35
+ disableCSSAnimation?: boolean;
36
+ /**
37
+ * Make all text transparent to focus on layout
38
+ * @default false
39
+ */
40
+ enableLayoutTesting?: boolean;
41
+ /**
42
+ * Use legacy screenshot method instead of BiDi protocol
43
+ * @default false
44
+ */
45
+ enableLegacyScreenshotMethod?: boolean;
46
+ /**
47
+ * Hide all scrollbars
48
+ * @default true
49
+ */
50
+ hideScrollBars?: boolean;
51
+ /**
52
+ * Elements to hide before taking screenshot
53
+ * @default []
54
+ */
55
+ hideElements?: HTMLElement[];
56
+ /**
57
+ * Elements to remove before taking screenshot
58
+ * @default []
59
+ */
60
+ removeElements?: HTMLElement[];
61
+ /**
62
+ * Wait for fonts to be loaded
63
+ * @default true
64
+ */
65
+ waitForFontsLoaded?: boolean;
66
+ }
67
+ export interface BaseMobileWebScreenshotOptions {
68
+ /**
69
+ * Padding for the address bar shadow
70
+ * @default 6
71
+ */
72
+ addressBarShadowPadding?: number;
73
+ /**
74
+ * Padding for the tool bar shadow
75
+ * @default 6
76
+ */
77
+ toolBarShadowPadding?: number;
78
+ }
79
+ export interface BaseImageCompareOptions {
80
+ /**
81
+ * Compare images and discard alpha
82
+ * @default false
83
+ */
84
+ ignoreAlpha?: boolean;
85
+ /**
86
+ * Compare images and discard anti aliasing
87
+ * @default false
88
+ */
89
+ ignoreAntialiasing?: boolean;
90
+ /**
91
+ * Compare images in black and white mode
92
+ * @default false
93
+ */
94
+ ignoreColors?: boolean;
95
+ /**
96
+ * Compare with reduced color sensitivity
97
+ * @default false
98
+ */
99
+ ignoreLess?: boolean;
100
+ /**
101
+ * Compare with maximum sensitivity
102
+ * @default false
103
+ */
104
+ ignoreNothing?: boolean;
105
+ /**
106
+ * Return raw mismatch percentage without rounding
107
+ * @default false
108
+ */
109
+ rawMisMatchPercentage?: boolean;
110
+ /**
111
+ * Return all comparison data
112
+ * @default false
113
+ */
114
+ returnAllCompareData?: boolean;
115
+ /**
116
+ * Save images only above this mismatch tolerance
117
+ * @default 0
118
+ */
119
+ saveAboveTolerance?: number;
120
+ /**
121
+ * Scale images to same size before comparison
122
+ * @default false
123
+ */
124
+ scaleImagesToSameSize?: boolean;
125
+ }
126
+ export interface BaseMobileBlockOutOptions {
127
+ /**
128
+ * Block out the side bar
129
+ * @default false
130
+ */
131
+ blockOutSideBar?: boolean;
132
+ /**
133
+ * Block out the status bar
134
+ * @default false
135
+ */
136
+ blockOutStatusBar?: boolean;
137
+ /**
138
+ * Block out the tool bar
139
+ * @default false
140
+ */
141
+ blockOutToolBar?: boolean;
142
+ }
143
+ export interface BaseDeviceInfo {
144
+ /**
145
+ * The name of the browser
146
+ * @default ''
147
+ */
148
+ browserName: string;
149
+ /**
150
+ * The name of the device
151
+ * @default ''
152
+ */
153
+ deviceName: string;
154
+ /**
155
+ * The device pixel ratio
156
+ * @default 1
157
+ */
158
+ devicePixelRatio: number;
159
+ /**
160
+ * Whether the device is Android
161
+ * @default false
162
+ */
163
+ isAndroid: boolean;
164
+ /**
165
+ * Whether the device is iOS
166
+ * @default false
167
+ */
168
+ isIOS: boolean;
169
+ /**
170
+ * Whether the device is mobile
171
+ * @default false
172
+ */
173
+ isMobile: boolean;
174
+ }
175
+ export interface BaseCoordinates {
176
+ /** The x-coordinate */
177
+ x: number;
178
+ /** The y-coordinate */
179
+ y: number;
180
+ }
181
+ export interface BaseDimensions {
182
+ /** The width */
183
+ width: number;
184
+ /** The height */
185
+ height: number;
186
+ }
187
+ /** Base rectangle interface combining coordinates and dimensions */
188
+ export interface BaseRectangle extends BaseCoordinates, BaseDimensions {
189
+ }
190
+ export interface BaseBoundingBox {
191
+ /** The bottom coordinate */
192
+ bottom: number;
193
+ /** The right coordinate */
194
+ right: number;
195
+ /** The left coordinate */
196
+ left: number;
197
+ /** The top coordinate */
198
+ top: number;
199
+ }
200
+ //# sourceMappingURL=base.interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.interfaces.d.ts","sourceRoot":"","sources":["../src/base.interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
package/dist/base.js ADDED
@@ -0,0 +1,58 @@
1
+ import { join, normalize } from 'node:path';
2
+ import { rmSync } from 'node:fs';
3
+ import logger from '@wdio/logger';
4
+ import { defaultOptions } from './helpers/options.js';
5
+ import { FOLDERS } from './helpers/constants.js';
6
+ const log = logger('@wdio/visual-service:@wdio/image-comparison-core');
7
+ export default class BaseClass {
8
+ defaultOptions;
9
+ folders;
10
+ constructor(options) {
11
+ // Determine default options
12
+ this.defaultOptions = defaultOptions(options);
13
+ // Setup folder structure
14
+ this.folders = this._setupFolders(options);
15
+ // Clear runtime folders if requested
16
+ if (options.clearRuntimeFolder) {
17
+ this._clearRuntimeFolders();
18
+ }
19
+ }
20
+ /**
21
+ * Setup the folder structure for screenshots
22
+ * @private
23
+ */
24
+ _setupFolders(options) {
25
+ const baselineFolder = typeof options.baselineFolder === 'function'
26
+ ? options.baselineFolder(options)
27
+ : normalize(options.baselineFolder || FOLDERS.DEFAULT.BASE);
28
+ const baseFolder = typeof options.screenshotPath === 'function'
29
+ ? options.screenshotPath(options)
30
+ : normalize(options.screenshotPath || FOLDERS.DEFAULT.SCREENSHOTS);
31
+ return {
32
+ actualFolder: join(baseFolder, FOLDERS.ACTUAL),
33
+ baselineFolder,
34
+ diffFolder: join(baseFolder, FOLDERS.DIFF),
35
+ };
36
+ }
37
+ /**
38
+ * Clear the runtime folders (actual and diff)
39
+ * @private
40
+ */
41
+ _clearRuntimeFolders() {
42
+ log.info('\x1b[33m\n##############################\n!!CLEARING RUNTIME FOLDERS!!\n##############################\x1b[0m');
43
+ try {
44
+ rmSync(this.folders.actualFolder, { recursive: true, force: true });
45
+ log.debug(`Cleared actual folder: ${this.folders.actualFolder}`);
46
+ }
47
+ catch (error) {
48
+ log.warn(`Failed to clear actual folder ${this.folders.actualFolder}:`, error);
49
+ }
50
+ try {
51
+ rmSync(this.folders.diffFolder, { recursive: true, force: true });
52
+ log.debug(`Cleared diff folder: ${this.folders.diffFolder}`);
53
+ }
54
+ catch (error) {
55
+ log.warn(`Failed to clear diff folder ${this.folders.diffFolder}:`, error);
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.test.d.ts","sourceRoot":"","sources":["../src/base.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ import { describe, it, expect, vi } from 'vitest';
2
+ import { rmSync } from 'node:fs';
3
+ import BaseClass from './base.js';
4
+ vi.mock('node:fs', () => ({
5
+ ...vi.importActual('node:fs'),
6
+ rmSync: vi.fn(),
7
+ }));
8
+ describe('BaseClass', () => {
9
+ it('initializes default options correctly', () => {
10
+ const options = {};
11
+ const instance = new BaseClass(options);
12
+ expect(instance.defaultOptions).toMatchSnapshot();
13
+ });
14
+ it('initializes folders with default values', () => {
15
+ const instance = new BaseClass({});
16
+ expect(instance.folders.actualFolder).toMatchSnapshot();
17
+ expect(instance.folders.baselineFolder).toMatchSnapshot();
18
+ expect(instance.folders.diffFolder).toMatchSnapshot();
19
+ });
20
+ it('initializes folders with custom values', () => {
21
+ const options = {
22
+ baselineFolder: 'custom/baseline',
23
+ screenshotPath: 'custom/screenshots',
24
+ };
25
+ const instance = new BaseClass(options);
26
+ expect(instance.folders.baselineFolder).toBe('custom/baseline');
27
+ expect(instance.folders.actualFolder).toContain('custom/screenshots');
28
+ });
29
+ it('handles functional baselineFolder and screenshotPath', () => {
30
+ const options = {
31
+ baselineFolder: () => 'functional/baseline',
32
+ screenshotPath: () => 'functional/screenshots',
33
+ };
34
+ const instance = new BaseClass(options);
35
+ expect(instance.folders.baselineFolder).toBe('functional/baseline');
36
+ expect(instance.folders.actualFolder).toContain('functional/screenshots');
37
+ });
38
+ it('clears runtime folders if clearRuntimeFolder is true', () => {
39
+ const options = {
40
+ clearRuntimeFolder: true,
41
+ };
42
+ new BaseClass(options);
43
+ expect(rmSync).toHaveBeenCalledTimes(2);
44
+ });
45
+ });
@@ -0,0 +1,2 @@
1
+ export declare function checkMetaTag(): void;
2
+ //# sourceMappingURL=checkMetaTag.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkMetaTag.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/checkMetaTag.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,SAQ3B"}
@@ -0,0 +1,9 @@
1
+ export function checkMetaTag() {
2
+ const meta = document.querySelector("meta[name='viewport']");
3
+ if (!meta) {
4
+ const newMeta = document.createElement('meta');
5
+ newMeta.name = 'viewport';
6
+ newMeta.content = 'width=device-width, initial-scale=1';
7
+ document.head.appendChild(newMeta);
8
+ }
9
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=checkMetaTag.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkMetaTag.test.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/checkMetaTag.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ // @vitest-environment jsdom
2
+ import { describe, it, expect, beforeEach } from 'vitest';
3
+ import { checkMetaTag } from './checkMetaTag.js';
4
+ describe('checkMetaTag', () => {
5
+ beforeEach(() => {
6
+ document.head.innerHTML = '';
7
+ });
8
+ it('should add a viewport meta tag when not present', () => {
9
+ expect(document.querySelector('meta[name="viewport"]')).toBeNull();
10
+ checkMetaTag();
11
+ const meta = document.querySelector('meta[name="viewport"]');
12
+ expect(meta).not.toBeNull();
13
+ expect(meta?.content).toBe('width=device-width, initial-scale=1');
14
+ });
15
+ it('should not add a viewport meta tag if one already exists', () => {
16
+ const existing = document.createElement('meta');
17
+ existing.name = 'viewport';
18
+ existing.content = 'custom';
19
+ document.head.appendChild(existing);
20
+ checkMetaTag();
21
+ const metas = Array.from(document.querySelectorAll('meta[name="viewport"]'));
22
+ expect(metas.length).toBe(1);
23
+ expect(metas[0].content).toBe('custom');
24
+ });
25
+ });
@@ -0,0 +1,8 @@
1
+ export interface CssOptions {
2
+ addressBarPadding: number;
3
+ disableCSSAnimation: boolean;
4
+ disableBlinkingCursor: boolean;
5
+ id: string;
6
+ toolBarPadding: number;
7
+ }
8
+ //# sourceMappingURL=customCss.interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"customCss.interfaces.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/customCss.interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IAEvB,iBAAiB,EAAE,MAAM,CAAC;IAE1B,mBAAmB,EAAE,OAAO,CAAC;IAE7B,qBAAqB,EAAE,OAAO,CAAC;IAE/B,EAAE,EAAE,MAAM,CAAC;IAEX,cAAc,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { TabbableOptions } from '../commands/tabbable.interfaces.js';
2
+ /**
3
+ * This method is based on this blog post
4
+ * https://vivrichards.co.uk/accessibility/automating-page-tab-flows-using-visual-testing-and-javascript
5
+ * by Viv Richards and optimized for using Canvas
6
+ */
7
+ export default function drawTabbableOnCanvas(drawOptions: TabbableOptions): void;
8
+ //# sourceMappingURL=drawTabbableOnCanvas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawTabbableOnCanvas.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/drawTabbableOnCanvas.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAA8B,eAAe,EAAE,MAAM,oCAAoC,CAAA;AAErG;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,WAAW,EAAE,eAAe,QAyTxE"}
@@ -0,0 +1,4 @@
1
+ import type { BaseCoordinates } from '../base.interfaces.js';
2
+ export interface ElementCoordinate extends BaseCoordinates {
3
+ }
4
+ //# sourceMappingURL=drawTabbableOnCanvas.interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawTabbableOnCanvas.interfaces.d.ts","sourceRoot":"","sources":["../../src/clientSideScripts/drawTabbableOnCanvas.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAE5D,MAAM,WAAW,iBAAkB,SAAQ,eAAe;CAAE"}