testcafe 1.14.1 → 1.14.2

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 (332) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE +21 -21
  3. package/bin/testcafe-with-v8-flag-filter.js +0 -0
  4. package/lib/api/exportable-lib/index.js +49 -49
  5. package/lib/api/request-hooks/assert-type.js +7 -7
  6. package/lib/api/request-hooks/hook-method-names.js +9 -9
  7. package/lib/api/request-hooks/hook.js +32 -32
  8. package/lib/api/request-hooks/interfaces.js +2 -2
  9. package/lib/api/request-hooks/request-logger.js +112 -112
  10. package/lib/api/request-hooks/request-mock/create-request-mock.js +10 -10
  11. package/lib/api/request-hooks/request-mock/index.js +44 -44
  12. package/lib/api/request-hooks/request-mock.js +46 -46
  13. package/lib/api/structure/base-unit.js +11 -11
  14. package/lib/api/structure/fixture.js +75 -75
  15. package/lib/api/structure/interfaces.js +2 -2
  16. package/lib/api/structure/test-file.js +31 -31
  17. package/lib/api/structure/test-timeout.js +9 -9
  18. package/lib/api/structure/test.js +85 -85
  19. package/lib/api/structure/testing-unit.js +89 -89
  20. package/lib/api/structure/unit-type.js +9 -9
  21. package/lib/api/test-controller/assertion.js +88 -88
  22. package/lib/api/test-controller/execution-context.js +82 -82
  23. package/lib/api/test-controller/index.js +358 -358
  24. package/lib/api/test-controller/proxy.js +28 -28
  25. package/lib/api/test-page-url.js +60 -60
  26. package/lib/api/test-run-tracker.js +68 -68
  27. package/lib/api/wrap-test-function.js +49 -49
  28. package/lib/assertions/executor.js +74 -74
  29. package/lib/assertions/get-fn.js +46 -46
  30. package/lib/assertions/type.js +20 -20
  31. package/lib/assets/content-types.js +9 -9
  32. package/lib/assets/injectables.js +18 -18
  33. package/lib/browser/connection/command.js +10 -10
  34. package/lib/browser/connection/error-hints.js +9 -9
  35. package/lib/browser/connection/gateway.js +159 -159
  36. package/lib/browser/connection/get-hints.js +33 -33
  37. package/lib/browser/connection/heartbeat-status.js +8 -8
  38. package/lib/browser/connection/index.js +328 -328
  39. package/lib/browser/connection/remotes-queue.js +46 -46
  40. package/lib/browser/connection/service-routes.js +12 -12
  41. package/lib/browser/connection/status.js +12 -12
  42. package/lib/browser/interfaces.js +2 -2
  43. package/lib/browser/provider/built-in/dedicated/base.js +80 -80
  44. package/lib/browser/provider/built-in/dedicated/chrome/browser-client.js +204 -204
  45. package/lib/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +17 -17
  46. package/lib/browser/provider/built-in/dedicated/chrome/config.js +110 -110
  47. package/lib/browser/provider/built-in/dedicated/chrome/create-temp-profile.js +45 -45
  48. package/lib/browser/provider/built-in/dedicated/chrome/elapsed-upperbounds.js +15 -15
  49. package/lib/browser/provider/built-in/dedicated/chrome/index.js +102 -102
  50. package/lib/browser/provider/built-in/dedicated/chrome/interfaces.js +2 -2
  51. package/lib/browser/provider/built-in/dedicated/chrome/local-chrome.js +24 -24
  52. package/lib/browser/provider/built-in/dedicated/chrome/runtime-info.js +29 -29
  53. package/lib/browser/provider/built-in/dedicated/edge/index.js +10 -10
  54. package/lib/browser/provider/built-in/dedicated/edge/runtime-info.js +29 -29
  55. package/lib/browser/provider/built-in/dedicated/firefox/config.js +33 -33
  56. package/lib/browser/provider/built-in/dedicated/firefox/create-temp-profile.js +78 -78
  57. package/lib/browser/provider/built-in/dedicated/firefox/index.js +73 -73
  58. package/lib/browser/provider/built-in/dedicated/firefox/local-firefox.js +36 -36
  59. package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/commands.js +13 -13
  60. package/lib/browser/provider/built-in/dedicated/firefox/marionette-client/index.js +200 -200
  61. package/lib/browser/provider/built-in/dedicated/firefox/runtime-info.js +17 -17
  62. package/lib/browser/provider/built-in/index.js +21 -21
  63. package/lib/browser/provider/built-in/locally-installed.js +30 -30
  64. package/lib/browser/provider/built-in/path.js +47 -47
  65. package/lib/browser/provider/built-in/remote.js +58 -58
  66. package/lib/browser/provider/index.js +303 -303
  67. package/lib/browser/provider/parse-provider-name.js +16 -16
  68. package/lib/browser/provider/plugin-host.js +121 -121
  69. package/lib/browser/provider/pool.js +115 -115
  70. package/lib/browser/provider/utils/argument-parsing.js +74 -74
  71. package/lib/browser/provider/utils/browser-starter.js +34 -34
  72. package/lib/browser/provider/utils/client-functions.js +24 -24
  73. package/lib/browser/provider/utils/get-maximized-headless-window-size.js +9 -9
  74. package/lib/cli/argument-parser.js +284 -284
  75. package/lib/cli/authentication-helper.js +35 -35
  76. package/lib/cli/cli.js +134 -134
  77. package/lib/cli/correct-browsers-and-sources.js +40 -40
  78. package/lib/cli/index.js +19 -19
  79. package/lib/cli/log.js +43 -43
  80. package/lib/cli/remotes-wizard.js +36 -36
  81. package/lib/cli/termination-handler.js +38 -38
  82. package/lib/client/automation/index.js +34 -16
  83. package/lib/client/automation/index.min.js +1 -1
  84. package/lib/client/browser/idle-page/index.html.mustache +35 -35
  85. package/lib/client/browser/idle-page/logo.svg +86 -86
  86. package/lib/client/core/index.js +14 -14
  87. package/lib/client/driver/index.js +46 -16
  88. package/lib/client/driver/index.min.js +1 -1
  89. package/lib/client/driver/internal-properties.js +9 -9
  90. package/lib/client/test-run/iframe.js.mustache +17 -17
  91. package/lib/client/test-run/index.js.mustache +51 -51
  92. package/lib/client/ui/index.js +14 -14
  93. package/lib/client/ui/sprite.svg +42 -42
  94. package/lib/client-functions/builder-symbol.js +4 -4
  95. package/lib/client-functions/client-function-builder.js +155 -155
  96. package/lib/client-functions/replicator.js +61 -61
  97. package/lib/client-functions/return-single-prop-mode.js +8 -8
  98. package/lib/client-functions/selector-api-execution-mode.js +20 -20
  99. package/lib/client-functions/selectors/add-api.js +645 -645
  100. package/lib/client-functions/selectors/create-snapshot-methods.js +13 -13
  101. package/lib/client-functions/selectors/prepare-api-args.js +20 -20
  102. package/lib/client-functions/selectors/selector-attribute-filter.js +22 -22
  103. package/lib/client-functions/selectors/selector-builder.js +153 -153
  104. package/lib/client-functions/selectors/selector-text-filter.js +43 -43
  105. package/lib/client-functions/selectors/snapshot-properties.js +48 -48
  106. package/lib/client-functions/types.js +18 -18
  107. package/lib/compiler/babel/format-babel-produced-code.js +10 -10
  108. package/lib/compiler/babel/get-base-babel-options.js +11 -11
  109. package/lib/compiler/babel/load-libs.js +63 -63
  110. package/lib/compiler/babel/preset-stage-2.js +19 -19
  111. package/lib/compiler/compile-client-function.js +73 -73
  112. package/lib/compiler/compilers.js +33 -33
  113. package/lib/compiler/index.js +92 -92
  114. package/lib/compiler/interfaces.js +2 -2
  115. package/lib/compiler/test-file/api-based.js +146 -146
  116. package/lib/compiler/test-file/base.js +36 -36
  117. package/lib/compiler/test-file/exportble-lib-path.js +5 -5
  118. package/lib/compiler/test-file/formats/coffeescript/compiler.js +38 -38
  119. package/lib/compiler/test-file/formats/coffeescript/get-test-list.js +29 -29
  120. package/lib/compiler/test-file/formats/es-next/compiler.js +42 -42
  121. package/lib/compiler/test-file/formats/es-next/get-test-list.js +166 -166
  122. package/lib/compiler/test-file/formats/es-next/is-flow-code.js +7 -7
  123. package/lib/compiler/test-file/formats/raw.js +85 -85
  124. package/lib/compiler/test-file/formats/typescript/compiler.js +135 -135
  125. package/lib/compiler/test-file/formats/typescript/get-test-list.js +185 -185
  126. package/lib/compiler/test-file/test-file-parser-base.js +214 -214
  127. package/lib/configuration/configuration-base.js +165 -165
  128. package/lib/configuration/constants.js +9 -9
  129. package/lib/configuration/customizable-compilers.js +7 -7
  130. package/lib/configuration/default-values.js +51 -51
  131. package/lib/configuration/interfaces.js +2 -2
  132. package/lib/configuration/option-names.js +53 -53
  133. package/lib/configuration/option-source.js +9 -9
  134. package/lib/configuration/option.js +14 -14
  135. package/lib/configuration/quarantine-option-names.js +8 -8
  136. package/lib/configuration/run-option-names.js +26 -26
  137. package/lib/configuration/screenshot-option-names.js +10 -10
  138. package/lib/configuration/testcafe-configuration.js +163 -163
  139. package/lib/configuration/types.js +2 -2
  140. package/lib/configuration/typescript-configuration.js +62 -62
  141. package/lib/custom-client-scripts/assert-type.js +7 -7
  142. package/lib/custom-client-scripts/client-script-init.js +2 -2
  143. package/lib/custom-client-scripts/client-script.js +106 -106
  144. package/lib/custom-client-scripts/get-code.js +11 -11
  145. package/lib/custom-client-scripts/get-url.js +6 -6
  146. package/lib/custom-client-scripts/load.js +15 -15
  147. package/lib/custom-client-scripts/problematic-scripts.js +2 -2
  148. package/lib/custom-client-scripts/routing.js +36 -36
  149. package/lib/custom-client-scripts/utils.js +60 -60
  150. package/lib/embedding-utils.js +83 -83
  151. package/lib/errors/create-stack-filter.js +18 -18
  152. package/lib/errors/error-list.js +26 -26
  153. package/lib/errors/get-callsite.js +31 -31
  154. package/lib/errors/internal-modules-prefix.js +8 -8
  155. package/lib/errors/is-internal-stack-frame.js +45 -45
  156. package/lib/errors/process-test-fn-error.js +37 -37
  157. package/lib/errors/runtime/index.js +123 -123
  158. package/lib/errors/runtime/templates.js +115 -115
  159. package/lib/errors/runtime/type-assertions.js +112 -112
  160. package/lib/errors/stack-cleaning-hook.js +64 -64
  161. package/lib/errors/test-run/formattable-adapter.js +59 -59
  162. package/lib/errors/test-run/index.js +301 -301
  163. package/lib/errors/test-run/render-error-template.js +31 -31
  164. package/lib/errors/test-run/templates.js +91 -91
  165. package/lib/errors/test-run/utils.js +89 -89
  166. package/lib/errors/types.js +156 -156
  167. package/lib/index.js +81 -81
  168. package/lib/live/bootstrapper.js +43 -43
  169. package/lib/live/controller.js +107 -107
  170. package/lib/live/file-watcher/index.js +67 -67
  171. package/lib/live/file-watcher/modules-graph.js +58 -58
  172. package/lib/live/keyboard-observer.js +76 -76
  173. package/lib/live/logger/index.js +64 -64
  174. package/lib/live/test-run-controller.js +96 -96
  175. package/lib/live/test-run-state.js +6 -6
  176. package/lib/live/test-run.js +56 -56
  177. package/lib/live/test-runner.js +167 -167
  178. package/lib/load-assets.js +29 -29
  179. package/lib/notifications/add-rendered-warning.js +16 -16
  180. package/lib/notifications/debug-logger.js +78 -78
  181. package/lib/notifications/deprecated.js +24 -24
  182. package/lib/notifications/information-message.js +9 -9
  183. package/lib/notifications/warning-log.js +31 -31
  184. package/lib/notifications/warning-message.js +47 -47
  185. package/lib/reporter/command/command-formatter.js +120 -109
  186. package/lib/reporter/command/format-command.js +8 -8
  187. package/lib/reporter/command/interfaces.js +2 -2
  188. package/lib/reporter/index.js +319 -314
  189. package/lib/reporter/interfaces.js +2 -2
  190. package/lib/reporter/plugin-host.js +135 -135
  191. package/lib/reporter/plugin-methods.js +12 -12
  192. package/lib/role/index.js +74 -74
  193. package/lib/role/marker-symbol.js +7 -7
  194. package/lib/role/phase.js +9 -9
  195. package/lib/runner/bootstrapper.js +271 -271
  196. package/lib/runner/browser-job-result.js +9 -9
  197. package/lib/runner/browser-job.js +152 -152
  198. package/lib/runner/browser-set.js +114 -114
  199. package/lib/runner/fixture-hook-controller.js +85 -85
  200. package/lib/runner/index.js +449 -449
  201. package/lib/runner/interfaces.js +2 -2
  202. package/lib/runner/reporter-stream-controller.js +27 -27
  203. package/lib/runner/task/index.js +151 -151
  204. package/lib/runner/task/phase.js +9 -9
  205. package/lib/runner/test-run-controller.js +165 -165
  206. package/lib/runner/tested-app.js +72 -72
  207. package/lib/screenshots/capturer.js +141 -141
  208. package/lib/screenshots/constants.js +11 -11
  209. package/lib/screenshots/crop.js +111 -111
  210. package/lib/screenshots/default-extension.js +4 -4
  211. package/lib/screenshots/index.js +67 -67
  212. package/lib/screenshots/utils.js +39 -39
  213. package/lib/services/compiler/host.js +190 -190
  214. package/lib/services/compiler/io.js +9 -9
  215. package/lib/services/compiler/protocol.js +17 -16
  216. package/lib/services/compiler/service.js +225 -212
  217. package/lib/services/compiler/test-run-proxy.js +111 -111
  218. package/lib/services/interfaces.js +2 -2
  219. package/lib/services/process-title.js +8 -8
  220. package/lib/services/serialization/prepare-options.js +17 -17
  221. package/lib/services/serialization/replicator/create-replicator.js +25 -25
  222. package/lib/services/serialization/replicator/custom-error-transform.js +26 -26
  223. package/lib/services/serialization/test-structure.js +92 -92
  224. package/lib/services/utils/ipc/interfaces.js +30 -30
  225. package/lib/services/utils/ipc/io.js +108 -108
  226. package/lib/services/utils/ipc/message.js +75 -75
  227. package/lib/services/utils/ipc/packet.js +55 -55
  228. package/lib/services/utils/ipc/proxy.js +109 -109
  229. package/lib/services/utils/ipc/transport.js +64 -64
  230. package/lib/shared/errors/index.js +382 -382
  231. package/lib/shared/node-modules-folder-name.js +4 -4
  232. package/lib/test-run/bookmark.js +90 -90
  233. package/lib/test-run/browser-console-messages.js +73 -73
  234. package/lib/test-run/browser-manipulation-queue.js +92 -92
  235. package/lib/test-run/client-messages.js +9 -9
  236. package/lib/test-run/commands/actions.js +486 -483
  237. package/lib/test-run/commands/assertion.js +45 -45
  238. package/lib/test-run/commands/base.js +14 -14
  239. package/lib/test-run/commands/browser-manipulation.js +95 -95
  240. package/lib/test-run/commands/from-object.js +82 -82
  241. package/lib/test-run/commands/observation.js +61 -61
  242. package/lib/test-run/commands/options.js +231 -215
  243. package/lib/test-run/commands/service.js +54 -48
  244. package/lib/test-run/commands/type.js +65 -64
  245. package/lib/test-run/commands/utils.js +87 -87
  246. package/lib/test-run/commands/validations/argument.js +90 -90
  247. package/lib/test-run/commands/validations/factories.js +47 -47
  248. package/lib/test-run/commands/validations/initializers.js +44 -44
  249. package/lib/test-run/debug-log.js +32 -32
  250. package/lib/test-run/execute-js-expression.js +74 -74
  251. package/lib/test-run/index.js +823 -799
  252. package/lib/test-run/marker-symbol.js +7 -7
  253. package/lib/test-run/observed-callsites-storage.js +17 -17
  254. package/lib/test-run/phase.js +16 -16
  255. package/lib/test-run/session-controller.js +104 -104
  256. package/lib/testcafe.js +118 -118
  257. package/lib/utils/assignable.js +39 -39
  258. package/lib/utils/async-event-emitter.js +28 -28
  259. package/lib/utils/async-queue.js +14 -14
  260. package/lib/utils/browser-connection-timeouts.js +19 -19
  261. package/lib/utils/callsite.js +17 -17
  262. package/lib/utils/check-file-path.js +31 -31
  263. package/lib/utils/check-url.js +51 -51
  264. package/lib/utils/convert-to-best-fit-type.js +16 -16
  265. package/lib/utils/correct-file-path.js +21 -21
  266. package/lib/utils/define-lazy-property.js +13 -13
  267. package/lib/utils/delay.js +6 -6
  268. package/lib/utils/delegated-api.js +44 -44
  269. package/lib/utils/detect-display.js +6 -6
  270. package/lib/utils/detect-ffmpeg.js +44 -44
  271. package/lib/utils/diff/colors.js +29 -29
  272. package/lib/utils/diff/index.js +52 -52
  273. package/lib/utils/diff/util.js +23 -23
  274. package/lib/utils/diff.js +29 -29
  275. package/lib/utils/escape-user-agent.js +10 -10
  276. package/lib/utils/flag-list.js +17 -17
  277. package/lib/utils/get-any-key.js +8 -8
  278. package/lib/utils/get-browser.js +8 -8
  279. package/lib/utils/get-common-path.js +34 -34
  280. package/lib/utils/get-filter-fn.js +40 -40
  281. package/lib/utils/get-options/base.js +36 -36
  282. package/lib/utils/get-options/compiler.js +33 -33
  283. package/lib/utils/get-options/grep.js +15 -15
  284. package/lib/utils/get-options/index.js +20 -20
  285. package/lib/utils/get-options/meta.js +22 -22
  286. package/lib/utils/get-options/quarantine.js +91 -91
  287. package/lib/utils/get-options/screenshot.js +17 -17
  288. package/lib/utils/get-options/ssl.js +45 -45
  289. package/lib/utils/get-options/video.js +10 -10
  290. package/lib/utils/get-viewport-width.js +17 -17
  291. package/lib/utils/guard-time-execution.js +10 -10
  292. package/lib/utils/handle-errors.js +74 -74
  293. package/lib/utils/handle-tag-args.js +8 -8
  294. package/lib/utils/http.js +30 -30
  295. package/lib/utils/is-localhost.js +11 -11
  296. package/lib/utils/is-password-input.js +11 -0
  297. package/lib/utils/is-repl.js +10 -10
  298. package/lib/utils/is-window-in-iframe.js +6 -6
  299. package/lib/utils/limit-number.js +10 -10
  300. package/lib/utils/make-reg-exp.js +7 -7
  301. package/lib/utils/moment-loader.js +20 -20
  302. package/lib/utils/parse-file-list.js +71 -71
  303. package/lib/utils/parse-user-agent.js +55 -55
  304. package/lib/utils/path-pattern.js +114 -114
  305. package/lib/utils/prepare-reporters.js +30 -30
  306. package/lib/utils/prerender-callsite.js +18 -18
  307. package/lib/utils/process.js +119 -119
  308. package/lib/utils/promisified-functions.js +46 -46
  309. package/lib/utils/re-executable-promise.js +39 -39
  310. package/lib/utils/render-callsite-sync.js +29 -29
  311. package/lib/utils/render-template.js +9 -9
  312. package/lib/utils/reporter.js +30 -30
  313. package/lib/utils/resolve-path-relatively-cwd.js +7 -7
  314. package/lib/utils/string.js +105 -105
  315. package/lib/utils/temp-directory/cleanup-process/commands.js +7 -7
  316. package/lib/utils/temp-directory/cleanup-process/index.js +143 -143
  317. package/lib/utils/temp-directory/cleanup-process/worker.js +58 -58
  318. package/lib/utils/temp-directory/index.js +87 -87
  319. package/lib/utils/temp-directory/lockfile.js +56 -56
  320. package/lib/utils/thennable.js +7 -7
  321. package/lib/utils/timer.js +15 -15
  322. package/lib/utils/to-posix-path.js +8 -8
  323. package/lib/utils/types.js +2 -2
  324. package/lib/video-recorder/interfaces.js +2 -2
  325. package/lib/video-recorder/process.js +126 -126
  326. package/lib/video-recorder/recorder.js +136 -136
  327. package/lib/video-recorder/test-run-video-recorder.js +69 -69
  328. package/lib/video-recorder/videos.js +37 -37
  329. package/package.json +2 -2
  330. package/ts-defs/index.d.ts +25 -14
  331. package/ts-defs/selectors.d.ts +16 -5
  332. package/ts-defs/testcafe-scripts.d.ts +17 -6
