testcafe
Version:
Automated browser testing for the modern web development stack.
70 lines • 22.9 kB
JavaScript
;
// -------------------------------------------------------------
// WARNING: this file is used by both the client and the server.
// Do not use any browser or node-specific API!
// -------------------------------------------------------------
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../types");
exports.default = {
[types_1.RUNTIME_ERRORS.cannotCreateMultipleLiveModeRunners]: 'Cannot create multiple live mode runners.',
[types_1.RUNTIME_ERRORS.cannotRunLiveModeRunnerMultipleTimes]: 'Cannot run a live mode runner multiple times.',
[types_1.RUNTIME_ERRORS.browserDisconnected]: 'The {userAgent} browser disconnected. This problem may appear when a browser hangs or is closed, or due to network issues.',
[types_1.RUNTIME_ERRORS.cannotRunAgainstDisconnectedBrowsers]: 'The following browsers disconnected: {userAgents}. Tests will not be run.',
[types_1.RUNTIME_ERRORS.cannotEstablishBrowserConnection]: 'Unable to establish one or more of the specified browser connections. This can be caused by network issues or remote device failure.',
[types_1.RUNTIME_ERRORS.cannotFindBrowser]: 'Unable to find the browser. "{browser}" is not a browser alias or path to an executable file.',
[types_1.RUNTIME_ERRORS.browserProviderNotFound]: 'The specified "{providerName}" browser provider was not found.',
[types_1.RUNTIME_ERRORS.browserNotSet]: 'No browser selected to test against.',
[types_1.RUNTIME_ERRORS.testSourcesNotSet]: 'No test file specified.',
[types_1.RUNTIME_ERRORS.noTestsToRun]: 'No tests to run. Either the test files contain no tests or the filter function is too restrictive.',
[types_1.RUNTIME_ERRORS.cannotFindReporterForAlias]: 'The provided "{name}" reporter does not exist. Check that you have specified the report format correctly.',
[types_1.RUNTIME_ERRORS.multipleStdoutReporters]: 'Multiple reporters attempting to write to stdout: "{reporters}". Only one reporter can write to stdout.',
[types_1.RUNTIME_ERRORS.optionValueIsNotValidRegExp]: 'The "{optionName}" option value is not a valid regular expression.',
[types_1.RUNTIME_ERRORS.optionValueIsNotValidKeyValue]: 'The "{optionName}" option value is not a valid key-value pair.',
[types_1.RUNTIME_ERRORS.invalidSpeedValue]: 'Speed should be a number between 0.01 and 1.',
[types_1.RUNTIME_ERRORS.invalidConcurrencyFactor]: 'The concurrency factor should be an integer greater or equal to 1.',
[types_1.RUNTIME_ERRORS.cannotDivideRemotesCountByConcurrency]: 'The number of remote browsers should be divisible by the factor of concurrency.',
[types_1.RUNTIME_ERRORS.portsOptionRequiresTwoNumbers]: 'The "--ports" option requires two numbers to be specified.',
[types_1.RUNTIME_ERRORS.portIsNotFree]: 'The specified {portNum} port is already in use by another program.',
[types_1.RUNTIME_ERRORS.invalidHostname]: 'The specified "{hostname}" hostname cannot be resolved to the current machine.',
[types_1.RUNTIME_ERRORS.cannotFindSpecifiedTestSource]: 'Cannot find a test source file at "{path}".',
[types_1.RUNTIME_ERRORS.clientFunctionCodeIsNotAFunction]: '{#instantiationCallsiteName} code is expected to be specified as a function, but {type} was passed.',
[types_1.RUNTIME_ERRORS.selectorInitializedWithWrongType]: '{#instantiationCallsiteName} is expected to be initialized with a function, CSS selector string, another Selector, node snapshot or a Promise returned by a Selector, but {type} was passed.',
[types_1.RUNTIME_ERRORS.clientFunctionCannotResolveTestRun]: "{#instantiationCallsiteName} cannot implicitly resolve the test run in context of which it should be executed. If you need to call {#instantiationCallsiteName} from the Node.js API callback, pass the test controller manually via {#instantiationCallsiteName}'s `.with({ boundTestRun: t })` method first. Note that you cannot execute {#instantiationCallsiteName} outside the test code.",
[types_1.RUNTIME_ERRORS.regeneratorInClientFunctionCode]: `{#instantiationCallsiteName} code, arguments or dependencies cannot contain generators or "async/await" syntax (use Promises instead).`,
[types_1.RUNTIME_ERRORS.invalidClientFunctionTestRunBinding]: 'The "boundTestRun" option value is expected to be a test controller.',
[types_1.RUNTIME_ERRORS.invalidValueType]: '{smthg} is expected to be a {type}, but it was {actual}.',
[types_1.RUNTIME_ERRORS.unsupportedUrlProtocol]: 'The specified "{url}" test page URL uses an unsupported {protocol}:// protocol. Only relative URLs or absolute URLs with http://, https:// and file:// protocols are supported.',
[types_1.RUNTIME_ERRORS.testControllerProxyCannotResolveTestRun]: `Cannot implicitly resolve the test run in the context of which the test controller action should be executed. Use test function's 't' argument instead.`,
[types_1.RUNTIME_ERRORS.timeLimitedPromiseTimeoutExpired]: 'Timeout expired for a time limited promise',
[types_1.RUNTIME_ERRORS.cannotUseScreenshotPathPatternWithoutBaseScreenshotPathSpecified]: 'Unable to set the screenshot path pattern when screenshots are disabled. Specify the base path where screenshots are stored to enable them.',
[types_1.RUNTIME_ERRORS.cannotSetVideoOptionsWithoutBaseVideoPathSpecified]: 'Unable to set video or encoding options when video recording is disabled. Specify the base path where video files are stored to enable recording.',
[types_1.RUNTIME_ERRORS.multipleAPIMethodCallForbidden]: 'You cannot call the "{methodName}" method more than once. Pass an array of parameters to this method instead.',
[types_1.RUNTIME_ERRORS.invalidReporterOutput]: "Specify a file name or a writable stream as the reporter's output target.",
[types_1.RUNTIME_ERRORS.cannotReadSSLCertFile]: 'Unable to read the "{path}" file, specified by the "{option}" ssl option. Error details:\n' +
'\n' +
'{err}',
[types_1.RUNTIME_ERRORS.cannotPrepareTestsDueToError]: 'Cannot prepare tests due to an error.\n' +
'\n' +
'{errMessage}',
[types_1.RUNTIME_ERRORS.cannotParseRawFile]: 'Cannot parse a test source file in the raw format at "{path}" due to an error.\n' +
'\n' +
'{errMessage}',
[types_1.RUNTIME_ERRORS.testedAppFailedWithError]: 'Tested app failed with an error:\n' +
'\n' +
'{errMessage}',
[types_1.RUNTIME_ERRORS.unableToOpenBrowser]: 'Was unable to open the browser "{alias}" due to error.\n' +
'\n' +
'{errMessage}',
[types_1.RUNTIME_ERRORS.requestHookConfigureAPIError]: 'There was an error while configuring the request hook:\n' +
'\n' +
'{requestHookName}: {errMsg}',
[types_1.RUNTIME_ERRORS.forbiddenCharatersInScreenshotPath]: 'There are forbidden characters in the "{screenshotPath}" {screenshotPathType}:\n' +
' {forbiddenCharsDescription}',
[types_1.RUNTIME_ERRORS.cannotFindFFMPEG]: 'Unable to locate the FFmpeg executable required to record videos. Do one of the following:\n' +
'\n' +
'* add the FFmpeg installation directory to the PATH environment variable,\n' +
'* specify the path to the FFmpeg executable in the FFMPEG_PATH environment variable or the ffmpegPath video option,\n' +
'* install the @ffmpeg-installer/ffmpeg package from npm.',
};
module.exports = exports.default;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9ycy9ydW50aW1lL3RlbXBsYXRlcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsZ0VBQWdFO0FBQ2hFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsZ0VBQWdFOztBQUVoRSxvQ0FBMEM7QUFFMUMsa0JBQWU7SUFDWCxDQUFDLHNCQUFjLENBQUMsbUNBQW1DLENBQUMsRUFBK0IsMkNBQTJDO0lBQzlILENBQUMsc0JBQWMsQ0FBQyxvQ0FBb0MsQ0FBQyxFQUE4QiwrQ0FBK0M7SUFDbEksQ0FBQyxzQkFBYyxDQUFDLG1CQUFtQixDQUFDLEVBQStDLDRIQUE0SDtJQUMvTSxDQUFDLHNCQUFjLENBQUMsb0NBQW9DLENBQUMsRUFBOEIsMkVBQTJFO0lBQzlKLENBQUMsc0JBQWMsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFrQyxzSUFBc0k7SUFDek4sQ0FBQyxzQkFBYyxDQUFDLGlCQUFpQixDQUFDLEVBQWlELCtGQUErRjtJQUNsTCxDQUFDLHNCQUFjLENBQUMsdUJBQXVCLENBQUMsRUFBMkMsZ0VBQWdFO0lBQ25KLENBQUMsc0JBQWMsQ0FBQyxhQUFhLENBQUMsRUFBcUQsc0NBQXNDO0lBQ3pILENBQUMsc0JBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFpRCx5QkFBeUI7SUFDNUcsQ0FBQyxzQkFBYyxDQUFDLFlBQVksQ0FBQyxFQUFzRCxvR0FBb0c7SUFDdkwsQ0FBQyxzQkFBYyxDQUFDLDBCQUEwQixDQUFDLEVBQXdDLDJHQUEyRztJQUM5TCxDQUFDLHNCQUFjLENBQUMsdUJBQXVCLENBQUMsRUFBMkMseUdBQXlHO0lBQzVMLENBQUMsc0JBQWMsQ0FBQywyQkFBMkIsQ0FBQyxFQUF1QyxvRUFBb0U7SUFDdkosQ0FBQyxzQkFBYyxDQUFDLDZCQUE2QixDQUFDLEVBQXFDLGdFQUFnRTtJQUNuSixDQUFDLHNCQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBaUQsOENBQThDO0lBQ2pJLENBQUMsc0JBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxFQUEwQyxvRUFBb0U7SUFDdkosQ0FBQyxzQkFBYyxDQUFDLHFDQUFxQyxDQUFDLEVBQTZCLGlGQUFpRjtJQUNwSyxDQUFDLHNCQUFjLENBQUMsNkJBQTZCLENBQUMsRUFBcUMsNERBQTREO0lBQy9JLENBQUMsc0JBQWMsQ0FBQyxhQUFhLENBQUMsRUFBcUQsb0VBQW9FO0lBQ3ZKLENBQUMsc0JBQWMsQ0FBQyxlQUFlLENBQUMsRUFBbUQsZ0ZBQWdGO0lBQ25LLENBQUMsc0JBQWMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFxQyw2Q0FBNkM7SUFDaEksQ0FBQyxzQkFBYyxDQUFDLGdDQUFnQyxDQUFDLEVBQWtDLHFHQUFxRztJQUN4TCxDQUFDLHNCQUFjLENBQUMsZ0NBQWdDLENBQUMsRUFBa0MsOExBQThMO0lBQ2pSLENBQUMsc0JBQWMsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFnQyxpWUFBaVk7SUFDcGQsQ0FBQyxzQkFBYyxDQUFDLCtCQUErQixDQUFDLEVBQW1DLHdJQUF3STtJQUMzTixDQUFDLHNCQUFjLENBQUMsbUNBQW1DLENBQUMsRUFBK0Isc0VBQXNFO0lBQ3pKLENBQUMsc0JBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFrRCwwREFBMEQ7SUFDN0ksQ0FBQyxzQkFBYyxDQUFDLHNCQUFzQixDQUFDLEVBQTRDLGlMQUFpTDtJQUNwUSxDQUFDLHNCQUFjLENBQUMsdUNBQXVDLENBQUMsRUFBMkIseUpBQXlKO0lBQzVPLENBQUMsc0JBQWMsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFrQyw0Q0FBNEM7SUFDL0gsQ0FBQyxzQkFBYyxDQUFDLGdFQUFnRSxDQUFDLEVBQUUsNklBQTZJO0lBQ2hPLENBQUMsc0JBQWMsQ0FBQyxrREFBa0QsQ0FBQyxFQUFnQixtSkFBbUo7SUFDdE8sQ0FBQyxzQkFBYyxDQUFDLDhCQUE4QixDQUFDLEVBQW9DLCtHQUErRztJQUNsTSxDQUFDLHNCQUFjLENBQUMscUJBQXFCLENBQUMsRUFBNkMsMkVBQTJFO0lBQzlKLENBQUMsc0JBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxFQUE2Qyw0RkFBNEY7UUFDNUYsSUFBSTtRQUNKLE9BQU87SUFFMUYsQ0FBQyxzQkFBYyxDQUFDLDRCQUE0QixDQUFDLEVBQUUseUNBQXlDO1FBQ3BDLElBQUk7UUFDSixjQUFjO0lBRWxFLENBQUMsc0JBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLGtGQUFrRjtRQUM3RSxJQUFJO1FBQ0osY0FBYztJQUV4RCxDQUFDLHNCQUFjLENBQUMsd0JBQXdCLENBQUMsRUFBRSxvQ0FBb0M7UUFDL0IsSUFBSTtRQUNKLGNBQWM7SUFFOUQsQ0FBQyxzQkFBYyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsMERBQTBEO1FBQ3JELElBQUk7UUFDSixjQUFjO0lBRXpELENBQUMsc0JBQWMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLDBEQUEwRDtRQUNyRCxJQUFJO1FBQ0osNkJBQTZCO0lBRWpGLENBQUMsc0JBQWMsQ0FBQyxrQ0FBa0MsQ0FBQyxFQUFFLGtGQUFrRjtRQUM3RSw4QkFBOEI7SUFFeEYsQ0FBQyxzQkFBYyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsOEZBQThGO1FBQ3pGLElBQUk7UUFDSiw2RUFBNkU7UUFDN0UsdUhBQXVIO1FBQ3ZILDBEQUEwRDtDQUNyRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gV0FSTklORzogdGhpcyBmaWxlIGlzIHVzZWQgYnkgYm90aCB0aGUgY2xpZW50IGFuZCB0aGUgc2VydmVyLlxuLy8gRG8gbm90IHVzZSBhbnkgYnJvd3NlciBvciBub2RlLXNwZWNpZmljIEFQSSFcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW1wb3J0IHsgUlVOVElNRV9FUlJPUlMgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90Q3JlYXRlTXVsdGlwbGVMaXZlTW9kZVJ1bm5lcnNdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgY3JlYXRlIG11bHRpcGxlIGxpdmUgbW9kZSBydW5uZXJzLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFJ1bkxpdmVNb2RlUnVubmVyTXVsdGlwbGVUaW1lc106ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2Fubm90IHJ1biBhIGxpdmUgbW9kZSBydW5uZXIgbXVsdGlwbGUgdGltZXMuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuYnJvd3NlckRpc2Nvbm5lY3RlZF06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUge3VzZXJBZ2VudH0gYnJvd3NlciBkaXNjb25uZWN0ZWQuIFRoaXMgcHJvYmxlbSBtYXkgYXBwZWFyIHdoZW4gYSBicm93c2VyIGhhbmdzIG9yIGlzIGNsb3NlZCwgb3IgZHVlIHRvIG5ldHdvcmsgaXNzdWVzLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFJ1bkFnYWluc3REaXNjb25uZWN0ZWRCcm93c2Vyc106ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIGZvbGxvd2luZyBicm93c2VycyBkaXNjb25uZWN0ZWQ6IHt1c2VyQWdlbnRzfS4gVGVzdHMgd2lsbCBub3QgYmUgcnVuLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdEVzdGFibGlzaEJyb3dzZXJDb25uZWN0aW9uXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIGVzdGFibGlzaCBvbmUgb3IgbW9yZSBvZiB0aGUgc3BlY2lmaWVkIGJyb3dzZXIgY29ubmVjdGlvbnMuIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBuZXR3b3JrIGlzc3VlcyBvciByZW1vdGUgZGV2aWNlIGZhaWx1cmUuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RmluZEJyb3dzZXJdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdVbmFibGUgdG8gZmluZCB0aGUgYnJvd3Nlci4gXCJ7YnJvd3Nlcn1cIiBpcyBub3QgYSBicm93c2VyIGFsaWFzIG9yIHBhdGggdG8gYW4gZXhlY3V0YWJsZSBmaWxlLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmJyb3dzZXJQcm92aWRlck5vdEZvdW5kXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHNwZWNpZmllZCBcIntwcm92aWRlck5hbWV9XCIgYnJvd3NlciBwcm92aWRlciB3YXMgbm90IGZvdW5kLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmJyb3dzZXJOb3RTZXRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm8gYnJvd3NlciBzZWxlY3RlZCB0byB0ZXN0IGFnYWluc3QuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMudGVzdFNvdXJjZXNOb3RTZXRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdObyB0ZXN0IGZpbGUgc3BlY2lmaWVkLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLm5vVGVzdHNUb1J1bl06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTm8gdGVzdHMgdG8gcnVuLiBFaXRoZXIgdGhlIHRlc3QgZmlsZXMgY29udGFpbiBubyB0ZXN0cyBvciB0aGUgZmlsdGVyIGZ1bmN0aW9uIGlzIHRvbyByZXN0cmljdGl2ZS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RGaW5kUmVwb3J0ZXJGb3JBbGlhc106ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBwcm92aWRlZCBcIntuYW1lfVwiIHJlcG9ydGVyIGRvZXMgbm90IGV4aXN0LiBDaGVjayB0aGF0IHlvdSBoYXZlIHNwZWNpZmllZCB0aGUgcmVwb3J0IGZvcm1hdCBjb3JyZWN0bHkuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMubXVsdGlwbGVTdGRvdXRSZXBvcnRlcnNdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aXBsZSByZXBvcnRlcnMgYXR0ZW1wdGluZyB0byB3cml0ZSB0byBzdGRvdXQ6IFwie3JlcG9ydGVyc31cIi4gT25seSBvbmUgcmVwb3J0ZXIgY2FuIHdyaXRlIHRvIHN0ZG91dC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5vcHRpb25WYWx1ZUlzTm90VmFsaWRSZWdFeHBdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBcIntvcHRpb25OYW1lfVwiIG9wdGlvbiB2YWx1ZSBpcyBub3QgYSB2YWxpZCByZWd1bGFyIGV4cHJlc3Npb24uJyxcbiAgICBbUlVOVElNRV9FUlJPUlMub3B0aW9uVmFsdWVJc05vdFZhbGlkS2V5VmFsdWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgXCJ7b3B0aW9uTmFtZX1cIiBvcHRpb24gdmFsdWUgaXMgbm90IGEgdmFsaWQga2V5LXZhbHVlIHBhaXIuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuaW52YWxpZFNwZWVkVmFsdWVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTcGVlZCBzaG91bGQgYmUgYSBudW1iZXIgYmV0d2VlbiAwLjAxIGFuZCAxLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRDb25jdXJyZW5jeUZhY3Rvcl06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIGNvbmN1cnJlbmN5IGZhY3RvciBzaG91bGQgYmUgYW4gaW50ZWdlciBncmVhdGVyIG9yIGVxdWFsIHRvIDEuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90RGl2aWRlUmVtb3Rlc0NvdW50QnlDb25jdXJyZW5jeV06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgbnVtYmVyIG9mIHJlbW90ZSBicm93c2VycyBzaG91bGQgYmUgZGl2aXNpYmxlIGJ5IHRoZSBmYWN0b3Igb2YgY29uY3VycmVuY3kuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMucG9ydHNPcHRpb25SZXF1aXJlc1R3b051bWJlcnNdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGUgXCItLXBvcnRzXCIgb3B0aW9uIHJlcXVpcmVzIHR3byBudW1iZXJzIHRvIGJlIHNwZWNpZmllZC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5wb3J0SXNOb3RGcmVlXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBzcGVjaWZpZWQge3BvcnROdW19IHBvcnQgaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBwcm9ncmFtLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRIb3N0bmFtZV06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIHNwZWNpZmllZCBcIntob3N0bmFtZX1cIiBob3N0bmFtZSBjYW5ub3QgYmUgcmVzb2x2ZWQgdG8gdGhlIGN1cnJlbnQgbWFjaGluZS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RGaW5kU3BlY2lmaWVkVGVzdFNvdXJjZV06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBmaW5kIGEgdGVzdCBzb3VyY2UgZmlsZSBhdCBcIntwYXRofVwiLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudEZ1bmN0aW9uQ29kZUlzTm90QUZ1bmN0aW9uXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lfSBjb2RlIGlzIGV4cGVjdGVkIHRvIGJlIHNwZWNpZmllZCBhcyBhIGZ1bmN0aW9uLCBidXQge3R5cGV9IHdhcyBwYXNzZWQuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuc2VsZWN0b3JJbml0aWFsaXplZFdpdGhXcm9uZ1R5cGVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9IGlzIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkIHdpdGggYSBmdW5jdGlvbiwgQ1NTIHNlbGVjdG9yIHN0cmluZywgYW5vdGhlciBTZWxlY3Rvciwgbm9kZSBzbmFwc2hvdCBvciBhIFByb21pc2UgcmV0dXJuZWQgYnkgYSBTZWxlY3RvciwgYnV0IHt0eXBlfSB3YXMgcGFzc2VkLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNsaWVudEZ1bmN0aW9uQ2Fubm90UmVzb2x2ZVRlc3RSdW5dOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInsjaW5zdGFudGlhdGlvbkNhbGxzaXRlTmFtZX0gY2Fubm90IGltcGxpY2l0bHkgcmVzb2x2ZSB0aGUgdGVzdCBydW4gaW4gY29udGV4dCBvZiB3aGljaCBpdCBzaG91bGQgYmUgZXhlY3V0ZWQuIElmIHlvdSBuZWVkIHRvIGNhbGwgeyNpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lfSBmcm9tIHRoZSBOb2RlLmpzIEFQSSBjYWxsYmFjaywgcGFzcyB0aGUgdGVzdCBjb250cm9sbGVyIG1hbnVhbGx5IHZpYSB7I2luc3RhbnRpYXRpb25DYWxsc2l0ZU5hbWV9J3MgYC53aXRoKHsgYm91bmRUZXN0UnVuOiB0IH0pYCBtZXRob2QgZmlyc3QuIE5vdGUgdGhhdCB5b3UgY2Fubm90IGV4ZWN1dGUgeyNpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lfSBvdXRzaWRlIHRoZSB0ZXN0IGNvZGUuXCIsXG4gICAgW1JVTlRJTUVfRVJST1JTLnJlZ2VuZXJhdG9ySW5DbGllbnRGdW5jdGlvbkNvZGVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgeyNpbnN0YW50aWF0aW9uQ2FsbHNpdGVOYW1lfSBjb2RlLCBhcmd1bWVudHMgb3IgZGVwZW5kZW5jaWVzIGNhbm5vdCBjb250YWluIGdlbmVyYXRvcnMgb3IgXCJhc3luYy9hd2FpdFwiIHN5bnRheCAodXNlIFByb21pc2VzIGluc3RlYWQpLmAsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRDbGllbnRGdW5jdGlvblRlc3RSdW5CaW5kaW5nXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGhlIFwiYm91bmRUZXN0UnVuXCIgb3B0aW9uIHZhbHVlIGlzIGV4cGVjdGVkIHRvIGJlIGEgdGVzdCBjb250cm9sbGVyLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLmludmFsaWRWYWx1ZVR5cGVdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne3NtdGhnfSBpcyBleHBlY3RlZCB0byBiZSBhIHt0eXBlfSwgYnV0IGl0IHdhcyB7YWN0dWFsfS4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy51bnN1cHBvcnRlZFVybFByb3RvY29sXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoZSBzcGVjaWZpZWQgXCJ7dXJsfVwiIHRlc3QgcGFnZSBVUkwgdXNlcyBhbiB1bnN1cHBvcnRlZCB7cHJvdG9jb2x9Oi8vIHByb3RvY29sLiBPbmx5IHJlbGF0aXZlIFVSTHMgb3IgYWJzb2x1dGUgVVJMcyB3aXRoIGh0dHA6Ly8sIGh0dHBzOi8vIGFuZCBmaWxlOi8vIHByb3RvY29scyBhcmUgc3VwcG9ydGVkLicsXG4gICAgW1JVTlRJTUVfRVJST1JTLnRlc3RDb250cm9sbGVyUHJveHlDYW5ub3RSZXNvbHZlVGVzdFJ1bl06ICAgICAgICAgICAgICAgICAgICAgICAgICBgQ2Fubm90IGltcGxpY2l0bHkgcmVzb2x2ZSB0aGUgdGVzdCBydW4gaW4gdGhlIGNvbnRleHQgb2Ygd2hpY2ggdGhlIHRlc3QgY29udHJvbGxlciBhY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkLiBVc2UgdGVzdCBmdW5jdGlvbidzICd0JyBhcmd1bWVudCBpbnN0ZWFkLmAsXG4gICAgW1JVTlRJTUVfRVJST1JTLnRpbWVMaW1pdGVkUHJvbWlzZVRpbWVvdXRFeHBpcmVkXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGltZW91dCBleHBpcmVkIGZvciBhIHRpbWUgbGltaXRlZCBwcm9taXNlJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90VXNlU2NyZWVuc2hvdFBhdGhQYXR0ZXJuV2l0aG91dEJhc2VTY3JlZW5zaG90UGF0aFNwZWNpZmllZF06ICdVbmFibGUgdG8gc2V0IHRoZSBzY3JlZW5zaG90IHBhdGggcGF0dGVybiB3aGVuIHNjcmVlbnNob3RzIGFyZSBkaXNhYmxlZC4gU3BlY2lmeSB0aGUgYmFzZSBwYXRoIHdoZXJlIHNjcmVlbnNob3RzIGFyZSBzdG9yZWQgdG8gZW5hYmxlIHRoZW0uJyxcbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90U2V0VmlkZW9PcHRpb25zV2l0aG91dEJhc2VWaWRlb1BhdGhTcGVjaWZpZWRdOiAgICAgICAgICAgICAgICdVbmFibGUgdG8gc2V0IHZpZGVvIG9yIGVuY29kaW5nIG9wdGlvbnMgd2hlbiB2aWRlbyByZWNvcmRpbmcgaXMgZGlzYWJsZWQuIFNwZWNpZnkgdGhlIGJhc2UgcGF0aCB3aGVyZSB2aWRlbyBmaWxlcyBhcmUgc3RvcmVkIHRvIGVuYWJsZSByZWNvcmRpbmcuJyxcbiAgICBbUlVOVElNRV9FUlJPUlMubXVsdGlwbGVBUElNZXRob2RDYWxsRm9yYmlkZGVuXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdZb3UgY2Fubm90IGNhbGwgdGhlIFwie21ldGhvZE5hbWV9XCIgbWV0aG9kIG1vcmUgdGhhbiBvbmNlLiBQYXNzIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMgdG8gdGhpcyBtZXRob2QgaW5zdGVhZC4nLFxuICAgIFtSVU5USU1FX0VSUk9SUy5pbnZhbGlkUmVwb3J0ZXJPdXRwdXRdOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTcGVjaWZ5IGEgZmlsZSBuYW1lIG9yIGEgd3JpdGFibGUgc3RyZWFtIGFzIHRoZSByZXBvcnRlcidzIG91dHB1dCB0YXJnZXQuXCIsXG4gICAgW1JVTlRJTUVfRVJST1JTLmNhbm5vdFJlYWRTU0xDZXJ0RmlsZV06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVW5hYmxlIHRvIHJlYWQgdGhlIFwie3BhdGh9XCIgZmlsZSwgc3BlY2lmaWVkIGJ5IHRoZSBcIntvcHRpb259XCIgc3NsIG9wdGlvbi4gRXJyb3IgZGV0YWlsczpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UHJlcGFyZVRlc3RzRHVlVG9FcnJvcl06ICdDYW5ub3QgcHJlcGFyZSB0ZXN0cyBkdWUgdG8gYW4gZXJyb3IuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tlcnJNZXNzYWdlfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMuY2Fubm90UGFyc2VSYXdGaWxlXTogJ0Nhbm5vdCBwYXJzZSBhIHRlc3Qgc291cmNlIGZpbGUgaW4gdGhlIHJhdyBmb3JtYXQgYXQgXCJ7cGF0aH1cIiBkdWUgdG8gYW4gZXJyb3IuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ZXJyTWVzc2FnZX0nLFxuXG4gICAgW1JVTlRJTUVfRVJST1JTLnRlc3RlZEFwcEZhaWxlZFdpdGhFcnJvcl06ICdUZXN0ZWQgYXBwIGZhaWxlZCB3aXRoIGFuIGVycm9yOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2Vyck1lc3NhZ2V9JyxcblxuICAgIFtSVU5USU1FX0VSUk9SUy51bmFibGVUb09wZW5Ccm93c2VyXTogJ1dhcyB1bmFibGUgdG8gb3BlbiB0aGUgYnJvd3NlciBcInthbGlhc31cIiBkdWUgdG8gZXJyb3IuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tlcnJNZXNzYWdlfScsXG5cbiAgICBbUlVOVElNRV9FUlJPUlMucmVxdWVzdEhvb2tDb25maWd1cmVBUElFcnJvcl06ICdUaGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY29uZmlndXJpbmcgdGhlIHJlcXVlc3QgaG9vazpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne3JlcXVlc3RIb29rTmFtZX06IHtlcnJNc2d9JyxcblxuICAgIFtSVU5USU1FX0VSUk9SUy5mb3JiaWRkZW5DaGFyYXRlcnNJblNjcmVlbnNob3RQYXRoXTogJ1RoZXJlIGFyZSBmb3JiaWRkZW4gY2hhcmFjdGVycyBpbiB0aGUgXCJ7c2NyZWVuc2hvdFBhdGh9XCIge3NjcmVlbnNob3RQYXRoVHlwZX06XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcge2ZvcmJpZGRlbkNoYXJzRGVzY3JpcHRpb259JyxcblxuICAgIFtSVU5USU1FX0VSUk9SUy5jYW5ub3RGaW5kRkZNUEVHXTogJ1VuYWJsZSB0byBsb2NhdGUgdGhlIEZGbXBlZyBleGVjdXRhYmxlIHJlcXVpcmVkIHRvIHJlY29yZCB2aWRlb3MuIERvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqIGFkZCB0aGUgRkZtcGVnIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgdG8gdGhlIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUsXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIEZGbXBlZyBleGVjdXRhYmxlIGluIHRoZSBGRk1QRUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvciB0aGUgZmZtcGVnUGF0aCB2aWRlbyBvcHRpb24sXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqIGluc3RhbGwgdGhlIEBmZm1wZWctaW5zdGFsbGVyL2ZmbXBlZyBwYWNrYWdlIGZyb20gbnBtLicsXG59O1xuIl19