testcafe 2.3.1 → 2.6.1
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.
- package/CHANGELOG.md +150 -0
- package/LICENSE +1 -1
- package/README.md +40 -46
- package/bin/testcafe-with-v8-flag-filter.js +10 -16
- package/lib/api/exportable-lib/index.js +1 -11
- package/lib/api/structure/test.js +4 -11
- package/lib/api/test-controller/execution-context.js +4 -2
- package/lib/api/test-controller/index.js +8 -10
- package/lib/api/test-run-tracker.js +1 -1
- package/lib/assertions/executor.js +2 -11
- package/lib/browser/connection/gateway/index.js +272 -0
- package/lib/browser/connection/gateway/status.js +10 -0
- package/lib/browser/connection/index.js +60 -47
- package/lib/browser/connection/service-routes.js +4 -2
- package/lib/browser/provider/built-in/dedicated/chrome/cdp-client/index.js +3 -2
- package/lib/browser/provider/built-in/dedicated/chrome/index.js +48 -23
- package/lib/browser/provider/built-in/dedicated/edge/index.js +4 -1
- package/lib/browser/provider/index.js +13 -4
- package/lib/browser/provider/plugin-host.js +7 -1
- package/lib/cli/argument-parser/index.js +10 -16
- package/lib/cli/cli.js +4 -13
- package/lib/cli/remotes-wizard.js +2 -1
- package/lib/cli/utils/should-move-option-to-end.js +17 -0
- package/lib/client/automation/deps/hammerhead.js +24 -0
- package/lib/client/automation/deps/testcafe-core.js +24 -0
- package/lib/client/automation/index.js +567 -187
- package/lib/client/automation/index.min.js +1 -1
- package/lib/client/automation/playback/press/get-key-info.js +44 -0
- package/lib/client/automation/playback/press/utils.js +142 -0
- package/lib/client/automation/utils/get-key-code.js +15 -0
- package/lib/client/automation/utils/get-key-identifier.js +14 -0
- package/lib/client/automation/utils/is-letter.js +7 -0
- package/lib/client/automation/utils/key-identifier-maps.js +93 -0
- package/lib/client/browser/idle-page/index.html.mustache +2 -2
- package/lib/client/browser/idle-page/index.js +24 -11
- package/lib/client/core/index.js +67 -13
- package/lib/client/core/index.min.js +1 -1
- package/lib/client/core/utils/array.js +77 -0
- package/lib/client/core/utils/dom.js +459 -0
- package/lib/client/core/utils/send-request-to-frame.js +22 -0
- package/lib/client/core/utils/style.js +102 -0
- package/lib/client/core/utils/values/boundary-values.js +41 -0
- package/lib/client/driver/index.js +270 -242
- package/lib/client/driver/index.min.js +1 -1
- package/lib/client/test-run/iframe.js.mustache +6 -6
- package/lib/client/test-run/index.js.mustache +37 -33
- package/lib/client/ui/index.js +3238 -54
- package/lib/client/ui/index.min.js +1 -1
- package/lib/client/ui/sprite.svg +15 -0
- package/lib/client/ui/styles.css +184 -41
- package/lib/compiler/babel/load-libs.js +6 -6
- package/lib/compiler/compilers.js +7 -7
- package/lib/compiler/index.js +6 -6
- package/lib/compiler/interfaces.js +1 -1
- package/lib/compiler/test-file/add-export-api.js +3 -3
- package/lib/compiler/test-file/api-based.js +8 -37
- package/lib/compiler/test-file/formats/es-next/compiler.js +5 -5
- package/lib/compiler/test-file/formats/typescript/compiler.js +9 -9
- package/lib/compiler/test-file/get-exportable-lib-path.js +3 -3
- package/lib/configuration/configuration-base.js +9 -6
- package/lib/configuration/default-values.js +3 -3
- package/lib/configuration/formats.js +9 -5
- package/lib/configuration/interfaces.js +1 -1
- package/lib/configuration/option-names.js +3 -4
- package/lib/configuration/run-option-names.js +2 -2
- package/lib/configuration/testcafe-configuration.js +41 -24
- package/lib/configuration/types.js +1 -1
- package/lib/configuration/utils.js +32 -0
- package/lib/custom-client-scripts/client-script.js +2 -2
- package/lib/custom-client-scripts/get-code.js +3 -3
- package/lib/custom-client-scripts/routing.js +10 -12
- package/lib/errors/runtime/templates.js +3 -2
- package/lib/errors/test-run/templates.js +4 -1
- package/lib/errors/types.js +3 -1
- package/lib/index.js +6 -31
- package/lib/live/bootstrapper.js +3 -3
- package/lib/live/test-runner.js +9 -7
- package/lib/native-automation/add-custom-debug-formatters.js +23 -0
- package/lib/native-automation/api-base.js +27 -0
- package/lib/native-automation/client/event-descriptor.js +118 -0
- package/lib/native-automation/client/input.js +46 -0
- package/lib/native-automation/client/key-press/utils.js +31 -0
- package/lib/native-automation/client/types.js +11 -0
- package/lib/native-automation/client/utils.js +54 -0
- package/lib/native-automation/cookie-provider.js +115 -0
- package/lib/native-automation/empty-page-markup.js +11 -0
- package/lib/native-automation/error-route.js +7 -0
- package/lib/native-automation/errors.js +20 -0
- package/lib/native-automation/index.js +53 -0
- package/lib/native-automation/request-hooks/event-factory/frame-navigated-event-based.js +40 -0
- package/lib/native-automation/request-hooks/event-factory/request-paused-event-based.js +94 -0
- package/lib/native-automation/request-hooks/event-provider.js +55 -0
- package/lib/native-automation/request-hooks/pipeline-context.js +11 -0
- package/lib/{proxyless → native-automation}/request-pipeline/constants.js +1 -1
- package/lib/native-automation/request-pipeline/context-info.js +58 -0
- package/lib/native-automation/request-pipeline/index.js +329 -0
- package/lib/native-automation/request-pipeline/resendAuthRequest.js +23 -0
- package/lib/native-automation/request-pipeline/safe-api.js +66 -0
- package/lib/native-automation/request-pipeline/special-handlers.js +76 -0
- package/lib/native-automation/request-pipeline/test-run-bridge.js +45 -0
- package/lib/native-automation/resource-injector.js +175 -0
- package/lib/native-automation/session-storage/index.js +43 -0
- package/lib/native-automation/storages-provider.js +17 -0
- package/lib/native-automation/types.js +12 -0
- package/lib/native-automation/utils/cdp.js +71 -0
- package/lib/native-automation/utils/convert.js +11 -0
- package/lib/native-automation/utils/get-active-client.js +8 -0
- package/lib/native-automation/utils/headers.js +30 -0
- package/lib/native-automation/utils/string.js +32 -0
- package/lib/reporter/index.js +52 -4
- package/lib/reporter/interfaces.js +1 -1
- package/lib/reporter/plugin-host.js +44 -4
- package/lib/reporter/plugin-methods.js +2 -1
- package/lib/reporter/report-data-log.js +25 -0
- package/lib/role/role.js +4 -39
- package/lib/runner/bootstrapper.js +40 -15
- package/lib/runner/browser-job.js +4 -5
- package/lib/runner/fixture-hook-controller.js +1 -7
- package/lib/runner/index.js +87 -94
- package/lib/runner/interfaces.js +1 -1
- package/lib/runner/task/index.js +2 -32
- package/lib/runner/test-run-controller.js +46 -4
- package/lib/shared/errors/index.js +8 -2
- package/lib/shared/utils/is-file-protocol.js +2 -2
- package/lib/test-run/bookmark.js +5 -23
- package/lib/test-run/commands/actions.js +16 -4
- package/lib/test-run/commands/service.js +2 -3
- package/lib/test-run/commands/type.js +2 -1
- package/lib/test-run/commands/utils.js +4 -2
- package/lib/test-run/cookies/base.js +4 -1
- package/lib/test-run/cookies/factory.js +4 -4
- package/lib/test-run/cookies/provider.js +9 -2
- package/lib/test-run/execute-js-expression/index.js +4 -2
- package/lib/test-run/index.js +35 -151
- package/lib/test-run/request/create-request-options.js +37 -24
- package/lib/test-run/request/send.js +2 -3
- package/lib/test-run/role-provider.js +5 -5
- package/lib/test-run/session-controller.js +5 -5
- package/lib/test-run/storages/factory.js +4 -4
- package/lib/testcafe.js +17 -18
- package/lib/utils/check-is-vm.js +58 -0
- package/lib/utils/debug-loggers.js +9 -7
- package/lib/utils/get-browser.js +5 -2
- package/lib/utils/get-options/boolean-or-object-option.js +18 -0
- package/lib/utils/get-options/quarantine.js +10 -13
- package/lib/utils/get-options/skip-js-errors.js +12 -16
- package/lib/utils/parse-user-agent.js +20 -13
- package/lib/utils/string.js +1 -1
- package/package.json +14 -11
- package/ts-defs/index.d.ts +12 -2
- package/ts-defs/selectors.d.ts +8 -1
- package/ts-defs/testcafe-scripts.d.ts +8 -1
- package/lib/browser/connection/gateway.js +0 -205
- package/lib/compiler/test-file/test-file-temp-variable-name.js +0 -6
- package/lib/dashboard/config-storage.js +0 -26
- package/lib/dashboard/connector.js +0 -84
- package/lib/dashboard/documentation-url.js +0 -6
- package/lib/dashboard/formatting.js +0 -26
- package/lib/dashboard/get-dashboard-url.js +0 -10
- package/lib/dashboard/get-default-project-link.js +0 -23
- package/lib/dashboard/get-env-options.js +0 -26
- package/lib/dashboard/index.js +0 -145
- package/lib/dashboard/interfaces.js +0 -3
- package/lib/dashboard/messages.js +0 -21
- package/lib/proxyless/add-custom-debug-formatters.js +0 -22
- package/lib/proxyless/api-base.js +0 -25
- package/lib/proxyless/client/event-simulator.js +0 -40
- package/lib/proxyless/client/types.js +0 -11
- package/lib/proxyless/client/utils.js +0 -24
- package/lib/proxyless/cookie-provider.js +0 -87
- package/lib/proxyless/default-setup-options.js +0 -9
- package/lib/proxyless/empty-page-markup.js +0 -11
- package/lib/proxyless/error-route.js +0 -7
- package/lib/proxyless/index.js +0 -53
- package/lib/proxyless/request-hooks/event-factory/frame-navigated-event-based.js +0 -40
- package/lib/proxyless/request-hooks/event-factory/request-paused-event-based.js +0 -95
- package/lib/proxyless/request-hooks/event-provider.js +0 -52
- package/lib/proxyless/request-hooks/pipeline-context.js +0 -11
- package/lib/proxyless/request-pipeline/context-info.js +0 -55
- package/lib/proxyless/request-pipeline/index.js +0 -230
- package/lib/proxyless/request-pipeline/resendAuthRequest.js +0 -23
- package/lib/proxyless/request-pipeline/safe-api.js +0 -62
- package/lib/proxyless/request-pipeline/special-handlers.js +0 -73
- package/lib/proxyless/request-pipeline/test-run-bridge.js +0 -45
- package/lib/proxyless/resource-injector.js +0 -162
- package/lib/proxyless/session-storage/index.js +0 -39
- package/lib/proxyless/storages-provider.js +0 -17
- package/lib/proxyless/types.js +0 -10
- package/lib/proxyless/utils/cdp.js +0 -66
- package/lib/proxyless/utils/get-active-client.js +0 -8
- package/lib/proxyless/utils/headers.js +0 -30
- package/lib/proxyless/utils/string.js +0 -32
- package/lib/services/compiler/esm-runtime-holder-name.js +0 -6
- package/lib/services/compiler/host.js +0 -370
- package/lib/services/compiler/interfaces.js +0 -3
- package/lib/services/compiler/io.js +0 -10
- package/lib/services/compiler/protocol.js +0 -17
- package/lib/services/compiler/service-loader.js +0 -18
- package/lib/services/compiler/service.js +0 -361
- package/lib/services/compiler/test-run-proxy.js +0 -156
- package/lib/services/interfaces.js +0 -3
- package/lib/services/process-title.js +0 -10
- package/lib/services/serialization/prepare-options.js +0 -23
- package/lib/services/serialization/replicator/create-replicator.js +0 -58
- package/lib/services/serialization/replicator/interfaces.js +0 -3
- package/lib/services/serialization/replicator/transforms/base-transform.js +0 -16
- package/lib/services/serialization/replicator/transforms/browser-console-messages-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/callsite-record-transform.js +0 -24
- package/lib/services/serialization/replicator/transforms/command-base-trasform/assertion-command-constructors.js +0 -28
- package/lib/services/serialization/replicator/transforms/command-base-trasform/command-constructors.js +0 -66
- package/lib/services/serialization/replicator/transforms/command-base-trasform/index.js +0 -49
- package/lib/services/serialization/replicator/transforms/command-base-trasform/types.js +0 -3
- package/lib/services/serialization/replicator/transforms/configure-response-event-option-transform.js +0 -21
- package/lib/services/serialization/replicator/transforms/custom-error-transform.js +0 -29
- package/lib/services/serialization/replicator/transforms/function-marker-transform/index.js +0 -21
- package/lib/services/serialization/replicator/transforms/function-marker-transform/marker.js +0 -9
- package/lib/services/serialization/replicator/transforms/promise-marker-transform/index.js +0 -21
- package/lib/services/serialization/replicator/transforms/promise-marker-transform/marker.js +0 -9
- package/lib/services/serialization/replicator/transforms/raw-command-callsite-record-transform.js +0 -22
- package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/index.js +0 -22
- package/lib/services/serialization/replicator/transforms/re-executable-promise-transform/marker.js +0 -6
- package/lib/services/serialization/replicator/transforms/request-filter-rule-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/request-hook-event-data-transform.js +0 -41
- package/lib/services/serialization/replicator/transforms/response-mock-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/role-transform.js +0 -21
- package/lib/services/serialization/replicator/transforms/testcafe-error-list-transform.js +0 -23
- package/lib/services/serialization/replicator/transforms/url-transform.js +0 -23
- package/lib/services/serialization/test-structure.js +0 -91
- package/lib/services/utils/ipc/interfaces.js +0 -29
- package/lib/services/utils/ipc/io.js +0 -109
- package/lib/services/utils/ipc/message.js +0 -84
- package/lib/services/utils/ipc/packet.js +0 -57
- package/lib/services/utils/ipc/proxy.js +0 -94
- package/lib/services/utils/ipc/transport.js +0 -65
- package/lib/services/utils/method-should-not-be-called-error.js +0 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,155 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v2.6.1 (2023-05-29)
|
|
4
|
+
|
|
5
|
+
TestCafe v2.6.1 retires **Experimental Debug** mode, and introduces a number of important bug fixes.
|
|
6
|
+
|
|
7
|
+
### Removed: Experimental debug mode
|
|
8
|
+
|
|
9
|
+
TestCafe v1.18.0 introduced [Experimental Debug mode](https://testcafe.io/403664/release-notes/framework/2021-12-22-testcafe-v1-18-0-released) --- a way to debug Selectors and Client Functions in the text editor. TestCafe v2.4.0 shipped with the [Visual Selector Debugger](https://testcafe.io/documentation/404288/guides/intermediate-guides/visual-selector-debugger), which allows users to troubleshoot Selector queries directly in the browser.
|
|
10
|
+
|
|
11
|
+
The two capabilities serve the same purpose, but the Visual Selector Debugger is more user-friendly. As such, beginning with TestCafe v2.6.1, the framework **no longer includes** Experimental Debug mode. Thank you to all the TestCafe users who tried out the capability.
|
|
12
|
+
|
|
13
|
+
### Bug fixes
|
|
14
|
+
|
|
15
|
+
* When TestCafe runs in Native Automation mode, Request Hooks yield an error ([#7683](https://github.com/DevExpress/testcafe/issues/7683)).
|
|
16
|
+
* When TestCafe runs in Native Automation mode, the framework incorrectly processes pages with the pound sign ("#") in the URL ([#7652](https://github.com/DevExpress/testcafe/issues/7652)).
|
|
17
|
+
* TestCafe incorrectly handles XHR headers in Native Automation mode ([#7664](https://github.com/DevExpress/testcafe/issues/7664), [#7686](https://github.com/DevExpress/testcafe/issues/7686), [#7645](https://github.com/DevExpress/testcafe/issues/7645)).
|
|
18
|
+
* TestCafe reports an incorrect browser alias when it runs tests in Microsoft Edge ([#7647](https://github.com/DevExpress/testcafe/issues/7647)).
|
|
19
|
+
* TestCafe fails to intercept all HTTP requests when it runs in Native Automation mode. ([#7640](https://github.com/DevExpress/testcafe/issues/7640)).
|
|
20
|
+
* TestCafe cannot resize browser windows in the latest version of Chrome for macOS ([#7684](https://github.com/DevExpress/testcafe/issues/7684)).
|
|
21
|
+
* TestCafe incorrectly processes client-side styles, causing slowdowns and errors ([#6726](https://github.com/DevExpress/testcafe/issues/6726), [#6747](https://github.com/DevExpress/testcafe/issues/6747)).
|
|
22
|
+
* TestCafe crashes when you use the TestCafe Test Runner API to launch multiple tests simultaneously ([#7711](https://github.com/DevExpress/testcafe/issues/7711)).
|
|
23
|
+
|
|
24
|
+
## v2.6.0 (2023-05-11)
|
|
25
|
+
|
|
26
|
+
TestCafe v2.6.0 introduces two enhancements: a new hook that allows users to modify reporter output, and support for JavaScript configuration files with the `.cjs` extension.
|
|
27
|
+
|
|
28
|
+
### New reporter hook
|
|
29
|
+
|
|
30
|
+
The [onBeforeWrite](https://testcafe.io/documentation/404388/guides/advanced-guides/modify-reporter-output) hook allows you to modify the output of a reporter.
|
|
31
|
+
|
|
32
|
+
If you want your test reports to include custom content, you can create a custom reporter from scratch. However, this approach takes time and effort. Use the `onBeforeWrite` hook if you want to make minor changes to the output of an existing reporter.
|
|
33
|
+
|
|
34
|
+
Define an `onBeforeWrite` hook in a JavaScript configuration file. The following hook adds the duration in milliseconds to every test entry in the report:
|
|
35
|
+
|
|
36
|
+
```js
|
|
37
|
+
//.testcaferc.js or .testcaferc.cjs
|
|
38
|
+
function onBeforeWriteHook(writeInfo) { // This function will fire every time the reporter calls the "write" method.
|
|
39
|
+
if (writeInfo.initiator === 'reportTestDone') { // The "initiator" property contains the name of the reporter event that triggered the hook.
|
|
40
|
+
const {
|
|
41
|
+
name,
|
|
42
|
+
testRunInfo,
|
|
43
|
+
meta
|
|
44
|
+
} = writeInfo.data || {}; // If you attached this hook to a compatible reporter (such as "spec" or "list"), the hook can process data related to the event.
|
|
45
|
+
const testDuration = testRunInfo.durationMs; // Save the duration of the test.
|
|
46
|
+
writeInfo.formattedText = writeInfo.formattedText + ' (' + testDuration + 'ms)'; // Add test duration to the reporter output.
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
module.exports = { // Attach the hook
|
|
52
|
+
hooks: {
|
|
53
|
+
reporter: {
|
|
54
|
+
onBeforeWrite: {
|
|
55
|
+
'spec': onBeforeWriteHook, // This hook will fire when you use the default "spec" reporter.
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+

|
|
63
|
+
|
|
64
|
+
### CJS support
|
|
65
|
+
|
|
66
|
+
If you run TestCafe v2.6.0 and higher, you can now use a configuration file with the `.cjs` file extension. TestCafe detects the `.testcaferc.cjs` file on startup, alongside its `.js` and `.json` counterparts.
|
|
67
|
+
|
|
68
|
+
[TestCafe configuration files](https://testcafe.io/documentation/402638/reference/configuration-file) **only** support CommonJS syntax. Meanwhile, modern JavaScript tools often default to ESM syntax. If a JavaScript project is of type `module`, Node.js expects the project's `.js` files to contain ESM syntax.
|
|
69
|
+
|
|
70
|
+
Use the `.cjs` configuration file extension to let Node.js know that the file contains CommonJS syntax.
|
|
71
|
+
|
|
72
|
+
Many thanks to the TestCafe contributor Damien Guérin ([@gigaga](https://github.com/DevExpress/testcafe/pull/7614)) for the implementation of this capability.
|
|
73
|
+
|
|
74
|
+
### Bug fixes
|
|
75
|
+
|
|
76
|
+
* If you call the `t.skipJsErrors` method without arguments, TestCafe passes a `false` value to the method. This behavior is inconsistent with similar methods of a greater scope --- `test.skipJsErrors` and `fixture.skipJsErrors` ([#7648](https://github.com/DevExpress/testcafe/issues/7648)).
|
|
77
|
+
* Users cannot disable the "quarantine mode" or "skipJsErrors" settings from the command line ([#7077](https://github.com/DevExpress/testcafe/issues/7077)).
|
|
78
|
+
* TestCafe incorrectly processes exceptions of types other than `Error` ([#7627](https://github.com/DevExpress/testcafe/issues/7627)).
|
|
79
|
+
* TestCafe does not consistently execute the `t.pressKey` action in Mozilla Firefox. Attempts to press the "backspace" key and the "tab" key, among others, may fail. ([#7623](https://github.com/DevExpress/testcafe/pull/7623))
|
|
80
|
+
* When TestCafe runs in Native Automation mode, it incorrectly executes some instances of the `t.request` method. ([#7609](https://github.com/DevExpress/testcafe/issues/7609))
|
|
81
|
+
* The TestCafe proxy incorrectly processes private class properties in client-side scripts, which leads to page load failure ([#7632](https://github.com/DevExpress/testcafe/issues/7632), PR by [@sorin-davidoi](https://github.com/sorin-davidoi)).
|
|
82
|
+
|
|
83
|
+
## v2.5.0 (2023-04-06)
|
|
84
|
+
|
|
85
|
+
TestCafe v2.5.0 introduces three major enhancements:
|
|
86
|
+
* The new `t.report` method passes custom data to the test reporter.
|
|
87
|
+
* The new `--native-automation` flag enables TestCafe to automate all Chromium-based browsers with the native CDP protocol.
|
|
88
|
+
* The new `--esm` flag allows users to import ESM modules in test files.
|
|
89
|
+
|
|
90
|
+
### t.report
|
|
91
|
+
|
|
92
|
+
Include the [t.report()](https://testcafe.io/documentation/404350/reference/test-api/testcontroller/report) method in your test to pass custom data to the reporter.
|
|
93
|
+
|
|
94
|
+
Specify arguments of any type (string, array, Object, etc). Separate arguments with a comma:
|
|
95
|
+
|
|
96
|
+
```js
|
|
97
|
+
await
|
|
98
|
+
t.report(
|
|
99
|
+
'text',
|
|
100
|
+
{'key': 'value'},
|
|
101
|
+
['arrayItem1', 'arrayItem2']
|
|
102
|
+
);
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
The default `spec` reporter displays custom data after test completion, once for each browser that runs the test.
|
|
106
|
+
|
|
107
|
+

|
|
108
|
+
|
|
109
|
+
### CDP Automation: Now Stable
|
|
110
|
+
|
|
111
|
+
TestCafe v2.2.0 introduced an experimental [proxyless mode](https://testcafe.io/documentation/404237/guides/intermediate-guides/native-automation-mode) that automated Google Chrome with the native CDP protocol.
|
|
112
|
+
|
|
113
|
+
For the v2.5.0 release, the TestCafe team addressed most issues that our users discovered when the capability was "experimental", and gave it a new name --- Native Automation mode.
|
|
114
|
+
|
|
115
|
+
Unlike its predecessor, the Native Automation mode supports **all** Chromium-based browsers, including Microsoft Edge. Enable the `nativeAutomation` option in the [command line interface](https://testcafe.io/documentation/402639/reference/command-line-interface#--native-automation), the [configuration file](https://testcafe.io/documentation/402638/reference/configuration-file#nativeautomation), or the [runner.run()](https://testcafe.io/documentation/402655/reference/testcafe-api/runner/run#nativeautomation) function to try this capability.
|
|
116
|
+
|
|
117
|
+
> [!IMPORTANT]
|
|
118
|
+
> TestCafe v2.5.0 removed the `experimentalProxyless` option from the [createTestCafe](https://testcafe.io/documentation/402662/reference/testcafe-api/global/createtestcafe) function. Use the [runner.run()](https://testcafe.io/documentation/402655/reference/testcafe-api/runner/run#nativeautomation) function to enable Native Automation mode from the TestCafe Test Runner API.
|
|
119
|
+
|
|
120
|
+
### ESM Module Support: Now Stable
|
|
121
|
+
|
|
122
|
+
TestCafe v2.5.0 **drops** the `experimental` prefix from the `--esm` [CLI flag](https://testcafe.io/documentation/402639/reference/command-line-interface#--esm). Enable the `--esm` flag to import modules that do not support CommonJS.
|
|
123
|
+
|
|
124
|
+
```sh
|
|
125
|
+
testcafe chrome test.js --esm
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## v2.4.0 (2023-03-06)
|
|
129
|
+
TestCafe v2.4.0 introduces the Visual Selector Debugger. You can now create and debug Selector queries in the browser window.
|
|
130
|
+
|
|
131
|
+
### Visual Selector Debugger
|
|
132
|
+
|
|
133
|
+
TestCafe v2.4.0 displays the Visual Selector Debugger panel when you activate [Debug Mode](https://testcafe.io/documentation/402835/guides/basic-guides/debug-tests). Use the panel to debug Selector queries from your test, or generate new Selector queries.
|
|
134
|
+
|
|
135
|
+

|
|
136
|
+
|
|
137
|
+
If a Selector query causes your test to fail, add the [t.debug()](https://testcafe.io/documentation/402707/reference/test-api/testcontroller/debug) command after the last successful action, and launch the test.
|
|
138
|
+
|
|
139
|
+
When the test reaches the breakpoint, the window that runs the test displays the Selector Debugger panel. Copy the failing Selector query from test code to the Selector Debugger input field.
|
|
140
|
+
|
|
141
|
+
* TestCafe highlights page elements that match the Selector query.
|
|
142
|
+
* If no elements match the Selector query, the panel displays the **No Matching Elements** warning.
|
|
143
|
+
* If your Selector query contians a syntax error, the panel displays the **Invalid Selector** warning.
|
|
144
|
+
|
|
145
|
+
To interactively generate a Selector query, click the **Pick** button, and select the target element on the page.
|
|
146
|
+
|
|
147
|
+
For more information on the panel, its capabilities, and limitations, read the [Visual Selector Debugger Guide](https://testcafe.io/documentation/404288/guides/intermediate-guides/visual-selector-debugger).
|
|
148
|
+
|
|
149
|
+
### Bug Fixes
|
|
150
|
+
|
|
151
|
+
* TestCafe cannot execute the [t.request](https://testcafe.io/documentation/403981/reference/test-api/testcontroller/request) action in [proxyless mode](https://testcafe.io/documentation/404237/guides/experimental-capabilities/proxyless-mode) ([#7523](https://github.com/DevExpress/testcafe/issues/7523)).
|
|
152
|
+
|
|
3
153
|
## v2.3.1 (2023-02-09)
|
|
4
154
|
TestCafe v2.3.1 introduces a number of bug fixes.
|
|
5
155
|
|
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
The MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (C) 2012-
|
|
3
|
+
Copyright (C) 2012-2023 Developer Express Inc.
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
<a href="https://www.devexpress.com/products/testcafestudio/?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-banner">
|
|
3
|
+
<img src="https://raw.github.com/DevExpress/testcafe/master/media/testcafe-studio-banner.png" alt="Try TestCafe Studio IDE" />
|
|
4
|
+
</a>
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
@@ -17,7 +17,9 @@
|
|
|
17
17
|
</p>
|
|
18
18
|
|
|
19
19
|
<p align="center">
|
|
20
|
-
<i>
|
|
20
|
+
<i> Automate end-to-end web testing with TestCafe, a Node.js-based testing framework.</i><br><br>
|
|
21
|
+
TestCafe is <strong>free</strong> and as easy to use as <strong>1-2-3</strong>:<br>
|
|
22
|
+
<strong>1.</strong> Write your tests in JS or TypeScript.<br><strong>2.</strong> Execute your tests.<br><strong>3.</strong> View test results.
|
|
21
23
|
</p>
|
|
22
24
|
|
|
23
25
|
<p align="center">
|
|
@@ -29,7 +31,7 @@
|
|
|
29
31
|
|
|
30
32
|
* **Works on all popular environments**: TestCafe runs on Windows, MacOS, and Linux. It supports desktop, mobile, remote and cloud [browsers](https://testcafe.io/documentation/402828/guides/concepts/browsers#browser-support) (UI or headless).
|
|
31
33
|
* **1 minute to set up**: You [do not need WebDriver](https://testcafe.io/402636/faq#i-have-heard-that-testcafe-does-not-use-selenium-how-does-it-operate) or any other testing software. Install TestCafe with one command, and you are ready to test: `npm install -g testcafe`
|
|
32
|
-
* **Free and open source**: TestCafe is free to use under the [MIT license](https://github.com/DevExpress/testcafe/blob/master/LICENSE). [Plugins](#plugins) provide custom reports, integration with other tools, launching tests from IDE, etc. You can use the plugins made by the GitHub community or
|
|
34
|
+
* **Free and open source**: TestCafe is free to use under the [MIT license](https://github.com/DevExpress/testcafe/blob/master/LICENSE). [Plugins](#plugins) provide custom reports, integration with other tools, launching tests from IDE, etc. You can use the plugins made by the GitHub community or create your own.
|
|
33
35
|
|
|
34
36
|

|
|
35
37
|
|
|
@@ -62,26 +64,20 @@ You can change the maximum wait time.
|
|
|
62
64
|
If elements load faster, tests skip the timeout and continue.
|
|
63
65
|
|
|
64
66
|
**Rapid test development tool**<br/>
|
|
65
|
-
|
|
66
|
-
See how it works in the [TestCafe Live repository](https://github.com/DevExpress/testcafe-live).
|
|
67
|
+
When you enable [live mode](https://testcafe.io/documentation/403842/guides/intermediate-guides/live-mode), changes to test code immediately restart the test, and you instantly see the results.
|
|
67
68
|
|
|
68
69
|
**Latest JS and TypeScript support**<br/>
|
|
69
|
-
TestCafe supports the
|
|
70
|
-
You can also [use TypeScript](https://testcafe.io/documentation/402824/guides/concepts/typescript-and-coffeescript#typescript-support)
|
|
71
|
-
if you prefer a strongly typed language.
|
|
70
|
+
TestCafe supports the most recent JavaScript-related features, including ES2017 (async/await). You can also [use TypeScript](https://testcafe.io/documentation/402824/guides/concepts/typescript-and-coffeescript#typescript-support) if you prefer a strongly typed language instead.
|
|
72
71
|
|
|
73
72
|
**Detects JS errors in your code**<br/>
|
|
74
|
-
TestCafe reports JS errors that it
|
|
75
|
-
|
|
76
|
-
However, you can disable this.
|
|
73
|
+
TestCafe reports JS errors that it locates on a given webpage. Tests automatically fail if TestCafe encounters such errors.<br />
|
|
74
|
+
You can, however, disable this option.<br />
|
|
77
75
|
|
|
78
76
|
**Concurrent test launch**<br/>
|
|
79
|
-
TestCafe can open multiple instances of the same browser
|
|
80
|
-
tests which decreases test execution time.
|
|
77
|
+
TestCafe can open multiple instances of the same browser and run parallel tests (to help decrease test execution time).
|
|
81
78
|
|
|
82
79
|
**PageObject pattern support**<br/>
|
|
83
|
-
The TestCafe's [Test API](https://testcafe.io/documentation/402632/reference)
|
|
84
|
-
includes a high-level selector library, assertions, etc.
|
|
80
|
+
The TestCafe's [Test API](https://testcafe.io/documentation/402632/reference) includes a high-level selector library, assertions, etc.
|
|
85
81
|
You can combine them to implement readable tests with the [PageObject pattern](https://testcafe.io/documentation/402826/guides/concepts/page-model).
|
|
86
82
|
|
|
87
83
|
```js
|
|
@@ -89,14 +85,15 @@ const macOSInput = Selector('.column').find('label').withText('MacOS').child('in
|
|
|
89
85
|
```
|
|
90
86
|
|
|
91
87
|
**Easy to include in a continuous integration system**<br/>
|
|
92
|
-
You can run TestCafe from a console, and its reports can be viewed
|
|
93
|
-
|
|
88
|
+
You can run TestCafe from a console, and its reports can be viewed within CI systems (TeamCity, Jenkins, Travis & etc.)
|
|
89
|
+
|
|
90
|
+
# Love TestCafe Open-source Edition? Want to Record Tests without Writing JavaScript or TypeScript Code?
|
|
94
91
|
|
|
95
92
|
## TestCafe Studio: IDE for End-to-End Web Testing
|
|
96
93
|
|
|
97
|
-
TestCafe
|
|
94
|
+
TestCafe is the perfect choice for JavaScript developers and experienced Q&A teams. If you’d like to delegate testing to QA engineers and are looking for a code-free way to record and maintain tests compatible with your existing infrastructure, check out [TestCafe Studio](https://www.devexpress.com/products/testcafestudio/?utm_source=github.com&utm_medium=referral&utm_campaign=tc-gh-ide) - a testing IDE built atop the open-source version of TestCafe.
|
|
98
95
|
|
|
99
|
-
|
|
96
|
+
Review the following article to learn how TestCafe Studio can fit into any workflow: [What's Better than TestCafe? TestCafe Studio](https://www.devexpress.com/products/testcafestudio/qa-end-to-end-web-testing.xml).
|
|
100
97
|
|
|
101
98
|

|
|
102
99
|
|
|
@@ -104,11 +101,11 @@ Read the following article to learn how TestCafe Studio could fit into your work
|
|
|
104
101
|
<i>Record and Run a Test in TestCafe Studio</i>
|
|
105
102
|
</p>
|
|
106
103
|
|
|
107
|
-
|
|
104
|
+
# Getting Started
|
|
108
105
|
|
|
109
106
|
### Installation
|
|
110
107
|
|
|
111
|
-
Ensure that [Node.js](https://nodejs.org/)
|
|
108
|
+
Ensure that you run [Node.js](https://nodejs.org/) version 16 or higher, and run the following command:
|
|
112
109
|
|
|
113
110
|
```sh
|
|
114
111
|
npm install -g testcafe
|
|
@@ -116,11 +113,9 @@ npm install -g testcafe
|
|
|
116
113
|
|
|
117
114
|
### Creating the Test
|
|
118
115
|
|
|
119
|
-
|
|
116
|
+
For this simple example, we will test the following page: [https://devexpress.github.io/testcafe/example](https://devexpress.github.io/testcafe/example)
|
|
120
117
|
|
|
121
|
-
Create a
|
|
122
|
-
Note that it needs to have a specific structure: tests must be organized into fixtures.
|
|
123
|
-
You can paste the following code to see the test in action:
|
|
118
|
+
Create a .js or .ts file on your computer. Remember that a .js or .ts file must maintain a specific structure: tests must be organized into fixtures. You can paste the following code to see the test in action:
|
|
124
119
|
|
|
125
120
|
```js
|
|
126
121
|
import { Selector } from 'testcafe'; // first import testcafe selectors
|
|
@@ -129,57 +124,57 @@ fixture `Getting Started`// declare the fixture
|
|
|
129
124
|
.page `https://devexpress.github.io/testcafe/example`; // specify the start page
|
|
130
125
|
|
|
131
126
|
|
|
132
|
-
//then create a test and place your code
|
|
127
|
+
//then create a test and place your code within it
|
|
133
128
|
test('My first test', async t => {
|
|
134
129
|
await t
|
|
135
130
|
.typeText('#developer-name', 'John Smith')
|
|
136
131
|
.click('#submit-button')
|
|
137
132
|
|
|
138
|
-
// Use the assertion to check if
|
|
133
|
+
// Use the assertion to check if actual header text equals expected text
|
|
139
134
|
.expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');
|
|
140
135
|
});
|
|
141
136
|
```
|
|
142
137
|
|
|
143
138
|
### Running the Test
|
|
144
139
|
|
|
145
|
-
Call the following command in a command shell.
|
|
146
|
-
Specify the [target browser](https://testcafe.io/documentation/402639/reference/command-line-interface#browser-list)
|
|
147
|
-
and [file path](https://testcafe.io/documentation/402639/reference/command-line-interface#file-pathglob-pattern).
|
|
140
|
+
Call the following command in a command shell. Specify the [target browser](https://testcafe.io/documentation/402639/reference/command-line-interface#browser-list) and [file path](https://testcafe.io/documentation/402639/reference/command-line-interface#file-pathglob-pattern).
|
|
148
141
|
|
|
149
142
|
```sh
|
|
150
143
|
testcafe chrome test1.js
|
|
151
144
|
```
|
|
152
145
|
|
|
153
|
-
TestCafe opens the browser and
|
|
146
|
+
TestCafe opens the browser and begins test execution.
|
|
147
|
+
|
|
148
|
+
> Important: Make certain the browser tab that runs tests stays active.
|
|
149
|
+
> Do not minimize the browser window.
|
|
150
|
+
> Inactive tabs and minimized browser windows switch to lower resource consumption mode.
|
|
151
|
+
> In low consumption mode, tests may not execute correctly.
|
|
154
152
|
|
|
155
|
-
> Important! Make sure the browser tab that runs tests stays active.
|
|
156
|
-
> Do not minimize the browser window. Inactive tabs and minimized browser windows switch
|
|
157
|
-
> to a lower resource consumption mode where tests are not guaranteed to execute correctly.
|
|
158
153
|
|
|
159
154
|
### Viewing the Results
|
|
160
155
|
|
|
161
|
-
TestCafe outputs
|
|
162
|
-
for more information. You can also use [plugins](#plugins) to customize
|
|
156
|
+
TestCafe outputs results into a command shell by default. See [Reporters](https://testcafe.io/documentation/402825/guides/concepts/reporters)
|
|
157
|
+
for more information. You can also use [plugins](#plugins) to customize reports.
|
|
163
158
|
|
|
164
159
|

|
|
165
160
|
|
|
166
|
-
Read the [Getting Started](https://testcafe.io/documentation/402635/getting-started) page for
|
|
161
|
+
Read the [Getting Started](https://testcafe.io/documentation/402635/getting-started) page for additional assistance.
|
|
167
162
|
|
|
168
163
|
## Documentation
|
|
169
164
|
|
|
170
|
-
|
|
165
|
+
Visit the following webpage to review our online help system: [Documentation](https://testcafe.io/documentation/402635/getting-started).
|
|
171
166
|
|
|
172
167
|
## Get Help
|
|
173
168
|
|
|
174
|
-
Join the TestCafe community on Stack Overflow
|
|
169
|
+
Join the TestCafe community on Stack Overflow. Ask and answer questions [using the TestCafe tag](https://stackoverflow.com/questions/tagged/testcafe).
|
|
175
170
|
|
|
176
171
|
## Issue Tracker
|
|
177
172
|
|
|
178
|
-
Use our GitHub issues page to [report bugs](https://github.com/DevExpress/testcafe/issues/new?template=bug-report.md) and [suggest
|
|
173
|
+
Use our GitHub issues page to [report bugs](https://github.com/DevExpress/testcafe/issues/new?template=bug-report.md) and [suggest enhancements](https://github.com/DevExpress/testcafe/issues/new?template=feature_request.md).
|
|
179
174
|
|
|
180
175
|
## Stay in Touch
|
|
181
176
|
|
|
182
|
-
Follow us on [Twitter](https://twitter.com/DXTestCafe). We post TestCafe news and updates
|
|
177
|
+
Follow us on [Twitter](https://twitter.com/DXTestCafe). We post TestCafe news and updates.
|
|
183
178
|
|
|
184
179
|
## Contributing
|
|
185
180
|
|
|
@@ -187,14 +182,13 @@ Read our [Contributing Guide](https://github.com/DevExpress/testcafe/blob/master
|
|
|
187
182
|
|
|
188
183
|
To create your own plugin for TestCafe, you can use these plugin generators:
|
|
189
184
|
|
|
190
|
-
* [Build a browser provider](https://testcafe.io/documentation/402812/guides/extend-testcafe/browser-provider-plugin)
|
|
191
|
-
to set up tests on your on-premises server farm, to use a cloud testing platform, or to start your local browsers in a special way. Use this [Yeoman generator](https://www.npmjs.com/package/generator-testcafe-browser-provider) to write only a few lines of code.
|
|
185
|
+
* [Build a browser provider](https://testcafe.io/documentation/402812/guides/extend-testcafe/browser-provider-plugin) to set up tests on your on-premises server farm, to use a cloud testing platform, or to start your local browsers in a special way. Use this [Yeoman generator](https://www.npmjs.com/package/generator-testcafe-browser-provider) to write only a few lines of code.
|
|
192
186
|
* To [build a custom reporter](https://testcafe.io/documentation/402810/guides/extend-testcafe/reporter-plugin)
|
|
193
187
|
with your formatting and style, check out this [generator](https://www.npmjs.com/package/generator-testcafe-reporter).
|
|
194
188
|
|
|
195
189
|
If you want your plugin to be listed below, [send us a note in a Github issue](https://github.com/DevExpress/testcafe/issues/new).
|
|
196
190
|
|
|
197
|
-
|
|
191
|
+
Thanks to all of our contributors – We appreciate your commitment to the TestCafe community.
|
|
198
192
|
|
|
199
193
|
[<img alt="aha-oretama" src="https://avatars.githubusercontent.com/u/7259161?v=4&s=117" width="117">](https://github.com/aha-oretama) |[<img alt="ai" src="https://avatars.githubusercontent.com/u/19343?v=4&s=117" width="117">](https://github.com/ai) |[<img alt="aleks-pro" src="https://avatars.githubusercontent.com/u/14822473?v=4&s=117" width="117">](https://github.com/aleks-pro) |[<img alt="Aleksey28" src="https://avatars.githubusercontent.com/u/32869530?v=4&s=117" width="117">](https://github.com/Aleksey28) |[<img alt="AlexanderMoiseev" src="https://avatars.githubusercontent.com/u/1498953?v=4&s=117" width="117">](https://github.com/AlexanderMoiseev) |[<img alt="AlexanderMoskovkin" src="https://avatars.githubusercontent.com/u/12047804?v=4&s=117" width="117">](https://github.com/AlexanderMoskovkin) |
|
|
200
194
|
:---: |:---: |:---: |:---: |:---: |:---: |
|
|
@@ -6,22 +6,16 @@ const path = require('path');
|
|
|
6
6
|
const url = require('url');
|
|
7
7
|
const v8FlagsFilter = require('@devexpress/bin-v8-flags-filter');
|
|
8
8
|
|
|
9
|
-
const
|
|
10
|
-
const EXPERIMENTAL_ESM_OPTION = '--experimental-esm';
|
|
9
|
+
const ESM_OPTION = '--esm';
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
require('../lib/cli');
|
|
11
|
+
const forcedArgs = [];
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (process.argv.slice(2).includes(EXPERIMENTAL_ESM_OPTION)) {
|
|
19
|
-
forcedArgs.push('--no-warnings');
|
|
20
|
-
forcedArgs.push(`--experimental-loader=${url.pathToFileURL(path.join(__dirname, '../lib/compiler/esm-loader.js')).href}`);
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
v8FlagsFilter(path.join(__dirname, '../lib/cli'), {
|
|
24
|
-
useShutdownMessage: true,
|
|
25
|
-
forcedArgs,
|
|
26
|
-
});
|
|
13
|
+
if (process.argv.slice(2).includes(ESM_OPTION)) {
|
|
14
|
+
forcedArgs.push('--no-warnings');
|
|
15
|
+
forcedArgs.push(`--experimental-loader=${url.pathToFileURL(path.join(__dirname, '../lib/compiler/esm-loader.js')).href}`);
|
|
27
16
|
}
|
|
17
|
+
|
|
18
|
+
v8FlagsFilter(path.join(__dirname, '../lib/cli'), {
|
|
19
|
+
useShutdownMessage: true,
|
|
20
|
+
forcedArgs,
|
|
21
|
+
});
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const test_file_temp_variable_name_1 = __importDefault(require("../../compiler/test-file/test-file-temp-variable-name"));
|
|
7
3
|
const lazyRequire = require('import-lazy')(require);
|
|
8
4
|
const ClientFunctionBuilder = lazyRequire('../../client-functions/client-function-builder');
|
|
9
5
|
const SelectorBuilder = lazyRequire('../../client-functions/selectors/selector-builder');
|
|
@@ -11,7 +7,6 @@ const role = lazyRequire('../../role');
|
|
|
11
7
|
const createRequestLogger = lazyRequire('../request-hooks/request-logger');
|
|
12
8
|
const createRequestMock = lazyRequire('../request-hooks/request-mock/create-request-mock');
|
|
13
9
|
const userVariables = lazyRequire('../user-variables');
|
|
14
|
-
const addExportAPI = lazyRequire('../../compiler/test-file/add-export-api');
|
|
15
10
|
// NOTE: We can't use lazy require for RequestHook, because it will break base class detection for inherited classes
|
|
16
11
|
let RequestHook = null;
|
|
17
12
|
// NOTE: We can't use lazy require for testControllerProxy, because it will break test controller detection
|
|
@@ -56,11 +51,6 @@ const exportableLib = {
|
|
|
56
51
|
return userVariables.value;
|
|
57
52
|
},
|
|
58
53
|
};
|
|
59
|
-
if (global[test_file_temp_variable_name_1.default]) {
|
|
60
|
-
const { testFile, baseUrl } = global[test_file_temp_variable_name_1.default];
|
|
61
|
-
addExportAPI(testFile, exportableLib, { isCompilerServiceMode: true, baseUrl });
|
|
62
|
-
delete global[test_file_temp_variable_name_1.default];
|
|
63
|
-
}
|
|
64
54
|
exports.default = exportableLib;
|
|
65
55
|
module.exports = exports.default;
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL2V4cG9ydGFibGUtbGliL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTSxXQUFXLEdBQWEsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlELE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7QUFDNUYsTUFBTSxlQUFlLEdBQVMsV0FBVyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7QUFDL0YsTUFBTSxJQUFJLEdBQW9CLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN4RCxNQUFNLG1CQUFtQixHQUFLLFdBQVcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQzdFLE1BQU0saUJBQWlCLEdBQU8sV0FBVyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7QUFDL0YsTUFBTSxhQUFhLEdBQVcsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFL0Qsb0hBQW9IO0FBQ3BILElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztBQUV2QiwyR0FBMkc7QUFDM0csSUFBSSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFFL0IsU0FBUyxJQUFJLENBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPO0lBQ3BDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxTQUFTLFdBQVc7SUFDaEIsT0FBTyxpQkFBaUIsRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBRSxxQkFBcUIsRUFBRSxVQUFVO0lBQ3JELE9BQU8sbUJBQW1CLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbEUsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFFLEVBQUUsRUFBRSxPQUFPO0lBQ2hDLE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQXFCLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFFNUYsT0FBTyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFFLEVBQUUsRUFBRSxPQUFPO0lBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUVoRixPQUFPLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqQyxDQUFDO0FBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0lBQ3JDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CO0NBQ3RDLENBQUMsQ0FBQztBQUVILE1BQU0sYUFBYSxHQUFHO0lBQ2xCLElBQUk7SUFFSixjQUFjO0lBRWQsUUFBUTtJQUVSLGFBQWE7SUFFYixXQUFXO0lBRVgsSUFBSSxXQUFXO1FBQ1gsSUFBSSxDQUFDLFdBQVc7WUFDWixXQUFXLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFbkQsT0FBTyxXQUFXLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUI7WUFDcEIsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFOUQsT0FBTyxtQkFBbUIsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7Q0FDSixDQUFDO0FBRUYsa0JBQWUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgbGF6eVJlcXVpcmUgICAgICAgICAgID0gcmVxdWlyZSgnaW1wb3J0LWxhenknKShyZXF1aXJlKTtcbmNvbnN0IENsaWVudEZ1bmN0aW9uQnVpbGRlciA9IGxhenlSZXF1aXJlKCcuLi8uLi9jbGllbnQtZnVuY3Rpb25zL2NsaWVudC1mdW5jdGlvbi1idWlsZGVyJyk7XG5jb25zdCBTZWxlY3RvckJ1aWxkZXIgICAgICAgPSBsYXp5UmVxdWlyZSgnLi4vLi4vY2xpZW50LWZ1bmN0aW9ucy9zZWxlY3RvcnMvc2VsZWN0b3ItYnVpbGRlcicpO1xuY29uc3Qgcm9sZSAgICAgICAgICAgICAgICAgID0gbGF6eVJlcXVpcmUoJy4uLy4uL3JvbGUnKTtcbmNvbnN0IGNyZWF0ZVJlcXVlc3RMb2dnZXIgICA9IGxhenlSZXF1aXJlKCcuLi9yZXF1ZXN0LWhvb2tzL3JlcXVlc3QtbG9nZ2VyJyk7XG5jb25zdCBjcmVhdGVSZXF1ZXN0TW9jayAgICAgPSBsYXp5UmVxdWlyZSgnLi4vcmVxdWVzdC1ob29rcy9yZXF1ZXN0LW1vY2svY3JlYXRlLXJlcXVlc3QtbW9jaycpO1xuY29uc3QgdXNlclZhcmlhYmxlcyAgICAgICAgID0gbGF6eVJlcXVpcmUoJy4uL3VzZXItdmFyaWFibGVzJyk7XG5cbi8vIE5PVEU6IFdlIGNhbid0IHVzZSBsYXp5IHJlcXVpcmUgZm9yIFJlcXVlc3RIb29rLCBiZWNhdXNlIGl0IHdpbGwgYnJlYWsgYmFzZSBjbGFzcyBkZXRlY3Rpb24gZm9yIGluaGVyaXRlZCBjbGFzc2VzXG5sZXQgUmVxdWVzdEhvb2sgPSBudWxsO1xuXG4vLyBOT1RFOiBXZSBjYW4ndCB1c2UgbGF6eSByZXF1aXJlIGZvciB0ZXN0Q29udHJvbGxlclByb3h5LCBiZWNhdXNlIGl0IHdpbGwgYnJlYWsgdGVzdCBjb250cm9sbGVyIGRldGVjdGlvblxubGV0IHRlc3RDb250cm9sbGVyUHJveHkgPSBudWxsO1xuXG5mdW5jdGlvbiBSb2xlIChsb2dpblVybCwgaW5pdEZuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHJvbGUuY3JlYXRlUm9sZShsb2dpblVybCwgaW5pdEZuLCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gUmVxdWVzdE1vY2sgKCkge1xuICAgIHJldHVybiBjcmVhdGVSZXF1ZXN0TW9jaygpO1xufVxuXG5mdW5jdGlvbiBSZXF1ZXN0TG9nZ2VyIChyZXF1ZXN0RmlsdGVyUnVsZUluaXQsIGxvZ09wdGlvbnMpIHtcbiAgICByZXR1cm4gY3JlYXRlUmVxdWVzdExvZ2dlcihyZXF1ZXN0RmlsdGVyUnVsZUluaXQsIGxvZ09wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBDbGllbnRGdW5jdGlvbiAoZm4sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IENsaWVudEZ1bmN0aW9uQnVpbGRlcihmbiwgb3B0aW9ucywgeyBpbnN0YW50aWF0aW9uOiAnQ2xpZW50RnVuY3Rpb24nIH0pO1xuXG4gICAgcmV0dXJuIGJ1aWxkZXIuZ2V0RnVuY3Rpb24oKTtcbn1cblxuZnVuY3Rpb24gU2VsZWN0b3IgKGZuLCBvcHRpb25zKSB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBTZWxlY3RvckJ1aWxkZXIoZm4sIG9wdGlvbnMsIHsgaW5zdGFudGlhdGlvbjogJ1NlbGVjdG9yJyB9KTtcblxuICAgIHJldHVybiBidWlsZGVyLmdldEZ1bmN0aW9uKCk7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSb2xlLCAnYW5vbnltb3VzJywge1xuICAgIGdldDogKCkgPT4gcm9sZS5jcmVhdGVBbm9ueW1vdXNSb2xlLFxufSk7XG5cbmNvbnN0IGV4cG9ydGFibGVMaWIgPSB7XG4gICAgUm9sZSxcblxuICAgIENsaWVudEZ1bmN0aW9uLFxuXG4gICAgU2VsZWN0b3IsXG5cbiAgICBSZXF1ZXN0TG9nZ2VyLFxuXG4gICAgUmVxdWVzdE1vY2ssXG5cbiAgICBnZXQgUmVxdWVzdEhvb2sgKCkge1xuICAgICAgICBpZiAoIVJlcXVlc3RIb29rKVxuICAgICAgICAgICAgUmVxdWVzdEhvb2sgPSByZXF1aXJlKCcuLi9yZXF1ZXN0LWhvb2tzL2hvb2snKTtcblxuICAgICAgICByZXR1cm4gUmVxdWVzdEhvb2s7XG4gICAgfSxcblxuICAgIGdldCB0ICgpIHtcbiAgICAgICAgaWYgKCF0ZXN0Q29udHJvbGxlclByb3h5KVxuICAgICAgICAgICAgdGVzdENvbnRyb2xsZXJQcm94eSA9IHJlcXVpcmUoJy4uL3Rlc3QtY29udHJvbGxlci9wcm94eScpO1xuXG4gICAgICAgIHJldHVybiB0ZXN0Q29udHJvbGxlclByb3h5O1xuICAgIH0sXG5cbiAgICBnZXQgdXNlclZhcmlhYmxlcyAoKSB7XG4gICAgICAgIHJldHVybiB1c2VyVmFyaWFibGVzLnZhbHVlO1xuICAgIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBleHBvcnRhYmxlTGliO1xuXG4iXX0=
|
|
@@ -15,9 +15,8 @@ const runtime_1 = require("../../errors/runtime");
|
|
|
15
15
|
const option_names_1 = __importDefault(require("../../configuration/option-names"));
|
|
16
16
|
const testcafe_hammerhead_1 = require("testcafe-hammerhead");
|
|
17
17
|
const test_timeout_1 = __importDefault(require("./test-timeout"));
|
|
18
|
-
const esm_runtime_holder_name_1 = __importDefault(require("../../services/compiler/esm-runtime-holder-name"));
|
|
19
18
|
class Test extends testing_unit_1.default {
|
|
20
|
-
constructor(testFile,
|
|
19
|
+
constructor(testFile, baseUrl, returnApiOrigin = true) {
|
|
21
20
|
// NOTE: 'fixture' directive can be missing
|
|
22
21
|
const fixture = testFile.currentFixture;
|
|
23
22
|
const pageUrl = (fixture === null || fixture === void 0 ? void 0 : fixture.pageUrl) || testcafe_hammerhead_1.SPECIAL_BLANK_PAGE;
|
|
@@ -29,16 +28,12 @@ class Test extends testing_unit_1.default {
|
|
|
29
28
|
this.globalBeforeFn = null;
|
|
30
29
|
this.globalAfterFn = null;
|
|
31
30
|
this.timeouts = null;
|
|
32
|
-
this._isCompilerService = isCompilerServiceMode;
|
|
33
31
|
this._initFixture(testFile);
|
|
34
|
-
// NOTE: This is internal data of 'esm' module
|
|
35
|
-
// @ts-ignore
|
|
36
|
-
this.esmRuntime = global[esm_runtime_holder_name_1.default] || null;
|
|
37
32
|
if (returnApiOrigin)
|
|
38
33
|
return this.apiOrigin;
|
|
39
34
|
}
|
|
40
|
-
static init({ testFile, baseUrl
|
|
41
|
-
return testing_unit_1.default.init(Test, testFile,
|
|
35
|
+
static init({ testFile, baseUrl }) {
|
|
36
|
+
return testing_unit_1.default.init(Test, testFile, baseUrl);
|
|
42
37
|
}
|
|
43
38
|
_initFixture(testFile) {
|
|
44
39
|
this.fixture = testFile.currentFixture;
|
|
@@ -50,8 +45,6 @@ class Test extends testing_unit_1.default {
|
|
|
50
45
|
this.skipJsErrorsOptions = this.fixture.skipJsErrorsOptions;
|
|
51
46
|
}
|
|
52
47
|
_add(name, fn) {
|
|
53
|
-
if (this._isCompilerService && !this.fixture)
|
|
54
|
-
this._initFixture(this.testFile);
|
|
55
48
|
(0, type_assertions_1.assertType)(type_assertions_1.is.string, 'apiOrigin', 'The test name', name);
|
|
56
49
|
(0, type_assertions_1.assertType)(type_assertions_1.is.function, 'apiOrigin', 'The test body', fn);
|
|
57
50
|
(0, type_assertions_1.assertType)(type_assertions_1.is.nonNullObject, 'apiOrigin', `The fixture of '${name}' test`, this.fixture);
|
|
@@ -103,4 +96,4 @@ class Test extends testing_unit_1.default {
|
|
|
103
96
|
exports.default = Test;
|
|
104
97
|
testing_unit_1.default.makeAPIListForChildClass(Test);
|
|
105
98
|
module.exports = exports.default;
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvc3RydWN0dXJlL3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBdUQ7QUFDdkQsa0VBQXlDO0FBQ3pDLDREQUFtQztBQUNuQywwRUFBc0U7QUFDdEUsK0VBQXFEO0FBQ3JELCtFQUFpRTtBQUNqRSwwRkFBNkU7QUFDN0UsOENBQW9EO0FBQ3BELGtEQUFnRDtBQUNoRCxvRkFBNEQ7QUFLNUQsNkRBQXlEO0FBRXpELGtFQUF5QztBQUN6Qyw4R0FBc0Y7QUFRdEYsTUFBcUIsSUFBSyxTQUFRLHNCQUFXO0lBV3pDLFlBQW9CLFFBQWtCLEVBQUUscUJBQXFCLEdBQUcsS0FBSyxFQUFFLE9BQWdCLEVBQUUsZUFBZSxHQUFHLElBQUk7UUFDM0csMkNBQTJDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxjQUF5QixDQUFDO1FBQ25ELE1BQU0sT0FBTyxHQUFHLENBQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE9BQU8sS0FBSSx3Q0FBa0IsQ0FBQztRQUV2RCxLQUFLLENBQUMsUUFBUSxFQUFFLG1CQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUVqRCxJQUFJLENBQUMsT0FBTyxHQUFVLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsRUFBRSxHQUFlLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFTLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFVLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFJLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFTLElBQUksQ0FBQztRQUUzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcscUJBQXFCLENBQUM7UUFFaEQsSUFBSSxD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QUFNLENBQUMsSUFBSSxDQUFDLHNCQUFXLENBQUM7YUFDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQzthQUN0QyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDZixJQUFBLDRCQUFVLEVBQUMsb0JBQUUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsaUJBQWlCLE9BQU8sRUFBRSxFQUFFLFFBQVEsQ0FBQyxPQUE2QixDQUFDLENBQUMsQ0FBQztRQUN0SCxDQUFDLENBQUMsQ0FBQztRQUVQLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0NBQ0o7QUFoSUQsdUJBZ0lDO0FBRUQsc0JBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZsYXR0ZW5EZWVwIGFzIGZsYXR0ZW4sIHVuaW9uIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBUZXN0aW5nVW5pdCBmcm9tICcuL3Rlc3RpbmctdW5pdCc7XG5pbXBvcnQgVW5pdFR5cGUgZnJvbSAnLi91bml0LXR5cGUnO1xuaW1wb3J0IHsgYXNzZXJ0VHlwZSwgaXMgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZS90eXBlLWFzc2VydGlvbnMnO1xuaW1wb3J0IHdyYXBUZXN0RnVuY3Rpb24gZnJvbSAnLi4vd3JhcC10ZXN0LWZ1bmN0aW9uJztcbmltcG9ydCBhc3NlcnRSZXF1ZXN0SG9va1R5cGUgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9hc3NlcnQtdHlwZSc7XG5pbXBvcnQgYXNzZXJ0Q2xpZW50U2NyaXB0VHlwZSBmcm9tICcuLi8uLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvYXNzZXJ0LXR5cGUnO1xuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi8uLi9lcnJvcnMvdHlwZXMnO1xuaW1wb3J0IHsgQVBJRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMvcnVudGltZSc7XG5pbXBvcnQgT1BUSU9OX05BTUVTIGZyb20gJy4uLy4uL2NvbmZpZ3VyYXRpb24vb3B0aW9uLW5hbWVzJztcbmltcG9ydCBUZXN0RmlsZSBmcm9tICcuL3Rlc3QtZmlsZSc7XG5pbXBvcnQgRml4dHVyZSBmcm9tICcuL2ZpeHR1cmUnO1xuaW1wb3J0IFJlcXVlc3RIb29rIGZyb20gJy4uL3JlcXVlc3QtaG9va3MvaG9vayc7XG5pbXBvcnQgQ2xpZW50U2NyaXB0SW5pdCBmcm9tICcuLi8uLi9jdXN0b20tY2xpZW50LXNjcmlwdHMvY2xpZW50LXNjcmlwdC1pbml0JztcbmltcG9ydCB7IFNQRUNJQUxfQkxBTktfUEFHRSB9IGZyb20gJ3Rlc3RjYWZlLWhhbW1lcmhlYWQnO1xuaW1wb3J0IHsgVGVzdFRpbWVvdXRzIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCBUZXN0VGltZW91dCBmcm9tICcuL3Rlc3QtdGltZW91dCc7XG5pbXBvcnQgRVNNX1JVTlRJTUVfSE9MREVSX05BTUUgZnJvbSAnLi4vLi4vc2VydmljZXMvY29tcGlsZXIvZXNtLXJ1bnRpbWUtaG9sZGVyLW5hbWUnO1xuXG5pbnRlcmZhY2UgVGVzdEluaXRPcHRpb25zIHtcbiAgICB0ZXN0RmlsZTogVGVzdEZpbGU7XG4gICAgYmFzZVVybD86IHN0cmluZztcbiAgICBpc0NvbXBpbGVyU2VydmljZU1vZGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXN0IGV4dGVuZHMgVGVzdGluZ1VuaXQge1xuICAgIHB1YmxpYyBmaXh0dXJlOiBGaXh0dXJlIHwgbnVsbDtcbiAgICBwdWJsaWMgZm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgYmVmb3JlRm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgYWZ0ZXJGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBnbG9iYWxCZWZvcmVGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBnbG9iYWxBZnRlckZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIHRpbWVvdXRzOiBUZXN0VGltZW91dHMgfCBudWxsO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzQ29tcGlsZXJTZXJ2aWNlOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWFkb25seSBlc21SdW50aW1lOiBzdHJpbmc7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHRlc3RGaWxlOiBUZXN0RmlsZSwgaXNDb21waWxlclNlcnZpY2VNb2RlID0gZmFsc2UsIGJhc2VVcmw/OiBzdHJpbmcsIHJldHVybkFwaU9yaWdpbiA9IHRydWUpIHtcbiAgICAgICAgLy8gTk9URTogJ2ZpeHR1cmUnIGRpcmVjdGl2ZSBjYW4gYmUgbWlzc2luZ1xuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGVzdEZpbGUuY3VycmVudEZpeHR1cmUgYXMgRml4dHVyZTtcbiAgICAgICAgY29uc3QgcGFnZVVybCA9IGZpeHR1cmU/LnBhZ2VVcmwgfHwgU1BFQ0lBTF9CTEFOS19QQUdFO1xuXG4gICAgICAgIHN1cGVyKHRlc3RGaWxlLCBVbml0VHlwZS50ZXN0LCBwYWdlVXJsLCBiYXNlVXJsKTtcblxuICAgICAgICB0aGlzLmZpeHR1cmUgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5mbiAgICAgICAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuYmVmb3JlRm4gICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmFmdGVyRm4gICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5nbG9iYWxCZWZvcmVGbiA9IG51bGw7XG4gICAgICAgIHRoaXMuZ2xvYmFsQWZ0ZXJGbiAgPSBudWxsO1xuICAgICAgICB0aGlzLnRpbWVvdXRzICAgICAgID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9pc0NvbXBpbGVyU2VydmljZSA9IGlzQ29tcGlsZXJTZXJ2aWNlTW9kZTtcblxuICAgICAgICB0aGlzLl9pbml0Rml4dHVyZSh0ZXN0RmlsZSk7XG5cbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBpbnRlcm5hbCBkYXRhIG9mICdlc20nIG1vZHVsZVxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHRoaXMuZXNtUnVudGltZSA9IGdsb2JhbFtFU01fUlVOVElNRV9IT0xERVJfTkFNRV0gfHwgbnVsbDtcblxuICAgICAgICBpZiAocmV0dXJuQXBpT3JpZ2luKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luIGFzIHVua25vd24gYXMgVGVzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGluaXQgKHsgdGVzdEZpbGUsIGJhc2VVcmwsIGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSB9OiBUZXN0SW5pdE9wdGlvbnMpOiBUZXN0IHtcbiAgICAgICAgcmV0dXJuIFRlc3RpbmdVbml0LmluaXQoVGVzdCwgdGVzdEZpbGUsIGlzQ29tcGlsZXJTZXJ2aWNlTW9kZSwgYmFzZVVybCkgYXMgdW5rbm93biBhcyBUZXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luaXRGaXh0dXJlICh0ZXN0RmlsZTogVGVzdEZpbGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maXh0dXJlID0gdGVzdEZpbGUuY3VycmVudEZpeHR1cmU7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZpeHR1cmUpXG4gICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgdGhpcy5wYWdlVXJsICAgICAgICAgICAgID0gdGhpcy5maXh0dXJlLnBhZ2VVcmwgfHwgU1BFQ0lBTF9CTEFOS19QQUdFO1xuICAgICAgICB0aGlzLnJlcXVlc3RIb29rcyAgICAgICAgPSB0aGlzLmZpeHR1cmUucmVxdWVzdEhvb2tzLnNsaWNlKCk7XG4gICAgICAgIHRoaXMuY2xpZW50U2NyaXB0cyAgICAgICA9IHRoaXMuZml4dHVyZS5jbGllbnRTY3JpcHRzLnNsaWNlKCk7XG4gICAgICAgIHRoaXMuc2tpcEpzRXJyb3JzT3B0aW9ucyA9IHRoaXMuZml4dHVyZS5za2lwSnNFcnJvcnNPcHRpb25zO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBfYWRkIChuYW1lOiBzdHJpbmcsIGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29tcGlsZXJTZXJ2aWNlICYmICF0aGlzLmZpeHR1cmUpXG4gICAgICAgICAgICB0aGlzLl9pbml0Rml4dHVyZSh0aGlzLnRlc3RGaWxlKTtcblxuICAgICAgICBhc3NlcnRUeXBlKGlzLnN0cmluZywgJ2FwaU9yaWdpbicsICdUaGUgdGVzdCBuYW1lJywgbmFtZSk7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdhcGlPcmlnaW4nLCAnVGhlIHRlc3QgYm9keScsIGZuKTtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5ub25OdWxsT2JqZWN0LCAnYXBpT3JpZ2luJywgYFRoZSBmaXh0dXJlIG9mICcke25hbWV9JyB0ZXN0YCwgdGhpcy5maXh0dXJlKTtcblxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmZuICAgPSB3cmFwVGVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICBpZiAoIXRoaXMudGVzdEZpbGUuY29sbGVjdGVkVGVzdHMuaW5jbHVkZXModGhpcykpXG4gICAgICAgICAgICB0aGlzLnRlc3RGaWxlLmNvbGxlY3RlZFRlc3RzLnB1c2godGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2JlZm9yZSQgKGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2JlZm9yZScsICdUaGUgdGVzdC5iZWZvcmUgaG9vaycsIGZuKTtcblxuICAgICAgICB0aGlzLmJlZm9yZUZuID0gd3JhcFRlc3RGdW5jdGlvbihmbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FmdGVyJCAoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYWZ0ZXInLCAnVGhlIHRlc3QuYWZ0ZXIgaG9vaycsIGZuKTtcblxuICAgICAgICB0aGlzLmFmdGVyRm4gPSB3cmFwVGVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVxdWVzdEhvb2tzJCAoLi4uaG9va3M6IFJlcXVlc3RIb29rW10pOiBGdW5jdGlvbiB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5yZXF1ZXN0SG9va3MpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoT1BUSU9OX05BTUVTLnJlcXVlc3RIb29rcywgUlVOVElNRV9FUlJPUlMubXVsdGlwbGVBUElNZXRob2RDYWxsRm9yYmlkZGVuLCBPUFRJT05fTkFNRVMucmVxdWVzdEhvb2tzKTtcblxuICAgICAgICBob29rcyA9IGZsYXR0ZW4oaG9va3MpO1xuXG4gICAgICAgIGFzc2VydFJlcXVlc3RIb29rVHlwZShob29rcyk7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0SG9va3MgICAgICAgICAgICAgICAgICAgID0gdW5pb24odGhpcy5yZXF1ZXN0SG9va3MsIGhvb2tzKTtcbiAgICAgICAgdGhpcy5hcGlNZXRob2RXYXNDYWxsZWQucmVxdWVzdEhvb2tzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xpZW50U2NyaXB0cyQgKC4uLnNjcmlwdHM6IENsaWVudFNjcmlwdEluaXRbXSk6IEZ1bmN0aW9uIHtcbiAgICAgICAgaWYgKHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLmNsaWVudFNjcmlwdHMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoT1BUSU9OX05BTUVTLmNsaWVudFNjcmlwdHMsIFJVTlRJTUVfRVJST1JTLm11bHRpcGxlQVBJTWV0aG9kQ2FsbEZvcmJpZGRlbiwgT1BUSU9OX05BTUVTLmNsaWVudFNjcmlwdHMpO1xuXG4gICAgICAgIHNjcmlwdHMgPSBmbGF0dGVuKHNjcmlwdHMpO1xuXG4gICAgICAgIGFzc2VydENsaWVudFNjcmlwdFR5cGUoc2NyaXB0cyk7XG5cbiAgICAgICAgdGhpcy5jbGllbnRTY3JpcHRzICAgICAgICAgICAgICAgICAgICA9IHVuaW9uKHRoaXMuY2xpZW50U2NyaXB0cywgc2NyaXB0cyk7XG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLmNsaWVudFNjcmlwdHMgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90aW1lb3V0cyQgKHRpbWVvdXRzOiBUZXN0VGltZW91dHMpOiBGdW5jdGlvbiB7XG4gICAgICAgIGFzc2VydFR5cGUoaXMudGVzdFRpbWVvdXRzLCAndGltZW91dHMnLCAndGVzdC50aW1lb3V0cycsIHRpbWVvdXRzKTtcblxuICAgICAgICBPYmplY3Qua2V5cyhUZXN0VGltZW91dClcbiAgICAgICAgICAgIC5maWx0ZXIodGltZW91dCA9PiB0aW1lb3V0IGluIHRpbWVvdXRzKVxuICAgICAgICAgICAgLmZvckVhY2godGltZW91dCA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5ub25OZWdhdGl2ZU51bWJlciwgJ3RpbWVvdXRzJywgYHRlc3QudGltZW91dHMuJHt0aW1lb3V0fWAsIHRpbWVvdXRzW3RpbWVvdXQgYXMga2V5b2YgVGVzdFRpbWVvdXRzXSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRpbWVvdXRzID0gdGltZW91dHM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cbn1cblxuVGVzdGluZ1VuaXQubWFrZUFQSUxpc3RGb3JDaGlsZENsYXNzKFRlc3QpO1xuIl19
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvc3RydWN0dXJlL3Rlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBdUQ7QUFDdkQsa0VBQXlDO0FBQ3pDLDREQUFtQztBQUNuQywwRUFBc0U7QUFDdEUsK0VBQXFEO0FBQ3JELCtFQUFpRTtBQUNqRSwwRkFBNkU7QUFDN0UsOENBQW9EO0FBQ3BELGtEQUFnRDtBQUNoRCxvRkFBNEQ7QUFLNUQsNkRBQXlEO0FBRXpELGtFQUF5QztBQU96QyxNQUFxQixJQUFLLFNBQVEsc0JBQVc7SUFTekMsWUFBb0IsUUFBa0IsRUFBRSxPQUFnQixFQUFFLGVBQWUsR0FBRyxJQUFJO1FBQzVFLDJDQUEyQztRQUMzQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsY0FBeUIsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxDQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxPQUFPLEtBQUksd0NBQWtCLENBQUM7UUFFdkQsS0FBSyxDQUFDLFFBQVEsRUFBRSxtQkFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLE9BQU8sR0FBVSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLEVBQUUsR0FBZSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBUyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBVSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBSSxJQUFJLENBQUM7UUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBUyxJQUFJLENBQUM7UUFFM0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QixJQUFJLGVBQWU7WUFDZixPQUFPLElBQUksQ0FBQyxTQUE0QixDQUFD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TyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7Q0FDSjtBQXJIRCx1QkFxSEM7QUFFRCxzQkFBVyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxhdHRlbkRlZXAgYXMgZmxhdHRlbiwgdW5pb24gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFRlc3RpbmdVbml0IGZyb20gJy4vdGVzdGluZy11bml0JztcbmltcG9ydCBVbml0VHlwZSBmcm9tICcuL3VuaXQtdHlwZSc7XG5pbXBvcnQgeyBhc3NlcnRUeXBlLCBpcyB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lL3R5cGUtYXNzZXJ0aW9ucyc7XG5pbXBvcnQgd3JhcFRlc3RGdW5jdGlvbiBmcm9tICcuLi93cmFwLXRlc3QtZnVuY3Rpb24nO1xuaW1wb3J0IGFzc2VydFJlcXVlc3RIb29rVHlwZSBmcm9tICcuLi9yZXF1ZXN0LWhvb2tzL2Fzc2VydC10eXBlJztcbmltcG9ydCBhc3NlcnRDbGllbnRTY3JpcHRUeXBlIGZyb20gJy4uLy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9hc3NlcnQtdHlwZSc7XG5pbXBvcnQgeyBSVU5USU1FX0VSUk9SUyB9IGZyb20gJy4uLy4uL2Vycm9ycy90eXBlcyc7XG5pbXBvcnQgeyBBUElFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycy9ydW50aW1lJztcbmltcG9ydCBPUFRJT05fTkFNRVMgZnJvbSAnLi4vLi4vY29uZmlndXJhdGlvbi9vcHRpb24tbmFtZXMnO1xuaW1wb3J0IFRlc3RGaWxlIGZyb20gJy4vdGVzdC1maWxlJztcbmltcG9ydCBGaXh0dXJlIGZyb20gJy4vZml4dHVyZSc7XG5pbXBvcnQgUmVxdWVzdEhvb2sgZnJvbSAnLi4vcmVxdWVzdC1ob29rcy9ob29rJztcbmltcG9ydCBDbGllbnRTY3JpcHRJbml0IGZyb20gJy4uLy4uL2N1c3RvbS1jbGllbnQtc2NyaXB0cy9jbGllbnQtc2NyaXB0LWluaXQnO1xuaW1wb3J0IHsgU1BFQ0lBTF9CTEFOS19QQUdFIH0gZnJvbSAndGVzdGNhZmUtaGFtbWVyaGVhZCc7XG5pbXBvcnQgeyBUZXN0VGltZW91dHMgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IFRlc3RUaW1lb3V0IGZyb20gJy4vdGVzdC10aW1lb3V0JztcblxuaW50ZXJmYWNlIFRlc3RJbml0T3B0aW9ucyB7XG4gICAgdGVzdEZpbGU6IFRlc3RGaWxlO1xuICAgIGJhc2VVcmw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlc3QgZXh0ZW5kcyBUZXN0aW5nVW5pdCB7XG4gICAgcHVibGljIGZpeHR1cmU6IEZpeHR1cmUgfCBudWxsO1xuICAgIHB1YmxpYyBmbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBiZWZvcmVGbjogRnVuY3Rpb24gfCBudWxsO1xuICAgIHB1YmxpYyBhZnRlckZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIGdsb2JhbEJlZm9yZUZuOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgcHVibGljIGdsb2JhbEFmdGVyRm46IEZ1bmN0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgdGltZW91dHM6IFRlc3RUaW1lb3V0cyB8IG51bGw7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IgKHRlc3RGaWxlOiBUZXN0RmlsZSwgYmFzZVVybD86IHN0cmluZywgcmV0dXJuQXBpT3JpZ2luID0gdHJ1ZSkge1xuICAgICAgICAvLyBOT1RFOiAnZml4dHVyZScgZGlyZWN0aXZlIGNhbiBiZSBtaXNzaW5nXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0ZXN0RmlsZS5jdXJyZW50Rml4dHVyZSBhcyBGaXh0dXJlO1xuICAgICAgICBjb25zdCBwYWdlVXJsID0gZml4dHVyZT8ucGFnZVVybCB8fCBTUEVDSUFMX0JMQU5LX1BBR0U7XG5cbiAgICAgICAgc3VwZXIodGVzdEZpbGUsIFVuaXRUeXBlLnRlc3QsIHBhZ2VVcmwsIGJhc2VVcmwpO1xuXG4gICAgICAgIHRoaXMuZml4dHVyZSAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmZuICAgICAgICAgICAgID0gbnVsbDtcbiAgICAgICAgdGhpcy5iZWZvcmVGbiAgICAgICA9IG51bGw7XG4gICAgICAgIHRoaXMuYWZ0ZXJGbiAgICAgICAgPSBudWxsO1xuICAgICAgICB0aGlzLmdsb2JhbEJlZm9yZUZuID0gbnVsbDtcbiAgICAgICAgdGhpcy5nbG9iYWxBZnRlckZuICA9IG51bGw7XG4gICAgICAgIHRoaXMudGltZW91dHMgICAgICAgPSBudWxsO1xuXG4gICAgICAgIHRoaXMuX2luaXRGaXh0dXJlKHRlc3RGaWxlKTtcblxuICAgICAgICBpZiAocmV0dXJuQXBpT3JpZ2luKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luIGFzIHVua25vd24gYXMgVGVzdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGluaXQgKHsgdGVzdEZpbGUsIGJhc2VVcmwgfTogVGVzdEluaXRPcHRpb25zKTogVGVzdCB7XG4gICAgICAgIHJldHVybiBUZXN0aW5nVW5pdC5pbml0KFRlc3QsIHRlc3RGaWxlLCBiYXNlVXJsKSBhcyB1bmtub3duIGFzIFRlc3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5pdEZpeHR1cmUgKHRlc3RGaWxlOiBUZXN0RmlsZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpeHR1cmUgPSB0ZXN0RmlsZS5jdXJyZW50Rml4dHVyZTtcblxuICAgICAgICBpZiAoIXRoaXMuZml4dHVyZSlcbiAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICB0aGlzLnBhZ2VVcmwgICAgICAgICAgICAgPSB0aGlzLmZpeHR1cmUucGFnZVVybCB8fCBTUEVDSUFMX0JMQU5LX1BBR0U7XG4gICAgICAgIHRoaXMucmVxdWVzdEhvb2tzICAgICAgICA9IHRoaXMuZml4dHVyZS5yZXF1ZXN0SG9va3Muc2xpY2UoKTtcbiAgICAgICAgdGhpcy5jbGllbnRTY3JpcHRzICAgICAgID0gdGhpcy5maXh0dXJlLmNsaWVudFNjcmlwdHMuc2xpY2UoKTtcbiAgICAgICAgdGhpcy5za2lwSnNFcnJvcnNPcHRpb25zID0gdGhpcy5maXh0dXJlLnNraXBKc0Vycm9yc09wdGlvbnM7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9hZGQgKG5hbWU6IHN0cmluZywgZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLnN0cmluZywgJ2FwaU9yaWdpbicsICdUaGUgdGVzdCBuYW1lJywgbmFtZSk7XG4gICAgICAgIGFzc2VydFR5cGUoaXMuZnVuY3Rpb24sICdhcGlPcmlnaW4nLCAnVGhlIHRlc3QgYm9keScsIGZuKTtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5ub25OdWxsT2JqZWN0LCAnYXBpT3JpZ2luJywgYFRoZSBmaXh0dXJlIG9mICcke25hbWV9JyB0ZXN0YCwgdGhpcy5maXh0dXJlKTtcblxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLmZuICAgPSB3cmFwVGVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICBpZiAoIXRoaXMudGVzdEZpbGUuY29sbGVjdGVkVGVzdHMuaW5jbHVkZXModGhpcykpXG4gICAgICAgICAgICB0aGlzLnRlc3RGaWxlLmNvbGxlY3RlZFRlc3RzLnB1c2godGhpcyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2JlZm9yZSQgKGZuOiBGdW5jdGlvbik6IEZ1bmN0aW9uIHtcbiAgICAgICAgYXNzZXJ0VHlwZShpcy5mdW5jdGlvbiwgJ2JlZm9yZScsICdUaGUgdGVzdC5iZWZvcmUgaG9vaycsIGZuKTtcblxuICAgICAgICB0aGlzLmJlZm9yZUZuID0gd3JhcFRlc3RGdW5jdGlvbihmbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2FmdGVyJCAoZm46IEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICBhc3NlcnRUeXBlKGlzLmZ1bmN0aW9uLCAnYWZ0ZXInLCAnVGhlIHRlc3QuYWZ0ZXIgaG9vaycsIGZuKTtcblxuICAgICAgICB0aGlzLmFmdGVyRm4gPSB3cmFwVGVzdEZ1bmN0aW9uKGZuKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcmVxdWVzdEhvb2tzJCAoLi4uaG9va3M6IFJlcXVlc3RIb29rW10pOiBGdW5jdGlvbiB7XG4gICAgICAgIGlmICh0aGlzLmFwaU1ldGhvZFdhc0NhbGxlZC5yZXF1ZXN0SG9va3MpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoT1BUSU9OX05BTUVTLnJlcXVlc3RIb29rcywgUlVOVElNRV9FUlJPUlMubXVsdGlwbGVBUElNZXRob2RDYWxsRm9yYmlkZGVuLCBPUFRJT05fTkFNRVMucmVxdWVzdEhvb2tzKTtcblxuICAgICAgICBob29rcyA9IGZsYXR0ZW4oaG9va3MpO1xuXG4gICAgICAgIGFzc2VydFJlcXVlc3RIb29rVHlwZShob29rcyk7XG5cbiAgICAgICAgdGhpcy5yZXF1ZXN0SG9va3MgICAgICAgICAgICAgICAgICAgID0gdW5pb24odGhpcy5yZXF1ZXN0SG9va3MsIGhvb2tzKTtcbiAgICAgICAgdGhpcy5hcGlNZXRob2RXYXNDYWxsZWQucmVxdWVzdEhvb2tzID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hcGlPcmlnaW47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xpZW50U2NyaXB0cyQgKC4uLnNjcmlwdHM6IENsaWVudFNjcmlwdEluaXRbXSk6IEZ1bmN0aW9uIHtcbiAgICAgICAgaWYgKHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLmNsaWVudFNjcmlwdHMpXG4gICAgICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoT1BUSU9OX05BTUVTLmNsaWVudFNjcmlwdHMsIFJVTlRJTUVfRVJST1JTLm11bHRpcGxlQVBJTWV0aG9kQ2FsbEZvcmJpZGRlbiwgT1BUSU9OX05BTUVTLmNsaWVudFNjcmlwdHMpO1xuXG4gICAgICAgIHNjcmlwdHMgPSBmbGF0dGVuKHNjcmlwdHMpO1xuXG4gICAgICAgIGFzc2VydENsaWVudFNjcmlwdFR5cGUoc2NyaXB0cyk7XG5cbiAgICAgICAgdGhpcy5jbGllbnRTY3JpcHRzICAgICAgICAgICAgICAgICAgICA9IHVuaW9uKHRoaXMuY2xpZW50U2NyaXB0cywgc2NyaXB0cyk7XG4gICAgICAgIHRoaXMuYXBpTWV0aG9kV2FzQ2FsbGVkLmNsaWVudFNjcmlwdHMgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmFwaU9yaWdpbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF90aW1lb3V0cyQgKHRpbWVvdXRzOiBUZXN0VGltZW91dHMpOiBGdW5jdGlvbiB7XG4gICAgICAgIGFzc2VydFR5cGUoaXMudGVzdFRpbWVvdXRzLCAndGltZW91dHMnLCAndGVzdC50aW1lb3V0cycsIHRpbWVvdXRzKTtcblxuICAgICAgICBPYmplY3Qua2V5cyhUZXN0VGltZW91dClcbiAgICAgICAgICAgIC5maWx0ZXIodGltZW91dCA9PiB0aW1lb3V0IGluIHRpbWVvdXRzKVxuICAgICAgICAgICAgLmZvckVhY2godGltZW91dCA9PiB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0VHlwZShpcy5ub25OZWdhdGl2ZU51bWJlciwgJ3RpbWVvdXRzJywgYHRlc3QudGltZW91dHMuJHt0aW1lb3V0fWAsIHRpbWVvdXRzW3RpbWVvdXQgYXMga2V5b2YgVGVzdFRpbWVvdXRzXSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRpbWVvdXRzID0gdGltZW91dHM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpT3JpZ2luO1xuICAgIH1cbn1cblxuVGVzdGluZ1VuaXQubWFrZUFQSUxpc3RGb3JDaGlsZENsYXNzKFRlc3QpO1xuIl19
|
|
@@ -38,7 +38,9 @@ function createRequire(filename) {
|
|
|
38
38
|
}
|
|
39
39
|
function createSelectorDefinition(testRun) {
|
|
40
40
|
return (fn, options = {}) => {
|
|
41
|
-
const { skipVisibilityCheck, collectionMode } = testRun.controller
|
|
41
|
+
const { skipVisibilityCheck, collectionMode } = testRun.controller ?
|
|
42
|
+
testRun.controller.getExecutionContext()[OPTIONS_KEY] :
|
|
43
|
+
createExecutionContext(testRun)[OPTIONS_KEY];
|
|
42
44
|
if (skipVisibilityCheck)
|
|
43
45
|
options.visibilityCheck = false;
|
|
44
46
|
if (testRun && testRun.id)
|
|
@@ -86,4 +88,4 @@ function createExecutionContext(testRun) {
|
|
|
86
88
|
}));
|
|
87
89
|
}
|
|
88
90
|
exports.createExecutionContext = createExecutionContext;
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0aW9uLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBpL3Rlc3QtY29udHJvbGxlci9leGVjdXRpb24tY29udGV4dC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyQkFBbUM7QUFDbkMsb0RBQTRCO0FBQzVCLGdEQUF3QjtBQUN4Qix1RUFBOEM7QUFDOUMsb0dBQWdFO0FBRWhFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUV6QixRQUFBLHVCQUF1QixHQUFHO0lBQ25DLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsY0FBYyxFQUFPLEtBQUs7Q0FDN0IsQ0FBQztBQUVGLFNBQVMsa0JBQWtCLENBQUUsV0FBVztJQUNwQyxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7SUFDckIsSUFBSSxTQUFTLEdBQUssY0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU1QyxPQUFPLFdBQVcsS0FBSyxTQUFTLEVBQUU7UUFDOUIsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUN4QixTQUFTLEdBQUssY0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4QyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGtDQUFZLENBQUMsQ0FBQyxDQUFDO0tBQ3hEO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFFLFFBQVE7SUFDNUIsZ0NBQWdDO0lBQ2hDLElBQUksZ0JBQU0sQ0FBQyxxQkFBcUI7UUFDNUIsT0FBTyxnQkFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWxELElBQUksZ0JBQU0sQ0FBQyxhQUFhO1FBQ3BCLE9BQU8sZ0JBQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFMUMsTUFBTSxXQUFXLEdBQVksSUFBSSxnQkFB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QyxRQUFRLENBQUMsQ0FBQztZQUUvQixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO2dCQUMvQixPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUU1QixNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsUUFBUSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xELENBQUM7S0FDSixDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7QUE3QkQsd0RBNkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3ZtJztcbmltcG9ydCBNb2R1bGUgZnJvbSAnbW9kdWxlJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGV4cG9ydGFibGVMaWIgZnJvbSAnLi4vZXhwb3J0YWJsZS1saWInO1xuaW1wb3J0IE5PREVfTU9EVUxFUyBmcm9tICcuLi8uLi91dGlscy9ub2RlLW1vZHVsZXMtZm9sZGVyLW5hbWUnO1xuXG5jb25zdCBPUFRJT05TX0tFWSA9IFN5bWJvbCgnb3B0aW9ucycpO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9DT05URVhUX09QVElPTlMgPSB7XG4gICAgc2tpcFZpc2liaWxpdHlDaGVjazogZmFsc2UsXG4gICAgY29sbGVjdGlvbk1vZGU6ICAgICAgZmFsc2UsXG59O1xuXG5mdW5jdGlvbiBnZXRNb2R1bGVCYXNlUGF0aHMgKGN1cnJlbnRQYXRoKSB7XG4gICAgY29uc3Qgbm9kZVBhdGhzID0gW107XG4gICAgbGV0IHBhcmVudERpciAgID0gcGF0aC5kaXJuYW1lKGN1cnJlbnRQYXRoKTtcblxuICAgIHdoaWxlIChjdXJyZW50UGF0aCAhPT0gcGFyZW50RGlyKSB7XG4gICAgICAgIGN1cnJlbnRQYXRoID0gcGFyZW50RGlyO1xuICAgICAgICBwYXJlbnREaXIgICA9IHBhdGguZGlybmFtZShjdXJyZW50UGF0aCk7XG5cbiAgICAgICAgbm9kZVBhdGhzLnB1c2gocGF0aC5qb2luKGN1cnJlbnRQYXRoLCBOT0RFX01PRFVMRVMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZVBhdGhzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVSZXF1aXJlIChmaWxlbmFtZSkge1xuICAgIC8vRGVwcmVjYXRlZCBzaW5jZTogTm9kZSB2MTIuMi4wXG4gICAgaWYgKE1vZHVsZS5jcmVhdGVSZXF1aXJlRnJvbVBhdGgpXG4gICAgICAgIHJldHVybiBNb2R1bGUuY3JlYXRlUmVxdWlyZUZyb21QYXRoKGZpbGVuYW1lKTtcblxuICAgIGlmIChNb2R1bGUuY3JlYXRlUmVxdWlyZSlcbiAgICAgICAgcmV0dXJuIE1vZHVsZS5jcmVhdGVSZXF1aXJlKGZpbGVuYW1lKTtcblxuICAgIGNvbnN0IGR1bW15TW9kdWxlICAgICAgICAgID0gbmV3IE1vZHVsZShmaWxlbmFtZSwgbW9kdWxlKTtcbiAgICBjb25zdCBsb2NhbE1vZHVsZXNQYXRocyAgICA9IGdldE1vZHVsZUJhc2VQYXRocyhmaWxlbmFtZSk7XG5cbiAgICBkdW1teU1vZHVsZS5maWxlbmFtZSA9IGZpbGVuYW1lO1xuICAgIGR1bW15TW9kdWxlLnBhdGhzICAgID0gbG9jYWxNb2R1bGVzUGF0aHMuY29uY2F0KG1vZHVsZS5wYXRocyk7XG5cbiAgICByZXR1cm4gaWQgPT4gZHVtbXlNb2R1bGUucmVxdWlyZShpZCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yRGVmaW5pdGlvbiAodGVzdFJ1bikge1xuICAgIHJldHVybiAoZm4sIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHNraXBWaXNpYmlsaXR5Q2hlY2ssIGNvbGxlY3Rpb25Nb2RlIH0gPSB0ZXN0UnVuLmNvbnRyb2xsZXIgP1xuICAgICAgICAgICAgdGVzdFJ1bi5jb250cm9sbGVyLmdldEV4ZWN1dGlvbkNvbnRleHQoKVtPUFRJT05TX0tFWV0gOlxuICAgICAgICAgICAgY3JlYXRlRXhlY3V0aW9uQ29udGV4dCh0ZXN0UnVuKVtPUFRJT05TX0tFWV07XG5cbiAgICAgICAgaWYgKHNraXBWaXNpYmlsaXR5Q2hlY2spXG4gICAgICAgICAgICBvcHRpb25zLnZpc2liaWxpdHlDaGVjayA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0ZXN0UnVuICYmIHRlc3RSdW4uaWQpXG4gICAgICAgICAgICBvcHRpb25zLmJvdW5kVGVzdFJ1biA9IHRlc3RSdW47XG5cbiAgICAgICAgaWYgKGNvbGxlY3Rpb25Nb2RlKVxuICAgICAgICAgICAgb3B0aW9ucy5jb2xsZWN0aW9uTW9kZSA9IGNvbGxlY3Rpb25Nb2RlO1xuXG4gICAgICAgIHJldHVybiBleHBvcnRhYmxlTGliLlNlbGVjdG9yKGZuLCBvcHRpb25zKTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDbGllbnRGdW5jdGlvbkRlZmluaXRpb24gKHRlc3RSdW4pIHtcbiAgICByZXR1cm4gKGZuLCBvcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgaWYgKHRlc3RSdW4gJiYgdGVzdFJ1bi5pZClcbiAgICAgICAgICAgIG9wdGlvbnMuYm91bmRUZXN0UnVuID0gdGVzdFJ1bjtcblxuICAgICAgICByZXR1cm4gZXhwb3J0YWJsZUxpYi5DbGllbnRGdW5jdGlvbihmbiwgb3B0aW9ucyk7XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldENvbnRleHRPcHRpb25zIChjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgY29udGV4dFtPUFRJT05TX0tFWV0gPSBvcHRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRXhlY3V0aW9uQ29udGV4dCAodGVzdFJ1bikge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gdGVzdFJ1bi50ZXN0LnRlc3RGaWxlLmZpbGVuYW1lO1xuXG4gICAgY29uc3QgcmVwbGFjZXJzID0ge1xuICAgICAgICByZXF1aXJlOiAgICAgICAgY3JlYXRlUmVxdWlyZShmaWxlbmFtZSksXG4gICAgICAgIF9fZmlsZW5hbWU6ICAgICBmaWxlbmFtZSxcbiAgICAgICAgX19kaXJuYW1lOiAgICAgIHBhdGguZGlybmFtZShmaWxlbmFtZSksXG4gICAgICAgIHQ6ICAgICAgICAgICAgICB0ZXN0UnVuLmNvbnRyb2xsZXIsXG4gICAgICAgIFNlbGVjdG9yOiAgICAgICBjcmVhdGVTZWxlY3RvckRlZmluaXRpb24odGVzdFJ1biksXG4gICAgICAgIENsaWVudEZ1bmN0aW9uOiBjcmVhdGVDbGllbnRGdW5jdGlvbkRlZmluaXRpb24odGVzdFJ1biksXG4gICAgICAgIFJvbGU6ICAgICAgICAgICBleHBvcnRhYmxlTGliLlJvbGUsXG4gICAgICAgIFJlcXVlc3RMb2dnZXI6ICBleHBvcnRhYmxlTGliLlJlcXVlc3RMb2dnZXIsXG4gICAgICAgIFJlcXVlc3RNb2NrOiAgICBleHBvcnRhYmxlTGliLlJlcXVlc3RNb2NrLFxuICAgICAgICBSZXF1ZXN0SG9vazogICAgZXhwb3J0YWJsZUxpYi5SZXF1ZXN0SG9vayxcbiAgICAgICAgW09QVElPTlNfS0VZXTogIERFRkFVTFRfQ09OVEVYVF9PUFRJT05TLFxuICAgICAgICB1c2VyVmFyaWFibGVzOiAgZXhwb3J0YWJsZUxpYi51c2VyVmFyaWFibGVzLFxuICAgIH07XG5cbiAgICByZXR1cm4gY3JlYXRlQ29udGV4dChuZXcgUHJveHkocmVwbGFjZXJzLCB7XG4gICAgICAgIGdldDogKHRhcmdldCwgcHJvcGVydHkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBsYWNlcnMuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKVxuICAgICAgICAgICAgICAgIHJldHVybiByZXBsYWNlcnNbcHJvcGVydHldO1xuXG4gICAgICAgICAgICBpZiAoZ2xvYmFsLmhhc093blByb3BlcnR5KHByb3BlcnR5KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsW3Byb3BlcnR5XTtcblxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3Byb3BlcnR5fSBpcyBub3QgZGVmaW5lZGApO1xuICAgICAgICB9LFxuICAgIH0pKTtcbn1cbiJdfQ==
|