@@ -1,383 +1,383 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UncaughtErrorInNativeDialogHandler = exports.NativeDialogNotHandledError = exports.CurrentIframeIsInvisibleError = exports.CurrentIframeNotFoundError = exports.CannotRestoreChildWindowError = exports.ChildWindowClosedBeforeSwitchingError = exports.PreviousWindowNotFoundError = exports.ParentWindowNotFoundError = exports.WindowNotFoundError = exports.SwitchToWindowPredicateError = exports.CannotCloseWindowWithoutParentError = exports.CannotCloseWindowWithChildrenError = exports.CloseChildWindowError = exports.CannotSwitchToWindowError = exports.ChildWindowIsNotLoadedError = exports.ChildWindowNotFoundError = exports.CurrentIframeIsNotLoadedError = exports.ActionIframeIsNotLoadedError = exports.ActionElementNotIframeError = exports.InvalidElementScreenshotDimensionsError = exports.ActionInvalidScrollTargetError = exports.ActionElementIsNotFileInputError = exports.ActionCannotFindFileToUploadError = exports.ActionIncorrectKeysError = exports.ActionRootContainerNotFoundError = exports.ActionElementNonContentEditableError = exports.ActionElementNotTextAreaError = exports.ActionElementNonEditableError = exports.ActionAdditionalSelectorMatchesWrongNodeTypeError = exports.ActionAdditionalElementIsInvisibleError = exports.ActionAdditionalElementNotFoundError = exports.ActionSelectorMatchesWrongNodeTypeError = exports.ActionElementIsInvisibleError = exports.ActionElementNotFoundError = exports.ActionSpeedOptionError = exports.ActionBooleanOptionError = exports.ActionPositiveIntegerOptionError = exports.ActionIntegerOptionError = exports.UncaughtErrorInCustomClientScriptLoadedFromModule = exports.UncaughtErrorInCustomClientScriptCode = exports.UncaughtErrorInCustomDOMPropertyCode = exports.UncaughtErrorInClientFunctionCode = exports.UncaughtErrorOnPage = exports.CannotObtainInfoForElementSpecifiedBySelectorError = exports.InvalidSelectorResultError = exports.DomNodeClientFunctionResultError = exports.ClientFunctionExecutionInterruptionError = exports.TestRunErrorBase = void 0;
4
- // -------------------------------------------------------------
5
- // WARNING: this file is used by both the client and the server.
6
- // Do not use any browser or node-specific API!
7
- // -------------------------------------------------------------
8
- const types_1 = require("../../errors/types");
9
- // Base
10
- //--------------------------------------------------------------------
11
- class TestRunErrorBase {
12
- constructor(code) {
13
- this.code = code;
14
- this.isTestCafeError = true;
15
- this.callsite = null;
16
- }
17
- }
18
- exports.TestRunErrorBase = TestRunErrorBase;
19
- class ActionOptionErrorBase extends TestRunErrorBase {
20
- constructor(code, optionName, actualValue) {
21
- super(code);
22
- this.optionName = optionName;
23
- this.actualValue = actualValue;
24
- }
25
- }
26
- // Client function errors
27
- //--------------------------------------------------------------------
28
- class ClientFunctionExecutionInterruptionError extends TestRunErrorBase {
29
- constructor(instantiationCallsiteName) {
30
- super(types_1.TEST_RUN_ERRORS.clientFunctionExecutionInterruptionError);
31
- this.instantiationCallsiteName = instantiationCallsiteName;
32
- }
33
- }
34
- exports.ClientFunctionExecutionInterruptionError = ClientFunctionExecutionInterruptionError;
35
- class DomNodeClientFunctionResultError extends TestRunErrorBase {
36
- constructor(instantiationCallsiteName) {
37
- super(types_1.TEST_RUN_ERRORS.domNodeClientFunctionResultError);
38
- this.instantiationCallsiteName = instantiationCallsiteName;
39
- }
40
- }
41
- exports.DomNodeClientFunctionResultError = DomNodeClientFunctionResultError;
42
- // Selector errors
43
- //--------------------------------------------------------------------
44
- class SelectorErrorBase extends TestRunErrorBase {
45
- constructor(code, { apiFnChain, apiFnIndex }) {
46
- super(code);
47
- this.apiFnChain = apiFnChain;
48
- this.apiFnIndex = apiFnIndex;
49
- }
50
- }
51
- class InvalidSelectorResultError extends TestRunErrorBase {
52
- constructor() {
53
- super(types_1.TEST_RUN_ERRORS.invalidSelectorResultError);
54
- }
55
- }
56
- exports.InvalidSelectorResultError = InvalidSelectorResultError;
57
- class CannotObtainInfoForElementSpecifiedBySelectorError extends SelectorErrorBase {
58
- constructor(callsite, apiFnArgs) {
59
- super(types_1.TEST_RUN_ERRORS.cannotObtainInfoForElementSpecifiedBySelectorError, apiFnArgs);
60
- this.callsite = callsite;
61
- }
62
- }
63
- exports.CannotObtainInfoForElementSpecifiedBySelectorError = CannotObtainInfoForElementSpecifiedBySelectorError;
64
- // Uncaught errors
65
- //--------------------------------------------------------------------
66
- class UncaughtErrorOnPage extends TestRunErrorBase {
67
- constructor(errStack, pageDestUrl) {
68
- super(types_1.TEST_RUN_ERRORS.uncaughtErrorOnPage);
69
- this.errStack = errStack;
70
- this.pageDestUrl = pageDestUrl;
71
- }
72
- }
73
- exports.UncaughtErrorOnPage = UncaughtErrorOnPage;
74
- class UncaughtErrorInClientFunctionCode extends TestRunErrorBase {
75
- constructor(instantiationCallsiteName, err) {
76
- super(types_1.TEST_RUN_ERRORS.uncaughtErrorInClientFunctionCode);
77
- this.errMsg = String(err);
78
- this.instantiationCallsiteName = instantiationCallsiteName;
79
- }
80
- }
81
- exports.UncaughtErrorInClientFunctionCode = UncaughtErrorInClientFunctionCode;
82
- class UncaughtErrorInCustomDOMPropertyCode extends TestRunErrorBase {
83
- constructor(instantiationCallsiteName, err, prop) {
84
- super(types_1.TEST_RUN_ERRORS.uncaughtErrorInCustomDOMPropertyCode, err, prop);
85
- this.errMsg = String(err);
86
- this.property = prop;
87
- this.instantiationCallsiteName = instantiationCallsiteName;
88
- }
89
- }
90
- exports.UncaughtErrorInCustomDOMPropertyCode = UncaughtErrorInCustomDOMPropertyCode;
91
- class UncaughtErrorInCustomClientScriptCode extends TestRunErrorBase {
92
- constructor(err) {
93
- super(types_1.TEST_RUN_ERRORS.uncaughtErrorInCustomClientScriptCode);
94
- this.errMsg = String(err);
95
- }
96
- }
97
- exports.UncaughtErrorInCustomClientScriptCode = UncaughtErrorInCustomClientScriptCode;
98
- class UncaughtErrorInCustomClientScriptLoadedFromModule extends TestRunErrorBase {
99
- constructor(err, moduleName) {
100
- super(types_1.TEST_RUN_ERRORS.uncaughtErrorInCustomClientScriptCodeLoadedFromModule);
101
- this.errMsg = String(err);
102
- this.moduleName = moduleName;
103
- }
104
- }
105
- exports.UncaughtErrorInCustomClientScriptLoadedFromModule = UncaughtErrorInCustomClientScriptLoadedFromModule;
106
- // Action parameters errors
107
- //--------------------------------------------------------------------
108
- // Options errors
109
- //--------------------------------------------------------------------
110
- class ActionIntegerOptionError extends ActionOptionErrorBase {
111
- constructor(optionName, actualValue) {
112
- super(types_1.TEST_RUN_ERRORS.actionIntegerOptionError, optionName, actualValue);
113
- }
114
- }
115
- exports.ActionIntegerOptionError = ActionIntegerOptionError;
116
- class ActionPositiveIntegerOptionError extends ActionOptionErrorBase {
117
- constructor(optionName, actualValue) {
118
- super(types_1.TEST_RUN_ERRORS.actionPositiveIntegerOptionError, optionName, actualValue);
119
- }
120
- }
121
- exports.ActionPositiveIntegerOptionError = ActionPositiveIntegerOptionError;
122
- class ActionBooleanOptionError extends ActionOptionErrorBase {
123
- constructor(optionName, actualValue) {
124
- super(types_1.TEST_RUN_ERRORS.actionBooleanOptionError, optionName, actualValue);
125
- }
126
- }
127
- exports.ActionBooleanOptionError = ActionBooleanOptionError;
128
- class ActionSpeedOptionError extends ActionOptionErrorBase {
129
- constructor(optionName, actualValue) {
130
- super(types_1.TEST_RUN_ERRORS.actionSpeedOptionError, optionName, actualValue);
131
- }
132
- }
133
- exports.ActionSpeedOptionError = ActionSpeedOptionError;
134
- // Action execution errors
135
- //--------------------------------------------------------------------
136
- class ActionElementNotFoundError extends SelectorErrorBase {
137
- constructor(apiFnArgs) {
138
- super(types_1.TEST_RUN_ERRORS.actionElementNotFoundError, apiFnArgs);
139
- }
140
- }
141
- exports.ActionElementNotFoundError = ActionElementNotFoundError;
142
- class ActionElementIsInvisibleError extends TestRunErrorBase {
143
- constructor() {
144
- super(types_1.TEST_RUN_ERRORS.actionElementIsInvisibleError);
145
- }
146
- }
147
- exports.ActionElementIsInvisibleError = ActionElementIsInvisibleError;
148
- class ActionSelectorMatchesWrongNodeTypeError extends TestRunErrorBase {
149
- constructor(nodeDescription) {
150
- super(types_1.TEST_RUN_ERRORS.actionSelectorMatchesWrongNodeTypeError);
151
- this.nodeDescription = nodeDescription;
152
- }
153
- }
154
- exports.ActionSelectorMatchesWrongNodeTypeError = ActionSelectorMatchesWrongNodeTypeError;
155
- class ActionAdditionalElementNotFoundError extends SelectorErrorBase {
156
- constructor(argumentName, apiFnArgs) {
157
- super(types_1.TEST_RUN_ERRORS.actionAdditionalElementNotFoundError, apiFnArgs);
158
- this.argumentName = argumentName;
159
- }
160
- }
161
- exports.ActionAdditionalElementNotFoundError = ActionAdditionalElementNotFoundError;
162
- class ActionAdditionalElementIsInvisibleError extends TestRunErrorBase {
163
- constructor(argumentName) {
164
- super(types_1.TEST_RUN_ERRORS.actionAdditionalElementIsInvisibleError);
165
- this.argumentName = argumentName;
166
- }
167
- }
168
- exports.ActionAdditionalElementIsInvisibleError = ActionAdditionalElementIsInvisibleError;
169
- class ActionAdditionalSelectorMatchesWrongNodeTypeError extends TestRunErrorBase {
170
- constructor(argumentName, nodeDescription) {
171
- super(types_1.TEST_RUN_ERRORS.actionAdditionalSelectorMatchesWrongNodeTypeError);
172
- this.argumentName = argumentName;
173
- this.nodeDescription = nodeDescription;
174
- }
175
- }
176
- exports.ActionAdditionalSelectorMatchesWrongNodeTypeError = ActionAdditionalSelectorMatchesWrongNodeTypeError;
177
- class ActionElementNonEditableError extends TestRunErrorBase {
178
- constructor() {
179
- super(types_1.TEST_RUN_ERRORS.actionElementNonEditableError);
180
- }
181
- }
182
- exports.ActionElementNonEditableError = ActionElementNonEditableError;
183
- class ActionElementNotTextAreaError extends TestRunErrorBase {
184
- constructor() {
185
- super(types_1.TEST_RUN_ERRORS.actionElementNotTextAreaError);
186
- }
187
- }
188
- exports.ActionElementNotTextAreaError = ActionElementNotTextAreaError;
189
- class ActionElementNonContentEditableError extends TestRunErrorBase {
190
- constructor(argumentName) {
191
- super(types_1.TEST_RUN_ERRORS.actionElementNonContentEditableError);
192
- this.argumentName = argumentName;
193
- }
194
- }
195
- exports.ActionElementNonContentEditableError = ActionElementNonContentEditableError;
196
- class ActionRootContainerNotFoundError extends TestRunErrorBase {
197
- constructor() {
198
- super(types_1.TEST_RUN_ERRORS.actionRootContainerNotFoundError);
199
- }
200
- }
201
- exports.ActionRootContainerNotFoundError = ActionRootContainerNotFoundError;
202
- class ActionIncorrectKeysError extends TestRunErrorBase {
203
- constructor(argumentName) {
204
- super(types_1.TEST_RUN_ERRORS.actionIncorrectKeysError);
205
- this.argumentName = argumentName;
206
- }
207
- }
208
- exports.ActionIncorrectKeysError = ActionIncorrectKeysError;
209
- class ActionCannotFindFileToUploadError extends TestRunErrorBase {
210
- constructor(filePaths, scannedFilePaths) {
211
- super(types_1.TEST_RUN_ERRORS.actionCannotFindFileToUploadError);
212
- this.filePaths = filePaths;
213
- this.scannedFilePaths = scannedFilePaths;
214
- }
215
- }
216
- exports.ActionCannotFindFileToUploadError = ActionCannotFindFileToUploadError;
217
- class ActionElementIsNotFileInputError extends TestRunErrorBase {
218
- constructor() {
219
- super(types_1.TEST_RUN_ERRORS.actionElementIsNotFileInputError);
220
- }
221
- }
222
- exports.ActionElementIsNotFileInputError = ActionElementIsNotFileInputError;
223
- class ActionInvalidScrollTargetError extends TestRunErrorBase {
224
- constructor(scrollTargetXValid, scrollTargetYValid) {
225
- super(types_1.TEST_RUN_ERRORS.actionInvalidScrollTargetError);
226
- if (!scrollTargetXValid) {
227
- if (!scrollTargetYValid)
228
- this.properties = 'scrollTargetX and scrollTargetY properties';
229
- else
230
- this.properties = 'scrollTargetX property';
231
- }
232
- else
233
- this.properties = 'scrollTargetY property';
234
- }
235
- }
236
- exports.ActionInvalidScrollTargetError = ActionInvalidScrollTargetError;
237
- class InvalidElementScreenshotDimensionsError extends TestRunErrorBase {
238
- constructor(width, height) {
239
- super(types_1.TEST_RUN_ERRORS.invalidElementScreenshotDimensionsError);
240
- const widthIsInvalid = width <= 0;
241
- const heightIsInvalid = height <= 0;
242
- if (widthIsInvalid) {
243
- if (heightIsInvalid) {
244
- this.verb = 'are';
245
- this.dimensions = 'width and height';
246
- }
247
- else {
248
- this.verb = 'is';
249
- this.dimensions = 'width';
250
- }
251
- }
252
- else {
253
- this.verb = 'is';
254
- this.dimensions = 'height';
255
- }
256
- }
257
- }
258
- exports.InvalidElementScreenshotDimensionsError = InvalidElementScreenshotDimensionsError;
259
- // Iframe errors
260
- //--------------------------------------------------------------------
261
- class ActionElementNotIframeError extends TestRunErrorBase {
262
- constructor() {
263
- super(types_1.TEST_RUN_ERRORS.actionElementNotIframeError);
264
- }
265
- }
266
- exports.ActionElementNotIframeError = ActionElementNotIframeError;
267
- class ActionIframeIsNotLoadedError extends TestRunErrorBase {
268
- constructor() {
269
- super(types_1.TEST_RUN_ERRORS.actionIframeIsNotLoadedError);
270
- }
271
- }
272
- exports.ActionIframeIsNotLoadedError = ActionIframeIsNotLoadedError;
273
- class CurrentIframeIsNotLoadedError extends TestRunErrorBase {
274
- constructor() {
275
- super(types_1.TEST_RUN_ERRORS.currentIframeIsNotLoadedError);
276
- }
277
- }
278
- exports.CurrentIframeIsNotLoadedError = CurrentIframeIsNotLoadedError;
279
- class ChildWindowNotFoundError extends TestRunErrorBase {
280
- constructor() {
281
- super(types_1.TEST_RUN_ERRORS.childWindowNotFoundError);
282
- }
283
- }
284
- exports.ChildWindowNotFoundError = ChildWindowNotFoundError;
285
- class ChildWindowIsNotLoadedError extends TestRunErrorBase {
286
- constructor() {
287
- super(types_1.TEST_RUN_ERRORS.childWindowIsNotLoadedError);
288
- }
289
- }
290
- exports.ChildWindowIsNotLoadedError = ChildWindowIsNotLoadedError;
291
- class CannotSwitchToWindowError extends TestRunErrorBase {
292
- constructor() {
293
- super(types_1.TEST_RUN_ERRORS.cannotSwitchToWindowError);
294
- }
295
- }
296
- exports.CannotSwitchToWindowError = CannotSwitchToWindowError;
297
- class CloseChildWindowError extends TestRunErrorBase {
298
- constructor() {
299
- super(types_1.TEST_RUN_ERRORS.closeChildWindowError);
300
- }
301
- }
302
- exports.CloseChildWindowError = CloseChildWindowError;
303
- class CannotCloseWindowWithChildrenError extends TestRunErrorBase {
304
- constructor() {
305
- super(types_1.TEST_RUN_ERRORS.cannotCloseWindowWithChildrenError);
306
- }
307
- }
308
- exports.CannotCloseWindowWithChildrenError = CannotCloseWindowWithChildrenError;
309
- class CannotCloseWindowWithoutParentError extends TestRunErrorBase {
310
- constructor() {
311
- super(types_1.TEST_RUN_ERRORS.cannotCloseWindowWithoutParent);
312
- }
313
- }
314
- exports.CannotCloseWindowWithoutParentError = CannotCloseWindowWithoutParentError;
315
- class SwitchToWindowPredicateError extends TestRunErrorBase {
316
- constructor(errMsg) {
317
- super(types_1.TEST_RUN_ERRORS.switchToWindowPredicateError);
318
- this.errMsg = errMsg;
319
- }
320
- }
321
- exports.SwitchToWindowPredicateError = SwitchToWindowPredicateError;
322
- class WindowNotFoundError extends TestRunErrorBase {
323
- constructor() {
324
- super(types_1.TEST_RUN_ERRORS.targetWindowNotFoundError);
325
- }
326
- }
327
- exports.WindowNotFoundError = WindowNotFoundError;
328
- class ParentWindowNotFoundError extends TestRunErrorBase {
329
- constructor() {
330
- super(types_1.TEST_RUN_ERRORS.parentWindowNotFoundError);
331
- }
332
- }
333
- exports.ParentWindowNotFoundError = ParentWindowNotFoundError;
334
- class PreviousWindowNotFoundError extends TestRunErrorBase {
335
- constructor() {
336
- super(types_1.TEST_RUN_ERRORS.previousWindowNotFoundError);
337
- }
338
- }
339
- exports.PreviousWindowNotFoundError = PreviousWindowNotFoundError;
340
- class ChildWindowClosedBeforeSwitchingError extends TestRunErrorBase {
341
- constructor() {
342
- super(types_1.TEST_RUN_ERRORS.childWindowClosedBeforeSwitchingError);
343
- }
344
- }
345
- exports.ChildWindowClosedBeforeSwitchingError = ChildWindowClosedBeforeSwitchingError;
346
- class CannotRestoreChildWindowError extends TestRunErrorBase {
347
- constructor() {
348
- super(types_1.TEST_RUN_ERRORS.cannotRestoreChildWindowError);
349
- }
350
- }
351
- exports.CannotRestoreChildWindowError = CannotRestoreChildWindowError;
352
- class CurrentIframeNotFoundError extends TestRunErrorBase {
353
- constructor() {
354
- super(types_1.TEST_RUN_ERRORS.currentIframeNotFoundError);
355
- }
356
- }
357
- exports.CurrentIframeNotFoundError = CurrentIframeNotFoundError;
358
- class CurrentIframeIsInvisibleError extends TestRunErrorBase {
359
- constructor() {
360
- super(types_1.TEST_RUN_ERRORS.currentIframeIsInvisibleError);
361
- }
362
- }
363
- exports.CurrentIframeIsInvisibleError = CurrentIframeIsInvisibleError;
364
- // Native dialog errors
365
- //--------------------------------------------------------------------
366
- class NativeDialogNotHandledError extends TestRunErrorBase {
367
- constructor(dialogType, url) {
368
- super(types_1.TEST_RUN_ERRORS.nativeDialogNotHandledError);
369
- this.dialogType = dialogType;
370
- this.pageUrl = url;
371
- }
372
- }
373
- exports.NativeDialogNotHandledError = NativeDialogNotHandledError;
374
- class UncaughtErrorInNativeDialogHandler extends TestRunErrorBase {
375
- constructor(dialogType, errMsg, url) {
376
- super(types_1.TEST_RUN_ERRORS.uncaughtErrorInNativeDialogHandler);
377
- this.dialogType = dialogType;
378
- this.errMsg = errMsg;
379
- this.pageUrl = url;
380
- }
381
- }
382
- exports.UncaughtErrorInNativeDialogHandler = UncaughtErrorInNativeDialogHandler;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UncaughtErrorInNativeDialogHandler = exports.NativeDialogNotHandledError = exports.CurrentIframeIsInvisibleError = exports.CurrentIframeNotFoundError = exports.CannotRestoreChildWindowError = exports.ChildWindowClosedBeforeSwitchingError = exports.PreviousWindowNotFoundError = exports.ParentWindowNotFoundError = exports.WindowNotFoundError = exports.SwitchToWindowPredicateError = exports.CannotCloseWindowWithoutParentError = exports.CannotCloseWindowWithChildrenError = exports.CloseChildWindowError = exports.CannotSwitchToWindowError = exports.ChildWindowIsNotLoadedError = exports.ChildWindowNotFoundError = exports.CurrentIframeIsNotLoadedError = exports.ActionIframeIsNotLoadedError = exports.ActionElementNotIframeError = exports.InvalidElementScreenshotDimensionsError = exports.ActionInvalidScrollTargetError = exports.ActionElementIsNotFileInputError = exports.ActionCannotFindFileToUploadError = exports.ActionIncorrectKeysError = exports.ActionRootContainerNotFoundError = exports.ActionElementNonContentEditableError = exports.ActionElementNotTextAreaError = exports.ActionElementNonEditableError = exports.ActionAdditionalSelectorMatchesWrongNodeTypeError = exports.ActionAdditionalElementIsInvisibleError = exports.ActionAdditionalElementNotFoundError = exports.ActionSelectorMatchesWrongNodeTypeError = exports.ActionElementIsInvisibleError = exports.ActionElementNotFoundError = exports.ActionSpeedOptionError = exports.ActionBooleanOptionError = exports.ActionPositiveIntegerOptionError = exports.ActionIntegerOptionError = exports.UncaughtErrorInCustomClientScriptLoadedFromModule = exports.UncaughtErrorInCustomClientScriptCode = exports.UncaughtErrorInCustomDOMPropertyCode = exports.UncaughtErrorInClientFunctionCode = exports.UncaughtErrorOnPage = exports.CannotObtainInfoForElementSpecifiedBySelectorError = exports.InvalidSelectorResultError = exports.DomNodeClientFunctionResultError = exports.ClientFunctionExecutionInterruptionError = exports.TestRunErrorBase = void 0;
4
+ // -------------------------------------------------------------
5
+ // WARNING: this file is used by both the client and the server.
6
+ // Do not use any browser or node-specific API!
7
+ // -------------------------------------------------------------
8
+ const types_1 = require("../../errors/types");
9
+ // Base
10
+ //--------------------------------------------------------------------
11
+ class TestRunErrorBase {
12
+ constructor(code) {
13
+ this.code = code;
14
+ this.isTestCafeError = true;
15
+ this.callsite = null;
16
+ }
17
+ }
18
+ exports.TestRunErrorBase = TestRunErrorBase;
19
+ class ActionOptionErrorBase extends TestRunErrorBase {
20
+ constructor(code, optionName, actualValue) {
21
+ super(code);
22
+ this.optionName = optionName;
23
+ this.actualValue = actualValue;
24
+ }
25
+ }
26
+ // Client function errors
27
+ //--------------------------------------------------------------------
28
+ class ClientFunctionExecutionInterruptionError extends TestRunErrorBase {
29
+ constructor(instantiationCallsiteName) {
30
+ super(types_1.TEST_RUN_ERRORS.clientFunctionExecutionInterruptionError);
31
+ this.instantiationCallsiteName = instantiationCallsiteName;
32
+ }
33
+ }
34
+ exports.ClientFunctionExecutionInterruptionError = ClientFunctionExecutionInterruptionError;
35
+ class DomNodeClientFunctionResultError extends TestRunErrorBase {
36
+ constructor(instantiationCallsiteName) {
37
+ super(types_1.TEST_RUN_ERRORS.domNodeClientFunctionResultError);
38
+ this.instantiationCallsiteName = instantiationCallsiteName;
39
+ }
40
+ }
41
+ exports.DomNodeClientFunctionResultError = DomNodeClientFunctionResultError;
42
+ // Selector errors
43
+ //--------------------------------------------------------------------
44
+ class SelectorErrorBase extends TestRunErrorBase {
45
+ constructor(code, { apiFnChain, apiFnIndex }) {
46
+ super(code);
47
+ this.apiFnChain = apiFnChain;
48
+ this.apiFnIndex = apiFnIndex;
49
+ }
50
+ }
51
+ class InvalidSelectorResultError extends TestRunErrorBase {
52
+ constructor() {
53
+ super(types_1.TEST_RUN_ERRORS.invalidSelectorResultError);
54
+ }
55
+ }
56
+ exports.InvalidSelectorResultError = InvalidSelectorResultError;
57
+ class CannotObtainInfoForElementSpecifiedBySelectorError extends SelectorErrorBase {
58
+ constructor(callsite, apiFnArgs) {
59
+ super(types_1.TEST_RUN_ERRORS.cannotObtainInfoForElementSpecifiedBySelectorError, apiFnArgs);
60
+ this.callsite = callsite;
61
+ }
62
+ }
63
+ exports.CannotObtainInfoForElementSpecifiedBySelectorError = CannotObtainInfoForElementSpecifiedBySelectorError;
64
+ // Uncaught errors
65
+ //--------------------------------------------------------------------
66
+ class UncaughtErrorOnPage extends TestRunErrorBase {
67
+ constructor(errStack, pageDestUrl) {
68
+ super(types_1.TEST_RUN_ERRORS.uncaughtErrorOnPage);
69
+ this.errStack = errStack;
70
+ this.pageDestUrl = pageDestUrl;
71
+ }
72
+ }
73
+ exports.UncaughtErrorOnPage = UncaughtErrorOnPage;
74
+ class UncaughtErrorInClientFunctionCode extends TestRunErrorBase {
75
+ constructor(instantiationCallsiteName, err) {
76
+ super(types_1.TEST_RUN_ERRORS.uncaughtErrorInClientFunctionCode);
77
+ this.errMsg = String(err);
78
+ this.instantiationCallsiteName = instantiationCallsiteName;
79
+ }
80
+ }
81
+ exports.UncaughtErrorInClientFunctionCode = UncaughtErrorInClientFunctionCode;
82
+ class UncaughtErrorInCustomDOMPropertyCode extends TestRunErrorBase {
83
+ constructor(instantiationCallsiteName, err, prop) {
84
+ super(types_1.TEST_RUN_ERRORS.uncaughtErrorInCustomDOMPropertyCode, err, prop);
85
+ this.errMsg = String(err);
86
+ this.property = prop;
87
+ this.instantiationCallsiteName = instantiationCallsiteName;
88
+ }
89
+ }
90
+ exports.UncaughtErrorInCustomDOMPropertyCode = UncaughtErrorInCustomDOMPropertyCode;
91
+ class UncaughtErrorInCustomClientScriptCode extends TestRunErrorBase {
92
+ constructor(err) {
93
+ super(types_1.TEST_RUN_ERRORS.uncaughtErrorInCustomClientScriptCode);
94
+ this.errMsg = String(err);
95
+ }
96
+ }
97
+ exports.UncaughtErrorInCustomClientScriptCode = UncaughtErrorInCustomClientScriptCode;
98
+ class UncaughtErrorInCustomClientScriptLoadedFromModule extends TestRunErrorBase {
99
+ constructor(err, moduleName) {
100
+ super(types_1.TEST_RUN_ERRORS.uncaughtErrorInCustomClientScriptCodeLoadedFromModule);
101
+ this.errMsg = String(err);
102
+ this.moduleName = moduleName;
103
+ }
104
+ }
105
+ exports.UncaughtErrorInCustomClientScriptLoadedFromModule = UncaughtErrorInCustomClientScriptLoadedFromModule;
106
+ // Action parameters errors
107
+ //--------------------------------------------------------------------
108
+ // Options errors
109
+ //--------------------------------------------------------------------
110
+ class ActionIntegerOptionError extends ActionOptionErrorBase {
111
+ constructor(optionName, actualValue) {
112
+ super(types_1.TEST_RUN_ERRORS.actionIntegerOptionError, optionName, actualValue);
113
+ }
114
+ }
115
+ exports.ActionIntegerOptionError = ActionIntegerOptionError;
116
+ class ActionPositiveIntegerOptionError extends ActionOptionErrorBase {
117
+ constructor(optionName, actualValue) {
118
+ super(types_1.TEST_RUN_ERRORS.actionPositiveIntegerOptionError, optionName, actualValue);
119
+ }
120
+ }
121
+ exports.ActionPositiveIntegerOptionError = ActionPositiveIntegerOptionError;
122
+ class ActionBooleanOptionError extends ActionOptionErrorBase {
123
+ constructor(optionName, actualValue) {
124
+ super(types_1.TEST_RUN_ERRORS.actionBooleanOptionError, optionName, actualValue);
125
+ }
126
+ }
127
+ exports.ActionBooleanOptionError = ActionBooleanOptionError;
128
+ class ActionSpeedOptionError extends ActionOptionErrorBase {
129
+ constructor(optionName, actualValue) {
130
+ super(types_1.TEST_RUN_ERRORS.actionSpeedOptionError, optionName, actualValue);
131
+ }
132
+ }
133
+ exports.ActionSpeedOptionError = ActionSpeedOptionError;
134
+ // Action execution errors
135
+ //--------------------------------------------------------------------
136
+ class ActionElementNotFoundError extends SelectorErrorBase {
137
+ constructor(apiFnArgs) {
138
+ super(types_1.TEST_RUN_ERRORS.actionElementNotFoundError, apiFnArgs);
139
+ }
140
+ }
141
+ exports.ActionElementNotFoundError = ActionElementNotFoundError;
142
+ class ActionElementIsInvisibleError extends TestRunErrorBase {
143
+ constructor() {
144
+ super(types_1.TEST_RUN_ERRORS.actionElementIsInvisibleError);
145
+ }
146
+ }
147
+ exports.ActionElementIsInvisibleError = ActionElementIsInvisibleError;
148
+ class ActionSelectorMatchesWrongNodeTypeError extends TestRunErrorBase {
149
+ constructor(nodeDescription) {
150
+ super(types_1.TEST_RUN_ERRORS.actionSelectorMatchesWrongNodeTypeError);
151
+ this.nodeDescription = nodeDescription;
152
+ }
153
+ }
154
+ exports.ActionSelectorMatchesWrongNodeTypeError = ActionSelectorMatchesWrongNodeTypeError;
155
+ class ActionAdditionalElementNotFoundError extends SelectorErrorBase {
156
+ constructor(argumentName, apiFnArgs) {
157
+ super(types_1.TEST_RUN_ERRORS.actionAdditionalElementNotFoundError, apiFnArgs);
158
+ this.argumentName = argumentName;
159
+ }
160
+ }
161
+ exports.ActionAdditionalElementNotFoundError = ActionAdditionalElementNotFoundError;
162
+ class ActionAdditionalElementIsInvisibleError extends TestRunErrorBase {
163
+ constructor(argumentName) {
164
+ super(types_1.TEST_RUN_ERRORS.actionAdditionalElementIsInvisibleError);
165
+ this.argumentName = argumentName;
166
+ }
167
+ }
168
+ exports.ActionAdditionalElementIsInvisibleError = ActionAdditionalElementIsInvisibleError;
169
+ class ActionAdditionalSelectorMatchesWrongNodeTypeError extends TestRunErrorBase {
170
+ constructor(argumentName, nodeDescription) {
171
+ super(types_1.TEST_RUN_ERRORS.actionAdditionalSelectorMatchesWrongNodeTypeError);
172
+ this.argumentName = argumentName;
173
+ this.nodeDescription = nodeDescription;
174
+ }
175
+ }
176
+ exports.ActionAdditionalSelectorMatchesWrongNodeTypeError = ActionAdditionalSelectorMatchesWrongNodeTypeError;
177
+ class ActionElementNonEditableError extends TestRunErrorBase {
178
+ constructor() {
179
+ super(types_1.TEST_RUN_ERRORS.actionElementNonEditableError);
180
+ }
181
+ }
182
+ exports.ActionElementNonEditableError = ActionElementNonEditableError;
183
+ class ActionElementNotTextAreaError extends TestRunErrorBase {
184
+ constructor() {
185
+ super(types_1.TEST_RUN_ERRORS.actionElementNotTextAreaError);
186
+ }
187
+ }
188
+ exports.ActionElementNotTextAreaError = ActionElementNotTextAreaError;
189
+ class ActionElementNonContentEditableError extends TestRunErrorBase {
190
+ constructor(argumentName) {
191
+ super(types_1.TEST_RUN_ERRORS.actionElementNonContentEditableError);
192
+ this.argumentName = argumentName;
193
+ }
194
+ }
195
+ exports.ActionElementNonContentEditableError = ActionElementNonContentEditableError;
196
+ class ActionRootContainerNotFoundError extends TestRunErrorBase {
197
+ constructor() {
198
+ super(types_1.TEST_RUN_ERRORS.actionRootContainerNotFoundError);
199
+ }
200
+ }
201
+ exports.ActionRootContainerNotFoundError = ActionRootContainerNotFoundError;
202
+ class ActionIncorrectKeysError extends TestRunErrorBase {
203
+ constructor(argumentName) {
204
+ super(types_1.TEST_RUN_ERRORS.actionIncorrectKeysError);
205
+ this.argumentName = argumentName;
206
+ }
207
+ }
208
+ exports.ActionIncorrectKeysError = ActionIncorrectKeysError;
209
+ class ActionCannotFindFileToUploadError extends TestRunErrorBase {
210
+ constructor(filePaths, scannedFilePaths) {
211
+ super(types_1.TEST_RUN_ERRORS.actionCannotFindFileToUploadError);
212
+ this.filePaths = filePaths;
213
+ this.scannedFilePaths = scannedFilePaths;
214
+ }
215
+ }
216
+ exports.ActionCannotFindFileToUploadError = ActionCannotFindFileToUploadError;
217
+ class ActionElementIsNotFileInputError extends TestRunErrorBase {
218
+ constructor() {
219
+ super(types_1.TEST_RUN_ERRORS.actionElementIsNotFileInputError);
220
+ }
221
+ }
222
+ exports.ActionElementIsNotFileInputError = ActionElementIsNotFileInputError;
223
+ class ActionInvalidScrollTargetError extends TestRunErrorBase {
224
+ constructor(scrollTargetXValid, scrollTargetYValid) {
225
+ super(types_1.TEST_RUN_ERRORS.actionInvalidScrollTargetError);
226
+ if (!scrollTargetXValid) {
227
+ if (!scrollTargetYValid)
228
+ this.properties = 'scrollTargetX and scrollTargetY properties';
229
+ else
230
+ this.properties = 'scrollTargetX property';
231
+ }
232
+ else
233
+ this.properties = 'scrollTargetY property';
234
+ }
235
+ }
236
+ exports.ActionInvalidScrollTargetError = ActionInvalidScrollTargetError;
237
+ class InvalidElementScreenshotDimensionsError extends TestRunErrorBase {
238
+ constructor(width, height) {
239
+ super(types_1.TEST_RUN_ERRORS.invalidElementScreenshotDimensionsError);
240
+ const widthIsInvalid = width <= 0;
241
+ const heightIsInvalid = height <= 0;
242
+ if (widthIsInvalid) {
243
+ if (heightIsInvalid) {
244
+ this.verb = 'are';
245
+ this.dimensions = 'width and height';
246
+ }
247
+ else {
248
+ this.verb = 'is';
249
+ this.dimensions = 'width';
250
+ }
251
+ }
252
+ else {
253
+ this.verb = 'is';
254
+ this.dimensions = 'height';
255
+ }
256
+ }
257
+ }
258
+ exports.InvalidElementScreenshotDimensionsError = InvalidElementScreenshotDimensionsError;
259
+ // Iframe errors
260
+ //--------------------------------------------------------------------
261
+ class ActionElementNotIframeError extends TestRunErrorBase {
262
+ constructor() {
263
+ super(types_1.TEST_RUN_ERRORS.actionElementNotIframeError);
264
+ }
265
+ }
266
+ exports.ActionElementNotIframeError = ActionElementNotIframeError;
267
+ class ActionIframeIsNotLoadedError extends TestRunErrorBase {
268
+ constructor() {
269
+ super(types_1.TEST_RUN_ERRORS.actionIframeIsNotLoadedError);
270
+ }
271
+ }
272
+ exports.ActionIframeIsNotLoadedError = ActionIframeIsNotLoadedError;
273
+ class CurrentIframeIsNotLoadedError extends TestRunErrorBase {
274
+ constructor() {
275
+ super(types_1.TEST_RUN_ERRORS.currentIframeIsNotLoadedError);
276
+ }
277
+ }
278
+ exports.CurrentIframeIsNotLoadedError = CurrentIframeIsNotLoadedError;
279
+ class ChildWindowNotFoundError extends TestRunErrorBase {
280
+ constructor() {
281
+ super(types_1.TEST_RUN_ERRORS.childWindowNotFoundError);
282
+ }
283
+ }
284
+ exports.ChildWindowNotFoundError = ChildWindowNotFoundError;
285
+ class ChildWindowIsNotLoadedError extends TestRunErrorBase {
286
+ constructor() {
287
+ super(types_1.TEST_RUN_ERRORS.childWindowIsNotLoadedError);
288
+ }
289
+ }
290
+ exports.ChildWindowIsNotLoadedError = ChildWindowIsNotLoadedError;
291
+ class CannotSwitchToWindowError extends TestRunErrorBase {
292
+ constructor() {
293
+ super(types_1.TEST_RUN_ERRORS.cannotSwitchToWindowError);
294
+ }
295
+ }
296
+ exports.CannotSwitchToWindowError = CannotSwitchToWindowError;
297
+ class CloseChildWindowError extends TestRunErrorBase {
298
+ constructor() {
299
+ super(types_1.TEST_RUN_ERRORS.closeChildWindowError);
300
+ }
301
+ }
302
+ exports.CloseChildWindowError = CloseChildWindowError;
303
+ class CannotCloseWindowWithChildrenError extends TestRunErrorBase {
304
+ constructor() {
305
+ super(types_1.TEST_RUN_ERRORS.cannotCloseWindowWithChildrenError);
306
+ }
307
+ }
308
+ exports.CannotCloseWindowWithChildrenError = CannotCloseWindowWithChildrenError;
309
+ class CannotCloseWindowWithoutParentError extends TestRunErrorBase {
310
+ constructor() {
311
+ super(types_1.TEST_RUN_ERRORS.cannotCloseWindowWithoutParent);
312
+ }
313
+ }
314
+ exports.CannotCloseWindowWithoutParentError = CannotCloseWindowWithoutParentError;
315
+ class SwitchToWindowPredicateError extends TestRunErrorBase {
316
+ constructor(errMsg) {
317
+ super(types_1.TEST_RUN_ERRORS.switchToWindowPredicateError);
318
+ this.errMsg = errMsg;
319
+ }
320
+ }
321
+ exports.SwitchToWindowPredicateError = SwitchToWindowPredicateError;
322
+ class WindowNotFoundError extends TestRunErrorBase {
323
+ constructor() {
324
+ super(types_1.TEST_RUN_ERRORS.targetWindowNotFoundError);
325
+ }
326
+ }
327
+ exports.WindowNotFoundError = WindowNotFoundError;
328
+ class ParentWindowNotFoundError extends TestRunErrorBase {
329
+ constructor() {
330
+ super(types_1.TEST_RUN_ERRORS.parentWindowNotFoundError);
331
+ }
332
+ }
333
+ exports.ParentWindowNotFoundError = ParentWindowNotFoundError;
334
+ class PreviousWindowNotFoundError extends TestRunErrorBase {
335
+ constructor() {
336
+ super(types_1.TEST_RUN_ERRORS.previousWindowNotFoundError);
337
+ }
338
+ }
339
+ exports.PreviousWindowNotFoundError = PreviousWindowNotFoundError;
340
+ class ChildWindowClosedBeforeSwitchingError extends TestRunErrorBase {
341
+ constructor() {
342
+ super(types_1.TEST_RUN_ERRORS.childWindowClosedBeforeSwitchingError);
343
+ }
344
+ }
345
+ exports.ChildWindowClosedBeforeSwitchingError = ChildWindowClosedBeforeSwitchingError;
346
+ class CannotRestoreChildWindowError extends TestRunErrorBase {
347
+ constructor() {
348
+ super(types_1.TEST_RUN_ERRORS.cannotRestoreChildWindowError);
349
+ }
350
+ }
351
+ exports.CannotRestoreChildWindowError = CannotRestoreChildWindowError;
352
+ class CurrentIframeNotFoundError extends TestRunErrorBase {
353
+ constructor() {
354
+ super(types_1.TEST_RUN_ERRORS.currentIframeNotFoundError);
355
+ }
356
+ }
357
+ exports.CurrentIframeNotFoundError = CurrentIframeNotFoundError;
358
+ class CurrentIframeIsInvisibleError extends TestRunErrorBase {
359
+ constructor() {
360
+ super(types_1.TEST_RUN_ERRORS.currentIframeIsInvisibleError);
361
+ }
362
+ }
363
+ exports.CurrentIframeIsInvisibleError = CurrentIframeIsInvisibleError;
364
+ // Native dialog errors
365
+ //--------------------------------------------------------------------
366
+ class NativeDialogNotHandledError extends TestRunErrorBase {
367
+ constructor(dialogType, url) {
368
+ super(types_1.TEST_RUN_ERRORS.nativeDialogNotHandledError);
369
+ this.dialogType = dialogType;
370
+ this.pageUrl = url;
371
+ }
372
+ }
373
+ exports.NativeDialogNotHandledError = NativeDialogNotHandledError;
374
+ class UncaughtErrorInNativeDialogHandler extends TestRunErrorBase {
375
+ constructor(dialogType, errMsg, url) {
376
+ super(types_1.TEST_RUN_ERRORS.uncaughtErrorInNativeDialogHandler);
377
+ this.dialogType = dialogType;
378
+ this.errMsg = errMsg;
379
+ this.pageUrl = url;
380
+ }
381
+ }
382
+ exports.UncaughtErrorInNativeDialogHandler = UncaughtErrorInNativeDialogHandler;
383
383
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhcmVkL2Vycm9ycy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxnRUFBZ0U7QUFDaEUsZ0VBQWdFO0FBQ2hFLCtDQUErQztBQUMvQyxnRUFBZ0U7QUFDaEUsOENBQXFEO0FBRXJELE9BQU87QUFDUCxzRUFBc0U7QUFDdEUsTUFBYSxnQkFBZ0I7SUFDekIsWUFBYSxJQUFJO1FBQ2IsSUFBSSxDQUFDLElBQUksR0FBYyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBVSxJQUFJLENBQUM7SUFDaEMsQ0FBQztDQUNKO0FBTkQsNENBTUM7QUFFRCxNQUFNLHFCQUFzQixTQUFRLGdCQUFnQjtJQUNoRCxZQUFhLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVztRQUN0QyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFWixJQUFJLENBQUMsVUFBVSxHQUFJLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNuQyxDQUFDO0NBQ0o7QUFHRCx5QkFBeUI7QUFDekIsc0VBQXNFO0FBQ3RFLE1BQWEsd0NBQXlDLFNBQVEsZ0JBQWdCO0lBQzFFLFlBQWEseUJBQXlCO1FBQ2xDLEtBQUssQ0FBQyx1QkFBZSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFFaEUsSUFBSSxDQUFDLHlCQUF5QixHQUFHLHlCQUF5QixDQUFDO0lBQy9ELENBQUM7Q0FDSjtBQU5ELDRGQU1DO0FBRUQsTUFBYSxnQ0FBaUMsU0FBUSxnQkFBZ0I7SUFDbEUsWUFBYSx5QkFBeUI7UUFDbEMsS0FBSyxDQUFDLHVCQUFlLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMseUJBQXlCLEdBQUcseUJBQXlCLENBQUM7SUFDL0QsQ0FBQztDQUNKO0FBTkQsNEVB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LEdBQUcsQ0FBQztJQUMxQixDQUFDO0NBQ0o7QUFSRCxnRkFRQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFdBUk5JTkc6IHRoaXMgZmlsZSBpcyB1c2VkIGJ5IGJvdGggdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlci5cbi8vIERvIG5vdCB1c2UgYW55IGJyb3dzZXIgb3Igbm9kZS1zcGVjaWZpYyBBUEkhXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5pbXBvcnQgeyBURVNUX1JVTl9FUlJPUlMgfSBmcm9tICcuLi8uLi9lcnJvcnMvdHlwZXMnO1xuXG4vLyBCYXNlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY2xhc3MgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKGNvZGUpIHtcbiAgICAgICAgdGhpcy5jb2RlICAgICAgICAgICAgPSBjb2RlO1xuICAgICAgICB0aGlzLmlzVGVzdENhZmVFcnJvciA9IHRydWU7XG4gICAgICAgIHRoaXMuY2FsbHNpdGUgICAgICAgID0gbnVsbDtcbiAgICB9XG59XG5cbmNsYXNzIEFjdGlvbk9wdGlvbkVycm9yQmFzZSBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChjb2RlLCBvcHRpb25OYW1lLCBhY3R1YWxWYWx1ZSkge1xuICAgICAgICBzdXBlcihjb2RlKTtcblxuICAgICAgICB0aGlzLm9wdGlvbk5hbWUgID0gb3B0aW9uTmFtZTtcbiAgICAgICAgdGhpcy5hY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlO1xuICAgIH1cbn1cblxuXG4vLyBDbGllbnQgZnVuY3Rpb24gZXJyb3JzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY2xhc3MgQ2xpZW50RnVuY3Rpb25FeGVjdXRpb25JbnRlcnJ1cHRpb25FcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5jbGllbnRGdW5jdGlvbkV4ZWN1dGlvbkludGVycnVwdGlvbkVycm9yKTtcblxuICAgICAgICB0aGlzLmluc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWUgPSBpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvbU5vZGVDbGllbnRGdW5jdGlvblJlc3VsdEVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKGluc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWUpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLmRvbU5vZGVDbGllbnRGdW5jdGlvblJlc3VsdEVycm9yKTtcblxuICAgICAgICB0aGlzLmluc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWUgPSBpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lO1xuICAgIH1cbn1cblxuXG4vLyBTZWxlY3RvciBlcnJvcnNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmNsYXNzIFNlbGVjdG9yRXJyb3JCYXNlIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKGNvZGUsIHsgYXBpRm5DaGFpbiwgYXBpRm5JbmRleCB9KSB7XG4gICAgICAgIHN1cGVyKGNvZGUpO1xuXG4gICAgICAgIHRoaXMuYXBpRm5DaGFpbiA9IGFwaUZuQ2hhaW47XG4gICAgICAgIHRoaXMuYXBpRm5JbmRleCA9IGFwaUZuSW5kZXg7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFNlbGVjdG9yUmVzdWx0RXJyb3IgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5pbnZhbGlkU2VsZWN0b3JSZXN1bHRFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2Fubm90T2J0YWluSW5mb0ZvckVsZW1lbnRTcGVjaWZpZWRCeVNlbGVjdG9yRXJyb3IgZXh0ZW5kcyBTZWxlY3RvckVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKGNhbGxzaXRlLCBhcGlGbkFyZ3MpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLmNhbm5vdE9idGFpbkluZm9Gb3JFbGVtZW50U3BlY2lmaWVkQnlTZWxlY3RvckVycm9yLCBhcGlGbkFyZ3MpO1xuXG4gICAgICAgIHRoaXMuY2FsbHNpdGUgPSBjYWxsc2l0ZTtcbiAgICB9XG59XG5cblxuLy8gVW5jYXVnaHQgZXJyb3JzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY2xhc3MgVW5jYXVnaHRFcnJvck9uUGFnZSBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChlcnJTdGFjaywgcGFnZURlc3RVcmwpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLnVuY2F1Z2h0RXJyb3JPblBhZ2UpO1xuXG4gICAgICAgIHRoaXMuZXJyU3RhY2sgICAgPSBlcnJTdGFjaztcbiAgICAgICAgdGhpcy5wYWdlRGVzdFVybCA9IHBhZ2VEZXN0VXJsO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuY2F1Z2h0RXJyb3JJbkNsaWVudEZ1bmN0aW9uQ29kZSBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lLCBlcnIpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLnVuY2F1Z2h0RXJyb3JJbkNsaWVudEZ1bmN0aW9uQ29kZSk7XG5cbiAgICAgICAgdGhpcy5lcnJNc2cgICAgICAgICAgICAgICAgICAgID0gU3RyaW5nKGVycik7XG4gICAgICAgIHRoaXMuaW5zdGFudGlhdGlvbkNhbGxzaXRlTmFtZSA9IGluc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgVW5jYXVnaHRFcnJvckluQ3VzdG9tRE9NUHJvcGVydHlDb2RlIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKGluc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWUsIGVyciwgcHJvcCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMudW5jYXVnaHRFcnJvckluQ3VzdG9tRE9NUHJvcGVydHlDb2RlLCBlcnIsIHByb3ApO1xuXG4gICAgICAgIHRoaXMuZXJyTXNnICAgICAgICAgICAgICAgICAgICA9IFN0cmluZyhlcnIpO1xuICAgICAgICB0aGlzLnByb3BlcnR5ICAgICAgICAgICAgICAgICAgPSBwcm9wO1xuICAgICAgICB0aGlzLmluc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWUgPSBpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuY2F1Z2h0RXJyb3JJbkN1c3RvbUNsaWVudFNjcmlwdENvZGUgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoZXJyKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy51bmNhdWdodEVycm9ySW5DdXN0b21DbGllbnRTY3JpcHRDb2RlKTtcblxuICAgICAgICB0aGlzLmVyck1zZyA9IFN0cmluZyhlcnIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuY2F1Z2h0RXJyb3JJbkN1c3RvbUNsaWVudFNjcmlwdExvYWRlZEZyb21Nb2R1bGUgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoZXJyLCBtb2R1bGVOYW1lKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy51bmNhdWdodEVycm9ySW5DdXN0b21DbGllbnRTY3JpcHRDb2RlTG9hZGVkRnJvbU1vZHVsZSk7XG5cbiAgICAgICAgdGhpcy5lcnJNc2cgICAgID0gU3RyaW5nKGVycik7XG4gICAgICAgIHRoaXMubW9kdWxlTmFtZSA9IG1vZHVsZU5hbWU7XG4gICAgfVxufVxuXG5cbi8vIEFjdGlvbiBwYXJhbWV0ZXJzIGVycm9yc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gT3B0aW9ucyBlcnJvcnNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjbGFzcyBBY3Rpb25JbnRlZ2VyT3B0aW9uRXJyb3IgZXh0ZW5kcyBBY3Rpb25PcHRpb25FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChvcHRpb25OYW1lLCBhY3R1YWxWYWx1ZSkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuYWN0aW9uSW50ZWdlck9wdGlvbkVycm9yLCBvcHRpb25OYW1lLCBhY3R1YWxWYWx1ZSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uUG9zaXRpdmVJbnRlZ2VyT3B0aW9uRXJyb3IgZXh0ZW5kcyBBY3Rpb25PcHRpb25FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChvcHRpb25OYW1lLCBhY3R1YWxWYWx1ZSkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuYWN0aW9uUG9zaXRpdmVJbnRlZ2VyT3B0aW9uRXJyb3IsIG9wdGlvbk5hbWUsIGFjdHVhbFZhbHVlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25Cb29sZWFuT3B0aW9uRXJyb3IgZXh0ZW5kcyBBY3Rpb25PcHRpb25FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChvcHRpb25OYW1lLCBhY3R1YWxWYWx1ZSkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuYWN0aW9uQm9vbGVhbk9wdGlvbkVycm9yLCBvcHRpb25OYW1lLCBhY3R1YWxWYWx1ZSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uU3BlZWRPcHRpb25FcnJvciBleHRlbmRzIEFjdGlvbk9wdGlvbkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKG9wdGlvbk5hbWUsIGFjdHVhbFZhbHVlKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5hY3Rpb25TcGVlZE9wdGlvbkVycm9yLCBvcHRpb25OYW1lLCBhY3R1YWxWYWx1ZSk7XG4gICAgfVxufVxuXG5cbi8vIEFjdGlvbiBleGVjdXRpb24gZXJyb3JzXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY2xhc3MgQWN0aW9uRWxlbWVudE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTZWxlY3RvckVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKGFwaUZuQXJncykge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuYWN0aW9uRWxlbWVudE5vdEZvdW5kRXJyb3IsIGFwaUZuQXJncyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWxlbWVudElzSW52aXNpYmxlRXJyb3IgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5hY3Rpb25FbGVtZW50SXNJbnZpc2libGVFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uU2VsZWN0b3JNYXRjaGVzV3JvbmdOb2RlVHlwZUVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKG5vZGVEZXNjcmlwdGlvbikge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuYWN0aW9uU2VsZWN0b3JNYXRjaGVzV3JvbmdOb2RlVHlwZUVycm9yKTtcblxuICAgICAgICB0aGlzLm5vZGVEZXNjcmlwdGlvbiA9IG5vZGVEZXNjcmlwdGlvbjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25BZGRpdGlvbmFsRWxlbWVudE5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBTZWxlY3RvckVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKGFyZ3VtZW50TmFtZSwgYXBpRm5BcmdzKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5hY3Rpb25BZGRpdGlvbmFsRWxlbWVudE5vdEZvdW5kRXJyb3IsIGFwaUZuQXJncyk7XG5cbiAgICAgICAgdGhpcy5hcmd1bWVudE5hbWUgPSBhcmd1bWVudE5hbWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQWRkaXRpb25hbEVsZW1lbnRJc0ludmlzaWJsZUVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKGFyZ3VtZW50TmFtZSkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuYWN0aW9uQWRkaXRpb25hbEVsZW1lbnRJc0ludmlzaWJsZUVycm9yKTtcblxuICAgICAgICB0aGlzLmFyZ3VtZW50TmFtZSA9IGFyZ3VtZW50TmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25BZGRpdGlvbmFsU2VsZWN0b3JNYXRjaGVzV3JvbmdOb2RlVHlwZUVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKGFyZ3VtZW50TmFtZSwgbm9kZURlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5hY3Rpb25BZGRpdGlvbmFsU2VsZWN0b3JNYXRjaGVzV3JvbmdOb2RlVHlwZUVycm9yKTtcblxuICAgICAgICB0aGlzLmFyZ3VtZW50TmFtZSAgICA9IGFyZ3VtZW50TmFtZTtcbiAgICAgICAgdGhpcy5ub2RlRGVzY3JpcHRpb24gPSBub2RlRGVzY3JpcHRpb247XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWxlbWVudE5vbkVkaXRhYmxlRXJyb3IgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5hY3Rpb25FbGVtZW50Tm9uRWRpdGFibGVFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWxlbWVudE5vdFRleHRBcmVhRXJyb3IgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5hY3Rpb25FbGVtZW50Tm90VGV4dEFyZWFFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWxlbWVudE5vbkNvbnRlbnRFZGl0YWJsZUVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKGFyZ3VtZW50TmFtZSkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuYWN0aW9uRWxlbWVudE5vbkNvbnRlbnRFZGl0YWJsZUVycm9yKTtcblxuICAgICAgICB0aGlzLmFyZ3VtZW50TmFtZSA9IGFyZ3VtZW50TmFtZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25Sb290Q29udGFpbmVyTm90Rm91bmRFcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLmFjdGlvblJvb3RDb250YWluZXJOb3RGb3VuZEVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25JbmNvcnJlY3RLZXlzRXJyb3IgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoYXJndW1lbnROYW1lKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5hY3Rpb25JbmNvcnJlY3RLZXlzRXJyb3IpO1xuXG4gICAgICAgIHRoaXMuYXJndW1lbnROYW1lID0gYXJndW1lbnROYW1lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkNhbm5vdEZpbmRGaWxlVG9VcGxvYWRFcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChmaWxlUGF0aHMsIHNjYW5uZWRGaWxlUGF0aHMpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLmFjdGlvbkNhbm5vdEZpbmRGaWxlVG9VcGxvYWRFcnJvcik7XG5cbiAgICAgICAgdGhpcy5maWxlUGF0aHMgICAgICAgID0gZmlsZVBhdGhzO1xuICAgICAgICB0aGlzLnNjYW5uZWRGaWxlUGF0aHMgPSBzY2FubmVkRmlsZVBhdGhzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVsZW1lbnRJc05vdEZpbGVJbnB1dEVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuYWN0aW9uRWxlbWVudElzTm90RmlsZUlucHV0RXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkludmFsaWRTY3JvbGxUYXJnZXRFcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChzY3JvbGxUYXJnZXRYVmFsaWQsIHNjcm9sbFRhcmdldFlWYWxpZCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuYWN0aW9uSW52YWxpZFNjcm9sbFRhcmdldEVycm9yKTtcblxuICAgICAgICBpZiAoIXNjcm9sbFRhcmdldFhWYWxpZCkge1xuICAgICAgICAgICAgaWYgKCFzY3JvbGxUYXJnZXRZVmFsaWQpXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gJ3Njcm9sbFRhcmdldFggYW5kIHNjcm9sbFRhcmdldFkgcHJvcGVydGllcyc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0gJ3Njcm9sbFRhcmdldFggcHJvcGVydHknO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRoaXMucHJvcGVydGllcyA9ICdzY3JvbGxUYXJnZXRZIHByb3BlcnR5JztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBJbnZhbGlkRWxlbWVudFNjcmVlbnNob3REaW1lbnNpb25zRXJyb3IgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAod2lkdGgsIGhlaWdodCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuaW52YWxpZEVsZW1lbnRTY3JlZW5zaG90RGltZW5zaW9uc0Vycm9yKTtcblxuICAgICAgICBjb25zdCB3aWR0aElzSW52YWxpZCAgPSB3aWR0aCA8PSAwO1xuICAgICAgICBjb25zdCBoZWlnaHRJc0ludmFsaWQgPSBoZWlnaHQgPD0gMDtcblxuICAgICAgICBpZiAod2lkdGhJc0ludmFsaWQpIHtcbiAgICAgICAgICAgIGlmIChoZWlnaHRJc0ludmFsaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcmIgICAgICAgPSAnYXJlJztcbiAgICAgICAgICAgICAgICB0aGlzLmRpbWVuc2lvbnMgPSAnd2lkdGggYW5kIGhlaWdodCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcmIgICAgICAgPSAnaXMnO1xuICAgICAgICAgICAgICAgIHRoaXMuZGltZW5zaW9ucyA9ICd3aWR0aCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZlcmIgICAgICAgPSAnaXMnO1xuICAgICAgICAgICAgdGhpcy5kaW1lbnNpb25zID0gJ2hlaWdodCc7XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuLy8gSWZyYW1lIGVycm9yc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGNsYXNzIEFjdGlvbkVsZW1lbnROb3RJZnJhbWVFcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLmFjdGlvbkVsZW1lbnROb3RJZnJhbWVFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uSWZyYW1lSXNOb3RMb2FkZWRFcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLmFjdGlvbklmcmFtZUlzTm90TG9hZGVkRXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEN1cnJlbnRJZnJhbWVJc05vdExvYWRlZEVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuY3VycmVudElmcmFtZUlzTm90TG9hZGVkRXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENoaWxkV2luZG93Tm90Rm91bmRFcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLmNoaWxkV2luZG93Tm90Rm91bmRFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hpbGRXaW5kb3dJc05vdExvYWRlZEVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuY2hpbGRXaW5kb3dJc05vdExvYWRlZEVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5ub3RTd2l0Y2hUb1dpbmRvd0Vycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuY2Fubm90U3dpdGNoVG9XaW5kb3dFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2xvc2VDaGlsZFdpbmRvd0Vycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuY2xvc2VDaGlsZFdpbmRvd0Vycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5ub3RDbG9zZVdpbmRvd1dpdGhDaGlsZHJlbkVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuY2Fubm90Q2xvc2VXaW5kb3dXaXRoQ2hpbGRyZW5FcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2Fubm90Q2xvc2VXaW5kb3dXaXRob3V0UGFyZW50RXJyb3IgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5jYW5ub3RDbG9zZVdpbmRvd1dpdGhvdXRQYXJlbnQpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN3aXRjaFRvV2luZG93UHJlZGljYXRlRXJyb3IgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoZXJyTXNnKSB7XG4gICAgICAgIHN1cGVyKFRFU1RfUlVOX0VSUk9SUy5zd2l0Y2hUb1dpbmRvd1ByZWRpY2F0ZUVycm9yKTtcblxuICAgICAgICB0aGlzLmVyck1zZyA9IGVyck1zZztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXaW5kb3dOb3RGb3VuZEVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMudGFyZ2V0V2luZG93Tm90Rm91bmRFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUGFyZW50V2luZG93Tm90Rm91bmRFcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLnBhcmVudFdpbmRvd05vdEZvdW5kRXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByZXZpb3VzV2luZG93Tm90Rm91bmRFcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLnByZXZpb3VzV2luZG93Tm90Rm91bmRFcnJvcik7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2hpbGRXaW5kb3dDbG9zZWRCZWZvcmVTd2l0Y2hpbmdFcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yICgpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLmNoaWxkV2luZG93Q2xvc2VkQmVmb3JlU3dpdGNoaW5nRXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbm5vdFJlc3RvcmVDaGlsZFdpbmRvd0Vycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuY2Fubm90UmVzdG9yZUNoaWxkV2luZG93RXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEN1cnJlbnRJZnJhbWVOb3RGb3VuZEVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuY3VycmVudElmcmFtZU5vdEZvdW5kRXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEN1cnJlbnRJZnJhbWVJc0ludmlzaWJsZUVycm9yIGV4dGVuZHMgVGVzdFJ1bkVycm9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IgKCkge1xuICAgICAgICBzdXBlcihURVNUX1JVTl9FUlJPUlMuY3VycmVudElmcmFtZUlzSW52aXNpYmxlRXJyb3IpO1xuICAgIH1cbn1cblxuXG4vLyBOYXRpdmUgZGlhbG9nIGVycm9yc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGNsYXNzIE5hdGl2ZURpYWxvZ05vdEhhbmRsZWRFcnJvciBleHRlbmRzIFRlc3RSdW5FcnJvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yIChkaWFsb2dUeXBlLCB1cmwpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLm5hdGl2ZURpYWxvZ05vdEhhbmRsZWRFcnJvcik7XG5cbiAgICAgICAgdGhpcy5kaWFsb2dUeXBlID0gZGlhbG9nVHlwZTtcbiAgICAgICAgdGhpcy5wYWdlVXJsICAgID0gdXJsO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuY2F1Z2h0RXJyb3JJbk5hdGl2ZURpYWxvZ0hhbmRsZXIgZXh0ZW5kcyBUZXN0UnVuRXJyb3JCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoZGlhbG9nVHlwZSwgZXJyTXNnLCB1cmwpIHtcbiAgICAgICAgc3VwZXIoVEVTVF9SVU5fRVJST1JTLnVuY2F1Z2h0RXJyb3JJbk5hdGl2ZURpYWxvZ0hhbmRsZXIpO1xuXG4gICAgICAgIHRoaXMuZGlhbG9nVHlwZSA9IGRpYWxvZ1R5cGU7XG4gICAgICAgIHRoaXMuZXJyTXNnICAgICA9IGVyck1zZztcbiAgICAgICAgdGhpcy5wYWdlVXJsICAgID0gdXJsO1xuICAgIH1cbn1cbiJdfQ==