oxygen-cli 1.25.0 → 1.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/build/core/OxygenCore.js +266 -37
- package/build/core/OxygenEvents.js +11 -1
- package/build/core/OxygenModule.js +14 -1
- package/build/core/OxygenService.js +12 -1
- package/build/core/OxygenSubModule.js +10 -1
- package/build/core/WebDriverModule.js +30 -1
- package/build/core/utils.js +17 -1
- package/build/errors/HookError.js +7 -1
- package/build/errors/ModuleError.js +7 -1
- package/build/errors/ModuleUnavailableError.js +3 -1
- package/build/errors/OxygenError.js +33 -1
- package/build/errors/ScriptNotFound.js +7 -1
- package/build/errors/helper.js +77 -45
- package/build/index.js +18 -6
- package/build/lib/cli-util.js +90 -28
- package/build/lib/cli.js +23 -1
- package/build/lib/debugger.js +144 -1
- package/build/lib/img-merge.js +15 -1
- package/build/lib/launcher.js +28 -1
- package/build/lib/moduleRequire.js +4 -1
- package/build/lib/param-manager.js +28 -1
- package/build/lib/param-reader-csv.js +15 -1
- package/build/lib/param-reader-excel.js +14 -1
- package/build/lib/param-reader-json.js +10 -1
- package/build/lib/text-to-image.js +183 -0
- package/build/lib/util.js +58 -3
- package/build/model/case-result.js +4 -2
- package/build/model/failure.js +2 -1
- package/build/model/status.js +2 -1
- package/build/model/step-result.js +2 -1
- package/build/model/suite-result.js +2 -1
- package/build/model/test-result.js +2 -1
- package/build/model/testcase.js +2 -1
- package/build/model/testsuite.js +2 -1
- package/build/ox_modules/index.js +33 -13
- package/build/ox_modules/module-assert.js +24 -8
- package/build/ox_modules/module-date.js +8 -3
- package/build/ox_modules/module-db.js +28 -7
- package/build/ox_modules/module-email.js +36 -10
- package/build/ox_modules/module-eyes.js +46 -5
- package/build/ox_modules/module-http.js +102 -41
- package/build/ox_modules/module-log.js +22 -5
- package/build/ox_modules/module-mailinator.js +32 -10
- package/build/ox_modules/module-mob/commands/alertAccept.js +2 -1
- package/build/ox_modules/module-mob/commands/alertDismiss.js +2 -1
- package/build/ox_modules/module-mob/commands/assertAlert.js +6 -1
- package/build/ox_modules/module-mob/commands/assertText.js +3 -1
- package/build/ox_modules/module-mob/commands/assertTitle.js +4 -1
- package/build/ox_modules/module-mob/commands/assertValue.js +15 -9
- package/build/ox_modules/module-mob/commands/back.js +2 -1
- package/build/ox_modules/module-mob/commands/clear.js +4 -1
- package/build/ox_modules/module-mob/commands/click.js +4 -3
- package/build/ox_modules/module-mob/commands/clickHidden.js +9 -3
- package/build/ox_modules/module-mob/commands/clickLong.js +2 -1
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +4 -1
- package/build/ox_modules/module-mob/commands/closeApp.js +2 -1
- package/build/ox_modules/module-mob/commands/debug.js +2 -2
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +2 -1
- package/build/ox_modules/module-mob/commands/enableNetwork.js +12 -4
- package/build/ox_modules/module-mob/commands/execute.js +2 -1
- package/build/ox_modules/module-mob/commands/findElement.js +3 -1
- package/build/ox_modules/module-mob/commands/findElements.js +4 -1
- package/build/ox_modules/module-mob/commands/getAlertText.js +2 -1
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +2 -1
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +10 -1
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +2 -1
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +2 -1
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +9 -1
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +2 -1
- package/build/ox_modules/module-mob/commands/getLocation.js +2 -1
- package/build/ox_modules/module-mob/commands/getSource.js +2 -1
- package/build/ox_modules/module-mob/commands/getText.js +4 -1
- package/build/ox_modules/module-mob/commands/getTitle.js +2 -1
- package/build/ox_modules/module-mob/commands/getUrl.js +2 -1
- package/build/ox_modules/module-mob/commands/getValue.js +9 -5
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +2 -1
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +2 -1
- package/build/ox_modules/module-mob/commands/index.js +94 -19
- package/build/ox_modules/module-mob/commands/installApp.js +2 -1
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +2 -1
- package/build/ox_modules/module-mob/commands/isCheckable.js +2 -1
- package/build/ox_modules/module-mob/commands/isChecked.js +2 -1
- package/build/ox_modules/module-mob/commands/isClickable.js +2 -1
- package/build/ox_modules/module-mob/commands/isExist.js +3 -1
- package/build/ox_modules/module-mob/commands/isSelected.js +2 -1
- package/build/ox_modules/module-mob/commands/isVisible.js +3 -1
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +2 -1
- package/build/ox_modules/module-mob/commands/launchApp.js +2 -1
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +2 -1
- package/build/ox_modules/module-mob/commands/open.js +3 -1
- package/build/ox_modules/module-mob/commands/pause.js +2 -1
- package/build/ox_modules/module-mob/commands/removeApp.js +2 -1
- package/build/ox_modules/module-mob/commands/resetApp.js +2 -1
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +6 -1
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +2 -1
- package/build/ox_modules/module-mob/commands/select.js +4 -1
- package/build/ox_modules/module-mob/commands/selectFrame.js +4 -1
- package/build/ox_modules/module-mob/commands/selectWindow.js +26 -5
- package/build/ox_modules/module-mob/commands/sendKeys.js +9 -6
- package/build/ox_modules/module-mob/commands/setContext.js +2 -1
- package/build/ox_modules/module-mob/commands/setNativeContext.js +2 -1
- package/build/ox_modules/module-mob/commands/setTimeout.js +2 -1
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +6 -3
- package/build/ox_modules/module-mob/commands/shake.js +2 -1
- package/build/ox_modules/module-mob/commands/smsClickLink.js +2 -1
- package/build/ox_modules/module-mob/commands/smsGetText.js +6 -3
- package/build/ox_modules/module-mob/commands/swipe.js +2 -1
- package/build/ox_modules/module-mob/commands/swipeElement.js +2 -1
- package/build/ox_modules/module-mob/commands/swipeScreen.js +2 -1
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +2 -1
- package/build/ox_modules/module-mob/commands/tap.js +2 -1
- package/build/ox_modules/module-mob/commands/type.js +7 -3
- package/build/ox_modules/module-mob/commands/unlockPattern.js +10 -9
- package/build/ox_modules/module-mob/commands/waitForExist.js +2 -1
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +3 -1
- package/build/ox_modules/module-mob/commands/waitForVisible.js +2 -1
- package/build/ox_modules/module-mob.js +141 -72
- package/build/ox_modules/module-pdf.js +62 -23
- package/build/ox_modules/module-proxy.js +68 -8
- package/build/ox_modules/module-serial.js +32 -7
- package/build/ox_modules/module-shell.js +27 -8
- package/build/ox_modules/module-soap.js +47 -14
- package/build/ox_modules/module-twilio.js +53 -10
- package/build/ox_modules/module-utils.js +51 -16
- package/build/ox_modules/module-web/commands/alertAccept.js +2 -1
- package/build/ox_modules/module-web/commands/alertDismiss.js +2 -1
- package/build/ox_modules/module-web/commands/assertAlert.js +6 -1
- package/build/ox_modules/module-web/commands/assertExist.js +2 -1
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +4 -1
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +3 -1
- package/build/ox_modules/module-web/commands/assertText.js +3 -1
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +6 -1
- package/build/ox_modules/module-web/commands/assertTextPresent.js +6 -1
- package/build/ox_modules/module-web/commands/assertTitle.js +3 -1
- package/build/ox_modules/module-web/commands/assertValue.js +3 -1
- package/build/ox_modules/module-web/commands/back.js +2 -1
- package/build/ox_modules/module-web/commands/clear.js +5 -1
- package/build/ox_modules/module-web/commands/click.js +13 -4
- package/build/ox_modules/module-web/commands/clickHidden.js +7 -2
- package/build/ox_modules/module-web/commands/closeWindow.js +2 -1
- package/build/ox_modules/module-web/commands/debug.js +2 -2
- package/build/ox_modules/module-web/commands/deleteCookies.js +2 -1
- package/build/ox_modules/module-web/commands/deselect.js +2 -1
- package/build/ox_modules/module-web/commands/doubleClick.js +9 -3
- package/build/ox_modules/module-web/commands/dragAndDrop.js +2 -1
- package/build/ox_modules/module-web/commands/execute.js +2 -1
- package/build/ox_modules/module-web/commands/fileBrowse.js +10 -4
- package/build/ox_modules/module-web/commands/findElement.js +3 -1
- package/build/ox_modules/module-web/commands/findElements.js +4 -1
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +2 -1
- package/build/ox_modules/module-web/commands/getAlertText.js +2 -1
- package/build/ox_modules/module-web/commands/getAttribute.js +4 -1
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +3 -1
- package/build/ox_modules/module-web/commands/getCookies.js +2 -1
- package/build/ox_modules/module-web/commands/getCssValue.js +4 -1
- package/build/ox_modules/module-web/commands/getElementCount.js +2 -1
- package/build/ox_modules/module-web/commands/getHTML.js +2 -1
- package/build/ox_modules/module-web/commands/getSource.js +2 -1
- package/build/ox_modules/module-web/commands/getText.js +4 -1
- package/build/ox_modules/module-web/commands/getTitle.js +2 -1
- package/build/ox_modules/module-web/commands/getUrl.js +2 -1
- package/build/ox_modules/module-web/commands/getValue.js +5 -1
- package/build/ox_modules/module-web/commands/getWindowHandles.js +2 -1
- package/build/ox_modules/module-web/commands/getWindowSize.js +2 -1
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +5 -1
- package/build/ox_modules/module-web/commands/index.js +100 -19
- package/build/ox_modules/module-web/commands/isAlertPresent.js +2 -1
- package/build/ox_modules/module-web/commands/isChecked.js +2 -1
- package/build/ox_modules/module-web/commands/isExist.js +3 -1
- package/build/ox_modules/module-web/commands/isInteractable.js +2 -1
- package/build/ox_modules/module-web/commands/isSelected.js +2 -1
- package/build/ox_modules/module-web/commands/isVisible.js +3 -1
- package/build/ox_modules/module-web/commands/makeVisible.js +10 -2
- package/build/ox_modules/module-web/commands/maximizeWindow.js +2 -1
- package/build/ox_modules/module-web/commands/minimizeWindow.js +2 -1
- package/build/ox_modules/module-web/commands/newWindow.js +2 -1
- package/build/ox_modules/module-web/commands/open.js +4 -1
- package/build/ox_modules/module-web/commands/pause.js +2 -1
- package/build/ox_modules/module-web/commands/point.js +2 -1
- package/build/ox_modules/module-web/commands/pointJS.js +8 -2
- package/build/ox_modules/module-web/commands/refresh.js +2 -1
- package/build/ox_modules/module-web/commands/rightClick.js +8 -3
- package/build/ox_modules/module-web/commands/rightClickActions.js +2 -1
- package/build/ox_modules/module-web/commands/scrollToElement.js +2 -1
- package/build/ox_modules/module-web/commands/select.js +5 -1
- package/build/ox_modules/module-web/commands/selectFrame.js +3 -1
- package/build/ox_modules/module-web/commands/selectWindow.js +26 -5
- package/build/ox_modules/module-web/commands/sendKeys.js +6 -3
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +2 -2
- package/build/ox_modules/module-web/commands/setTimeout.js +2 -1
- package/build/ox_modules/module-web/commands/setWindowSize.js +2 -1
- package/build/ox_modules/module-web/commands/takeScreenshot.js +5 -3
- package/build/ox_modules/module-web/commands/type.js +5 -1
- package/build/ox_modules/module-web/commands/waitForAngular.js +11 -6
- package/build/ox_modules/module-web/commands/waitForExist.js +2 -1
- package/build/ox_modules/module-web/commands/waitForInteractable.js +2 -1
- package/build/ox_modules/module-web/commands/waitForNotExist.js +8 -1
- package/build/ox_modules/module-web/commands/waitForNotText.js +3 -1
- package/build/ox_modules/module-web/commands/waitForNotValue.js +3 -1
- package/build/ox_modules/module-web/commands/waitForText.js +3 -1
- package/build/ox_modules/module-web/commands/waitForValue.js +3 -1
- package/build/ox_modules/module-web/commands/waitForVisible.js +2 -1
- package/build/ox_modules/module-web/commands/waitForWindow.js +21 -4
- package/build/ox_modules/module-web.js +181 -82
- package/build/ox_modules/module-win/commands/assertText.js +3 -1
- package/build/ox_modules/module-win/commands/assertTitle.js +4 -1
- package/build/ox_modules/module-win/commands/assertValue.js +15 -9
- package/build/ox_modules/module-win/commands/back.js +2 -1
- package/build/ox_modules/module-win/commands/clear.js +4 -1
- package/build/ox_modules/module-win/commands/click.js +2 -1
- package/build/ox_modules/module-win/commands/clickLong.js +2 -1
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +4 -1
- package/build/ox_modules/module-win/commands/findElement.js +3 -1
- package/build/ox_modules/module-win/commands/findElements.js +4 -1
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +2 -1
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +2 -1
- package/build/ox_modules/module-win/commands/getLocation.js +2 -1
- package/build/ox_modules/module-win/commands/getSource.js +2 -1
- package/build/ox_modules/module-win/commands/getText.js +4 -1
- package/build/ox_modules/module-win/commands/getValue.js +9 -5
- package/build/ox_modules/module-win/commands/getWindowHandles.js +2 -1
- package/build/ox_modules/module-win/commands/index.js +43 -5
- package/build/ox_modules/module-win/commands/isCheckable.js +2 -1
- package/build/ox_modules/module-win/commands/isChecked.js +2 -1
- package/build/ox_modules/module-win/commands/isClickable.js +2 -1
- package/build/ox_modules/module-win/commands/isExist.js +3 -1
- package/build/ox_modules/module-win/commands/isSelected.js +2 -1
- package/build/ox_modules/module-win/commands/isVisible.js +3 -1
- package/build/ox_modules/module-win/commands/open.js +2 -1
- package/build/ox_modules/module-win/commands/pause.js +2 -1
- package/build/ox_modules/module-win/commands/rightClick.js +2 -1
- package/build/ox_modules/module-win/commands/selectWindow.js +15 -1
- package/build/ox_modules/module-win/commands/sendKeys.js +4 -1
- package/build/ox_modules/module-win/commands/setTimeout.js +2 -1
- package/build/ox_modules/module-win/commands/takeScreenshot.js +2 -1
- package/build/ox_modules/module-win/commands/tap.js +2 -1
- package/build/ox_modules/module-win/commands/type.js +4 -1
- package/build/ox_modules/module-win/commands/waitForExist.js +2 -1
- package/build/ox_modules/module-win/commands/waitForInteractable.js +4 -1
- package/build/ox_modules/module-win/commands/waitForVisible.js +2 -1
- package/build/ox_modules/module-win.js +87 -48
- package/build/ox_modules/utils.js +76 -22
- package/build/ox_reporters/reporter-excel.js +58 -1
- package/build/ox_reporters/reporter-html.js +28 -1
- package/build/ox_reporters/reporter-json.js +14 -1
- package/build/ox_reporters/reporter-junit.js +24 -1
- package/build/ox_reporters/reporter-pdf.js +19 -1
- package/build/ox_reporters/reporter-xml.js +17 -1
- package/build/ox_services/service-devtools/submodule-network.js +91 -4
- package/build/ox_services/service-devtools.js +23 -1
- package/build/reporter/FileReporterBase.js +44 -5
- package/build/reporter/ReportAggregator.js +65 -1
- package/build/reporter/ReporterBase.js +6 -1
- package/build/runners/WorkerProcess.js +99 -1
- package/build/runners/cucumber/CucumberEventListener.js +29 -4
- package/build/runners/cucumber/CucumberReporter.js +56 -1
- package/build/runners/cucumber/CucumberWorker.js +66 -1
- package/build/runners/cucumber/index.js +30 -1
- package/build/runners/cucumber/worker.js +18 -1
- package/build/runners/index.js +6 -1
- package/build/runners/oxygen/OxygenWorker.js +60 -3
- package/build/runners/oxygen/index.js +178 -17
- package/build/runners/oxygen/worker.js +25 -2
- package/package.json +8 -8
- package/.babelrc +0 -28
- package/.eslintrc.json +0 -25
- package/.husky/pre-commit +0 -4
- package/CONTRIBUTE.md +0 -1
|
@@ -4,29 +4,42 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
|
|
7
8
|
require("source-map-support/register");
|
|
9
|
+
|
|
8
10
|
var _fs = _interopRequireDefault(require("fs"));
|
|
11
|
+
|
|
9
12
|
var _path = _interopRequireDefault(require("path"));
|
|
13
|
+
|
|
10
14
|
var _moment = _interopRequireDefault(require("moment"));
|
|
15
|
+
|
|
11
16
|
var _ReporterBase = _interopRequireDefault(require("./ReporterBase"));
|
|
17
|
+
|
|
12
18
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
+
|
|
13
20
|
const REPORTS_FOLDER_NAME = 'reports';
|
|
14
21
|
const REPORT_FILE_NAME = 'report';
|
|
22
|
+
|
|
15
23
|
class FileReporterBase extends _ReporterBase.default {
|
|
16
24
|
constructor(options) {
|
|
17
25
|
super(options);
|
|
18
26
|
}
|
|
27
|
+
|
|
19
28
|
createFolderStructureAndFilePath(fileExtension) {
|
|
20
29
|
if (!fileExtension || typeof fileExtension !== 'string' || fileExtension.length == 0) {
|
|
21
30
|
throw new Error('"fileExtension" argument must be specified');
|
|
22
31
|
}
|
|
32
|
+
|
|
23
33
|
if (!fileExtension.startsWith('.')) {
|
|
24
34
|
fileExtension = `.${fileExtension}`;
|
|
25
35
|
}
|
|
36
|
+
|
|
26
37
|
if (!this.options || !this.options.target || !this.options.reporting) {
|
|
27
38
|
throw new Error('FileReporterBase is not properly initialized');
|
|
28
39
|
}
|
|
40
|
+
|
|
29
41
|
let resultsBaseFolder = null;
|
|
42
|
+
|
|
30
43
|
if (this.options.cwd && this.options.reporting.outputDir) {
|
|
31
44
|
if (_path.default.isAbsolute(this.options.reporting.outputDir)) {
|
|
32
45
|
resultsBaseFolder = this.options.reporting.outputDir;
|
|
@@ -34,35 +47,44 @@ class FileReporterBase extends _ReporterBase.default {
|
|
|
34
47
|
resultsBaseFolder = _path.default.resolve(this.options.cwd, this.options.reporting.outputDir);
|
|
35
48
|
}
|
|
36
49
|
} else if (this.options.target) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
50
|
+
resultsBaseFolder = _path.default.join(this.options.target.cwd, REPORTS_FOLDER_NAME);
|
|
51
|
+
} else {
|
|
52
|
+
throw new Error('Error constructing reports path. Either srcFile or outputFolder is required.');
|
|
53
|
+
}
|
|
54
|
+
|
|
41
55
|
this.createFolderIfNotExists(resultsBaseFolder);
|
|
42
56
|
let resultFolderPath = resultsBaseFolder;
|
|
57
|
+
|
|
43
58
|
if (!this.options.reporting.outputDir) {
|
|
44
59
|
const subFolderName = (0, _moment.default)().format('YYYY-MM-DD_HHmmss');
|
|
45
60
|
resultFolderPath = _path.default.join(resultsBaseFolder, subFolderName);
|
|
46
61
|
this.createFolderIfNotExists(resultFolderPath);
|
|
47
62
|
}
|
|
63
|
+
|
|
48
64
|
return _path.default.join(resultFolderPath, `${REPORT_FILE_NAME}${fileExtension}`);
|
|
49
65
|
}
|
|
66
|
+
|
|
50
67
|
createFolderIfNotExists(folderPath) {
|
|
51
68
|
try {
|
|
52
69
|
_fs.default.mkdirSync(folderPath);
|
|
53
70
|
} catch (e) {
|
|
54
71
|
if (e.code != 'EEXIST') throw e;
|
|
55
72
|
}
|
|
73
|
+
|
|
56
74
|
return folderPath;
|
|
57
75
|
}
|
|
76
|
+
|
|
58
77
|
replaceScreenshotsWithFiles(results, folderPath) {
|
|
59
78
|
if (!Array.isArray(results)) {
|
|
60
79
|
throw new Error('Invalid argument "results" - must be an array.');
|
|
61
80
|
}
|
|
81
|
+
|
|
62
82
|
if (!folderPath) {
|
|
63
83
|
throw new Error('"folderPath" argument cannot be null or empty.');
|
|
64
84
|
}
|
|
85
|
+
|
|
65
86
|
const stepsWithScreenshot = [];
|
|
87
|
+
|
|
66
88
|
for (let result of results) {
|
|
67
89
|
for (let suite of result.suites) {
|
|
68
90
|
for (let caze of suite.cases) {
|
|
@@ -70,21 +92,29 @@ class FileReporterBase extends _ReporterBase.default {
|
|
|
70
92
|
}
|
|
71
93
|
}
|
|
72
94
|
}
|
|
95
|
+
|
|
73
96
|
const screenshotFilePrefix = 'screenshot-';
|
|
74
97
|
const screenshotFileSuffix = '.png';
|
|
98
|
+
|
|
75
99
|
for (let i = 0; i < stepsWithScreenshot.length; i++) {
|
|
76
100
|
let filename = screenshotFilePrefix + i + screenshotFileSuffix;
|
|
101
|
+
|
|
77
102
|
let filepath = _path.default.join(folderPath, filename);
|
|
103
|
+
|
|
78
104
|
let step = stepsWithScreenshot[i];
|
|
105
|
+
|
|
79
106
|
_fs.default.writeFileSync(filepath, step.screenshot, 'base64');
|
|
107
|
+
|
|
80
108
|
step.screenshotFile = filename;
|
|
81
109
|
step.screenshot = null;
|
|
82
110
|
}
|
|
83
111
|
}
|
|
112
|
+
|
|
84
113
|
formatTotalDuration(results) {
|
|
85
114
|
if (!Array.isArray(results)) {
|
|
86
115
|
throw new Error('Invalid argument "results" - must be an array.');
|
|
87
116
|
}
|
|
117
|
+
|
|
88
118
|
for (let result of results) {
|
|
89
119
|
for (let suite of result.suites) {
|
|
90
120
|
for (let caze of suite.cases) {
|
|
@@ -95,33 +125,42 @@ class FileReporterBase extends _ReporterBase.default {
|
|
|
95
125
|
}
|
|
96
126
|
}
|
|
97
127
|
}
|
|
128
|
+
|
|
98
129
|
_populateStepsWithScreenshots(steps, stepsWithScreenshot) {
|
|
99
130
|
for (let step of steps) {
|
|
100
131
|
if (step.screenshot) {
|
|
101
132
|
stepsWithScreenshot.push(step);
|
|
102
133
|
}
|
|
134
|
+
|
|
103
135
|
if (step.steps) {
|
|
104
136
|
this._populateStepsWithScreenshots(step.steps, stepsWithScreenshot);
|
|
105
137
|
}
|
|
106
138
|
}
|
|
107
139
|
}
|
|
140
|
+
|
|
108
141
|
formatDuration(miliseconds) {
|
|
109
142
|
var seconds = miliseconds / 1000;
|
|
110
143
|
var hh = Math.floor(seconds / 3600);
|
|
111
144
|
var min = Math.floor((seconds - hh * 3600) / 60);
|
|
112
145
|
var sec = seconds - hh * 3600 - min * 60;
|
|
113
146
|
let result = '';
|
|
147
|
+
|
|
114
148
|
if (hh) {
|
|
115
149
|
result += `${hh.toFixed(0)} hr `;
|
|
116
150
|
}
|
|
151
|
+
|
|
117
152
|
if (min) {
|
|
118
153
|
result += `${min.toFixed(0)} min `;
|
|
119
154
|
}
|
|
155
|
+
|
|
120
156
|
if (sec) {
|
|
121
157
|
result += `${sec.toFixed(0)} sec`;
|
|
122
158
|
}
|
|
159
|
+
|
|
123
160
|
return result;
|
|
124
161
|
}
|
|
162
|
+
|
|
125
163
|
}
|
|
164
|
+
|
|
126
165
|
exports.default = FileReporterBase;
|
|
127
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSRVBPUlRTX0ZPTERFUl9OQU1FIiwiUkVQT1JUX0ZJTEVfTkFNRSIsIkZpbGVSZXBvcnRlckJhc2UiLCJSZXBvcnRlckJhc2UiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aCIsImZpbGVFeHRlbnNpb24iLCJsZW5ndGgiLCJFcnJvciIsInN0YXJ0c1dpdGgiLCJ0YXJnZXQiLCJyZXBvcnRpbmciLCJyZXN1bHRzQmFzZUZvbGRlciIsImN3ZCIsIm91dHB1dERpciIsInBhdGgiLCJpc0Fic29sdXRlIiwicmVzb2x2ZSIsImpvaW4iLCJjcmVhdGVGb2xkZXJJZk5vdEV4aXN0cyIsInJlc3VsdEZvbGRlclBhdGgiLCJzdWJGb2xkZXJOYW1lIiwibW9tZW50IiwiZm9ybWF0IiwiZm9sZGVyUGF0aCIsImZzIiwibWtkaXJTeW5jIiwiZSIsImNvZGUiLCJyZXBsYWNlU2NyZWVuc2hvdHNXaXRoRmlsZXMiLCJyZXN1bHRzIiwiQXJyYXkiLCJpc0FycmF5Iiwic3RlcHNXaXRoU2NyZWVuc2hvdCIsInJlc3VsdCIsInN1aXRlIiwic3VpdGVzIiwiY2F6ZSIsImNhc2VzIiwiX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMiLCJzdGVwcyIsInNjcmVlbnNob3RGaWxlUHJlZml4Iiwic2NyZWVuc2hvdEZpbGVTdWZmaXgiLCJpIiwiZmlsZW5hbWUiLCJmaWxlcGF0aCIsInN0ZXAiLCJ3cml0ZUZpbGVTeW5jIiwic2NyZWVuc2hvdCIsInNjcmVlbnNob3RGaWxlIiwiZm9ybWF0VG90YWxEdXJhdGlvbiIsImR1cmF0aW9uIiwiZm9ybWF0RHVyYXRpb24iLCJwdXNoIiwibWlsaXNlY29uZHMiLCJzZWNvbmRzIiwiaGgiLCJNYXRoIiwiZmxvb3IiLCJtaW4iLCJzZWMiLCJ0b0ZpeGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlcG9ydGVyL0ZpbGVSZXBvcnRlckJhc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBPeHlnZW4gRmlsZSBSZXBvcnRlciBhYnN0cmFjdCBjbGFzc1xyXG4gKi9cclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCBSZXBvcnRlckJhc2UgZnJvbSAnLi9SZXBvcnRlckJhc2UnO1xyXG5cclxuY29uc3QgUkVQT1JUU19GT0xERVJfTkFNRSA9ICdyZXBvcnRzJztcclxuY29uc3QgUkVQT1JUX0ZJTEVfTkFNRSA9ICdyZXBvcnQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZVJlcG9ydGVyQmFzZSBleHRlbmRzIFJlcG9ydGVyQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlRXh0ZW5zaW9uIHx8IHR5cGVvZiBmaWxlRXh0ZW5zaW9uICE9PSAnc3RyaW5nJyB8fCBmaWxlRXh0ZW5zaW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJmaWxlRXh0ZW5zaW9uXCIgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgZmlsZUV4dGVuc2lvbiBkb2Vzbid0IHN0YXJ0IHdpdGggJy4nLCBhZGQgaXQgYXV0b21hdGljYWxseVxyXG4gICAgICAgIGlmICghZmlsZUV4dGVuc2lvbi5zdGFydHNXaXRoKCcuJykpIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGAuJHtmaWxlRXh0ZW5zaW9ufWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zIHx8ICF0aGlzLm9wdGlvbnMudGFyZ2V0IHx8ICF0aGlzLm9wdGlvbnMucmVwb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZVJlcG9ydGVyQmFzZSBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdHNCYXNlRm9sZGVyID0gbnVsbDtcclxuICAgICAgICAvLyBwcm9kdWNlIHJlcG9ydCBhdCB0aGUgc3BlY2lmaWVkIHBhdGguIHdpbGwgb3ZlcndyaXRlIGFueSBleGlzdGluZyByZXBvcnRzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3dkICYmIHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUodGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRzQmFzZUZvbGRlciA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c0Jhc2VGb2xkZXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmN3ZCwgdGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIGRhdGUtdGltZSBmb2xkZXIgc3RydWN0dXJlIGZvciByZXBvcnQgZmlsZXNcclxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHNCYXNlRm9sZGVyID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy50YXJnZXQuY3dkLCBSRVBPUlRTX0ZPTERFUl9OQU1FKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyByZXBvcnRzIHBhdGguIEVpdGhlciBzcmNGaWxlIG9yIG91dHB1dEZvbGRlciBpcyByZXF1aXJlZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3JlYXRlIHJlc3VsdHMgbWFpbiBmb2xkZXIgKHdoZXJlIGFsbCB0aGUgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgdGVzdCBjYXNlIG9yIHRlc3Qgc3VpdGUgYXJlIHN0b3JlZClcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdHNCYXNlRm9sZGVyKTtcclxuICAgICAgICBsZXQgcmVzdWx0Rm9sZGVyUGF0aCA9IHJlc3VsdHNCYXNlRm9sZGVyO1xyXG4gICAgICAgIC8vIGNyZWF0ZSB0aW1lc3RhbXAtYmFzZWQgc3ViIGZvbGRlciBmb3IgdGhlIGN1cnJlbnQgcmVzdWx0cyBpZiBcIm91dHB1dERpclwiIHByb3BlcnR5IGlzIE5PVCBzcGVjaWZpZWRcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlck5hbWUgPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERfSEhtbXNzJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdEZvbGRlclBhdGggPSBwYXRoLmpvaW4ocmVzdWx0c0Jhc2VGb2xkZXIsIHN1YkZvbGRlck5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdEZvbGRlclBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKHJlc3VsdEZvbGRlclBhdGgsIGAke1JFUE9SVF9GSUxFX05BTUV9JHtmaWxlRXh0ZW5zaW9ufWApO1xyXG5cclxuICAgIH1cclxuICAgIGNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKGZvbGRlclBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmcy5ta2RpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIGUuY29kZSAhPSAnRUVYSVNUJyApIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmb2xkZXJQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhdmUgYWxsIHNjcmVlbnNob3RzIHRvIGZpbGVzIGFuZCByZXBsYWNlIHNjcmVlbnNob3QgY29udGVudCB3aXRoIGZpbGUgcGF0aCBpbiB0aGUgcmVzdWx0IEpTT04gYmVmb3JlIHNlcmlhbGl6YXRpb25cclxuICAgIHJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyhyZXN1bHRzLCBmb2xkZXJQYXRoKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBcInJlc3VsdHNcIiAtIG11c3QgYmUgYW4gYXJyYXkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm9sZGVyUGF0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiZm9sZGVyUGF0aFwiIGFyZ3VtZW50IGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGVwc1dpdGhTY3JlZW5zaG90ID0gW107XHJcbiAgICAgICAgLy8gbWFwIHN0ZXBzIHdpdGggbm9uIGVtcHR5IHNjcmVlbnNob3QgYXR0cmlidXRlXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoY2F6ZS5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdEZpbGVQcmVmaXggPSAnc2NyZWVuc2hvdC0nO1xyXG4gICAgICAgIGNvbnN0IHNjcmVlbnNob3RGaWxlU3VmZml4ID0gJy5wbmcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpPHN0ZXBzV2l0aFNjcmVlbnNob3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gc2NyZWVuc2hvdEZpbGVQcmVmaXggKyBpICsgc2NyZWVuc2hvdEZpbGVTdWZmaXg7XHJcbiAgICAgICAgICAgIGxldCBmaWxlcGF0aCA9IHBhdGguam9pbihmb2xkZXJQYXRoLCBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGxldCBzdGVwID0gc3RlcHNXaXRoU2NyZWVuc2hvdFtpXTtcclxuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlcGF0aCwgc3RlcC5zY3JlZW5zaG90LCAnYmFzZTY0Jyk7XHJcbiAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdEZpbGUgPSBmaWxlbmFtZTtcclxuICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbnVsbDsgLy8gZG9uJ3Qgc2F2ZSBiYXNlNjQgc2NyZWVuc2hvdCBkYXRlIHRvIHRoZSBmaWxlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZm9ybWF0IHRvdGFsIGR1cmF0aW9uIGxpa2UgOiA1Ni4yIHNlYyAvIDMxIG1pbiA1OSBzZWMgLyAxIGhyIDMxIG1pbiA1OSBzZWNcclxuICAgIGZvcm1hdFRvdGFsRHVyYXRpb24ocmVzdWx0cykge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCJyZXN1bHRzXCIgLSBtdXN0IGJlIGFuIGFycmF5LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXAgb2YgY2F6ZS5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmR1cmF0aW9uID0gdGhpcy5mb3JtYXREdXJhdGlvbihzdGVwLmR1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyhzdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCkge1xyXG4gICAgICAgIGZvciAobGV0IHN0ZXAgb2Ygc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHN0ZXAuc2NyZWVuc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHNXaXRoU2NyZWVuc2hvdC5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjaGlsZCBzdGVwcyB0b29cclxuICAgICAgICAgICAgaWYgKHN0ZXAuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoc3RlcC5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JtYXREdXJhdGlvbihtaWxpc2Vjb25kcykge1xyXG4gICAgICAgIHZhciBzZWNvbmRzID0gbWlsaXNlY29uZHMgLyAxMDAwO1xyXG4gICAgICAgIHZhciBoaCAgID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCk7XHJcbiAgICAgICAgdmFyIG1pbiA9IE1hdGguZmxvb3IoKHNlY29uZHMgLSAoaGggKiAzNjAwKSkgLyA2MCk7XHJcbiAgICAgICAgdmFyIHNlYyA9IHNlY29uZHMgLSAoaGggKiAzNjAwKSAtIChtaW4gKiA2MCk7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGhoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHtoaC50b0ZpeGVkKDApfSBociBgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHttaW4udG9GaXhlZCgwKX0gbWluIGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGAke3NlYy50b0ZpeGVkKDApfSBzZWNgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFZQTtBQUNBO0FBQ0E7QUFFQTtBQUEwQztBQUUxQyxNQUFNQSxtQkFBbUIs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
|
|
166
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9GaWxlUmVwb3J0ZXJCYXNlLmpzIl0sIm5hbWVzIjpbIlJFUE9SVFNfRk9MREVSX05BTUUiLCJSRVBPUlRfRklMRV9OQU1FIiwiRmlsZVJlcG9ydGVyQmFzZSIsIlJlcG9ydGVyQmFzZSIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImNyZWF0ZUZvbGRlclN0cnVjdHVyZUFuZEZpbGVQYXRoIiwiZmlsZUV4dGVuc2lvbiIsImxlbmd0aCIsIkVycm9yIiwic3RhcnRzV2l0aCIsInRhcmdldCIsInJlcG9ydGluZyIsInJlc3VsdHNCYXNlRm9sZGVyIiwiY3dkIiwib3V0cHV0RGlyIiwicGF0aCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwiam9pbiIsImNyZWF0ZUZvbGRlcklmTm90RXhpc3RzIiwicmVzdWx0Rm9sZGVyUGF0aCIsInN1YkZvbGRlck5hbWUiLCJmb3JtYXQiLCJmb2xkZXJQYXRoIiwiZnMiLCJta2RpclN5bmMiLCJlIiwiY29kZSIsInJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyIsInJlc3VsdHMiLCJBcnJheSIsImlzQXJyYXkiLCJzdGVwc1dpdGhTY3JlZW5zaG90IiwicmVzdWx0Iiwic3VpdGUiLCJzdWl0ZXMiLCJjYXplIiwiY2FzZXMiLCJfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyIsInN0ZXBzIiwic2NyZWVuc2hvdEZpbGVQcmVmaXgiLCJzY3JlZW5zaG90RmlsZVN1ZmZpeCIsImkiLCJmaWxlbmFtZSIsImZpbGVwYXRoIiwic3RlcCIsIndyaXRlRmlsZVN5bmMiLCJzY3JlZW5zaG90Iiwic2NyZWVuc2hvdEZpbGUiLCJmb3JtYXRUb3RhbER1cmF0aW9uIiwiZHVyYXRpb24iLCJmb3JtYXREdXJhdGlvbiIsInB1c2giLCJtaWxpc2Vjb25kcyIsInNlY29uZHMiLCJoaCIsIk1hdGgiLCJmbG9vciIsIm1pbiIsInNlYyIsInRvRml4ZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVlBOztB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ckMsQ0FBVjtBQUNBLFFBQUlJLEdBQUcsR0FBR0wsT0FBTyxHQUFJQyxFQUFFLEdBQUcsSUFBaEIsR0FBeUJHLEdBQUcsR0FBRyxFQUF6QztBQUVBLFFBQUl6QixNQUFNLEdBQUcsRUFBYjs7QUFFQSxRQUFJc0IsRUFBSixFQUFRO0FBQ0p0QixNQUFBQSxNQUFNLElBQUssR0FBRXNCLEVBQUUsQ0FBQ0ssT0FBSCxDQUFXLENBQVgsQ0FBYyxNQUEzQjtBQUNIOztBQUNELFFBQUlGLEdBQUosRUFBUztBQUNMekIsTUFBQUEsTUFBTSxJQUFLLEdBQUV5QixHQUFHLENBQUNFLE9BQUosQ0FBWSxDQUFaLENBQWUsT0FBNUI7QUFDSDs7QUFDRCxRQUFJRCxHQUFKLEVBQVM7QUFDTDFCLE1BQUFBLE1BQU0sSUFBSyxHQUFFMEIsR0FBRyxDQUFDQyxPQUFKLENBQVksQ0FBWixDQUFlLE1BQTVCO0FBQ0g7O0FBRUQsV0FBTzNCLE1BQVA7QUFDSDs7QUE5SHNEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBPeHlnZW4gRmlsZSBSZXBvcnRlciBhYnN0cmFjdCBjbGFzc1xyXG4gKi9cclxuaW1wb3J0IGZzIGZyb20gJ2ZzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbmltcG9ydCBSZXBvcnRlckJhc2UgZnJvbSAnLi9SZXBvcnRlckJhc2UnO1xyXG5cclxuY29uc3QgUkVQT1JUU19GT0xERVJfTkFNRSA9ICdyZXBvcnRzJztcclxuY29uc3QgUkVQT1JUX0ZJTEVfTkFNRSA9ICdyZXBvcnQnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmlsZVJlcG9ydGVyQmFzZSBleHRlbmRzIFJlcG9ydGVyQmFzZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICBjcmVhdGVGb2xkZXJTdHJ1Y3R1cmVBbmRGaWxlUGF0aChmaWxlRXh0ZW5zaW9uKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlRXh0ZW5zaW9uIHx8IHR5cGVvZiBmaWxlRXh0ZW5zaW9uICE9PSAnc3RyaW5nJyB8fCBmaWxlRXh0ZW5zaW9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJmaWxlRXh0ZW5zaW9uXCIgYXJndW1lbnQgbXVzdCBiZSBzcGVjaWZpZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgZmlsZUV4dGVuc2lvbiBkb2Vzbid0IHN0YXJ0IHdpdGggJy4nLCBhZGQgaXQgYXV0b21hdGljYWxseVxyXG4gICAgICAgIGlmICghZmlsZUV4dGVuc2lvbi5zdGFydHNXaXRoKCcuJykpIHtcclxuICAgICAgICAgICAgZmlsZUV4dGVuc2lvbiA9IGAuJHtmaWxlRXh0ZW5zaW9ufWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zIHx8ICF0aGlzLm9wdGlvbnMudGFyZ2V0IHx8ICF0aGlzLm9wdGlvbnMucmVwb3J0aW5nKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmlsZVJlcG9ydGVyQmFzZSBpcyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlc3VsdHNCYXNlRm9sZGVyID0gbnVsbDtcclxuICAgICAgICAvLyBwcm9kdWNlIHJlcG9ydCBhdCB0aGUgc3BlY2lmaWVkIHBhdGguIHdpbGwgb3ZlcndyaXRlIGFueSBleGlzdGluZyByZXBvcnRzLlxyXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuY3dkICYmIHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUodGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHRzQmFzZUZvbGRlciA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0c0Jhc2VGb2xkZXIgPSBwYXRoLnJlc29sdmUodGhpcy5vcHRpb25zLmN3ZCwgdGhpcy5vcHRpb25zLnJlcG9ydGluZy5vdXRwdXREaXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGdlbmVyYXRlIGRhdGUtdGltZSBmb2xkZXIgc3RydWN0dXJlIGZvciByZXBvcnQgZmlsZXNcclxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdHNCYXNlRm9sZGVyID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy50YXJnZXQuY3dkLCBSRVBPUlRTX0ZPTERFUl9OQU1FKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGNvbnN0cnVjdGluZyByZXBvcnRzIHBhdGguIEVpdGhlciBzcmNGaWxlIG9yIG91dHB1dEZvbGRlciBpcyByZXF1aXJlZC4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY3JlYXRlIHJlc3VsdHMgbWFpbiBmb2xkZXIgKHdoZXJlIGFsbCB0aGUgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgdGVzdCBjYXNlIG9yIHRlc3Qgc3VpdGUgYXJlIHN0b3JlZClcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdHNCYXNlRm9sZGVyKTtcclxuICAgICAgICBsZXQgcmVzdWx0Rm9sZGVyUGF0aCA9IHJlc3VsdHNCYXNlRm9sZGVyO1xyXG4gICAgICAgIC8vIGNyZWF0ZSB0aW1lc3RhbXAtYmFzZWQgc3ViIGZvbGRlciBmb3IgdGhlIGN1cnJlbnQgcmVzdWx0cyBpZiBcIm91dHB1dERpclwiIHByb3BlcnR5IGlzIE5PVCBzcGVjaWZpZWRcclxuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5yZXBvcnRpbmcub3V0cHV0RGlyKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YkZvbGRlck5hbWUgPSBtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tRERfSEhtbXNzJyk7XHJcbiAgICAgICAgICAgIHJlc3VsdEZvbGRlclBhdGggPSBwYXRoLmpvaW4ocmVzdWx0c0Jhc2VGb2xkZXIsIHN1YkZvbGRlck5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKHJlc3VsdEZvbGRlclBhdGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0aC5qb2luKHJlc3VsdEZvbGRlclBhdGgsIGAke1JFUE9SVF9GSUxFX05BTUV9JHtmaWxlRXh0ZW5zaW9ufWApO1xyXG5cclxuICAgIH1cclxuICAgIGNyZWF0ZUZvbGRlcklmTm90RXhpc3RzKGZvbGRlclBhdGgpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBmcy5ta2RpclN5bmMoZm9sZGVyUGF0aCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBpZiAoIGUuY29kZSAhPSAnRUVYSVNUJyApIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmb2xkZXJQYXRoO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNhdmUgYWxsIHNjcmVlbnNob3RzIHRvIGZpbGVzIGFuZCByZXBsYWNlIHNjcmVlbnNob3QgY29udGVudCB3aXRoIGZpbGUgcGF0aCBpbiB0aGUgcmVzdWx0IEpTT04gYmVmb3JlIHNlcmlhbGl6YXRpb25cclxuICAgIHJlcGxhY2VTY3JlZW5zaG90c1dpdGhGaWxlcyhyZXN1bHRzLCBmb2xkZXJQYXRoKSB7XHJcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhcmd1bWVudCBcInJlc3VsdHNcIiAtIG11c3QgYmUgYW4gYXJyYXkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm9sZGVyUGF0aCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiZm9sZGVyUGF0aFwiIGFyZ3VtZW50IGNhbm5vdCBiZSBudWxsIG9yIGVtcHR5LicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGVwc1dpdGhTY3JlZW5zaG90ID0gW107XHJcbiAgICAgICAgLy8gbWFwIHN0ZXBzIHdpdGggbm9uIGVtcHR5IHNjcmVlbnNob3QgYXR0cmlidXRlXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoY2F6ZS5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NyZWVuc2hvdEZpbGVQcmVmaXggPSAnc2NyZWVuc2hvdC0nO1xyXG4gICAgICAgIGNvbnN0IHNjcmVlbnNob3RGaWxlU3VmZml4ID0gJy5wbmcnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpPHN0ZXBzV2l0aFNjcmVlbnNob3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVuYW1lID0gc2NyZWVuc2hvdEZpbGVQcmVmaXggKyBpICsgc2NyZWVuc2hvdEZpbGVTdWZmaXg7XHJcbiAgICAgICAgICAgIGxldCBmaWxlcGF0aCA9IHBhdGguam9pbihmb2xkZXJQYXRoLCBmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGxldCBzdGVwID0gc3RlcHNXaXRoU2NyZWVuc2hvdFtpXTtcclxuICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlcGF0aCwgc3RlcC5zY3JlZW5zaG90LCAnYmFzZTY0Jyk7XHJcbiAgICAgICAgICAgIHN0ZXAuc2NyZWVuc2hvdEZpbGUgPSBmaWxlbmFtZTtcclxuICAgICAgICAgICAgc3RlcC5zY3JlZW5zaG90ID0gbnVsbDsgLy8gZG9uJ3Qgc2F2ZSBiYXNlNjQgc2NyZWVuc2hvdCBkYXRlIHRvIHRoZSBmaWxlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZm9ybWF0IHRvdGFsIGR1cmF0aW9uIGxpa2UgOiA1Ni4yIHNlYyAvIDMxIG1pbiA1OSBzZWMgLyAxIGhyIDMxIG1pbiA1OSBzZWNcclxuICAgIGZvcm1hdFRvdGFsRHVyYXRpb24ocmVzdWx0cykge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgXCJyZXN1bHRzXCIgLSBtdXN0IGJlIGFuIGFycmF5LicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgcmVzdWx0IG9mIHJlc3VsdHMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGUgb2YgcmVzdWx0LnN1aXRlcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY2F6ZSBvZiBzdWl0ZS5jYXNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHN0ZXAgb2YgY2F6ZS5zdGVwcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVwLmR1cmF0aW9uID0gdGhpcy5mb3JtYXREdXJhdGlvbihzdGVwLmR1cmF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBfcG9wdWxhdGVTdGVwc1dpdGhTY3JlZW5zaG90cyhzdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCkge1xyXG4gICAgICAgIGZvciAobGV0IHN0ZXAgb2Ygc3RlcHMpIHtcclxuICAgICAgICAgICAgaWYgKHN0ZXAuc2NyZWVuc2hvdCkge1xyXG4gICAgICAgICAgICAgICAgc3RlcHNXaXRoU2NyZWVuc2hvdC5wdXNoKHN0ZXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjaGlsZCBzdGVwcyB0b29cclxuICAgICAgICAgICAgaWYgKHN0ZXAuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVsYXRlU3RlcHNXaXRoU2NyZWVuc2hvdHMoc3RlcC5zdGVwcywgc3RlcHNXaXRoU2NyZWVuc2hvdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JtYXREdXJhdGlvbihtaWxpc2Vjb25kcykge1xyXG4gICAgICAgIHZhciBzZWNvbmRzID0gbWlsaXNlY29uZHMgLyAxMDAwO1xyXG4gICAgICAgIHZhciBoaCAgID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gMzYwMCk7XHJcbiAgICAgICAgdmFyIG1pbiA9IE1hdGguZmxvb3IoKHNlY29uZHMgLSAoaGggKiAzNjAwKSkgLyA2MCk7XHJcbiAgICAgICAgdmFyIHNlYyA9IHNlY29uZHMgLSAoaGggKiAzNjAwKSAtIChtaW4gKiA2MCk7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcclxuXHJcbiAgICAgICAgaWYgKGhoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHtoaC50b0ZpeGVkKDApfSBociBgO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWluKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBgJHttaW4udG9GaXhlZCgwKX0gbWluIGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGAke3NlYy50b0ZpeGVkKDApfSBzZWNgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -4,21 +4,37 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
+
|
|
7
8
|
require("source-map-support/register");
|
|
9
|
+
|
|
8
10
|
var _events = require("events");
|
|
11
|
+
|
|
9
12
|
var _path = _interopRequireDefault(require("path"));
|
|
13
|
+
|
|
10
14
|
var _testResult = _interopRequireDefault(require("../model/test-result"));
|
|
15
|
+
|
|
11
16
|
var _util = _interopRequireDefault(require("../lib/util"));
|
|
17
|
+
|
|
12
18
|
var _when = require("when");
|
|
19
|
+
|
|
13
20
|
var _reporterJson = _interopRequireDefault(require("../ox_reporters/reporter-json"));
|
|
21
|
+
|
|
14
22
|
var _reporterJunit = _interopRequireDefault(require("../ox_reporters/reporter-junit"));
|
|
23
|
+
|
|
15
24
|
var _reporterHtml = _interopRequireDefault(require("../ox_reporters/reporter-html"));
|
|
25
|
+
|
|
16
26
|
var _reporterExcel = _interopRequireDefault(require("../ox_reporters/reporter-excel"));
|
|
27
|
+
|
|
17
28
|
var _reporterPdf = _interopRequireDefault(require("../ox_reporters/reporter-pdf"));
|
|
29
|
+
|
|
18
30
|
var _reporterXml = _interopRequireDefault(require("../ox_reporters/reporter-xml"));
|
|
31
|
+
|
|
19
32
|
var _helper = _interopRequireDefault(require("../errors/helper"));
|
|
33
|
+
|
|
20
34
|
var _status = _interopRequireDefault(require("../model/status"));
|
|
35
|
+
|
|
21
36
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
37
|
+
|
|
22
38
|
const Reporters = {
|
|
23
39
|
json: _reporterJson.default,
|
|
24
40
|
junit: _reporterJunit.default,
|
|
@@ -29,6 +45,7 @@ const Reporters = {
|
|
|
29
45
|
};
|
|
30
46
|
const DEFAULT_TEST_NAME = 'Oxygen Test';
|
|
31
47
|
const DEFAULT_REPORTERS = [];
|
|
48
|
+
|
|
32
49
|
class ReportAggregator extends _events.EventEmitter {
|
|
33
50
|
constructor(options) {
|
|
34
51
|
super();
|
|
@@ -37,52 +54,67 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
37
54
|
this.options = options;
|
|
38
55
|
this.instantiateReporters();
|
|
39
56
|
}
|
|
57
|
+
|
|
40
58
|
getExitCode() {
|
|
41
59
|
let exitCode = 0;
|
|
60
|
+
|
|
42
61
|
if (this.results && Array.isArray(this.results) && this.results.length > 0) {
|
|
43
62
|
const testFailded = this.results.find(item => item.status === 'failed');
|
|
63
|
+
|
|
44
64
|
if (testFailded) {
|
|
45
65
|
exitCode = -1;
|
|
46
66
|
}
|
|
47
67
|
} else {
|
|
48
68
|
exitCode = -1;
|
|
49
69
|
}
|
|
70
|
+
|
|
50
71
|
return exitCode;
|
|
51
72
|
}
|
|
73
|
+
|
|
52
74
|
instantiateReporters() {
|
|
53
75
|
this.reporters = [];
|
|
54
76
|
const generalReportingOpts = this.options.reporting || {};
|
|
77
|
+
|
|
55
78
|
for (let reporter of generalReportingOpts.reporters || DEFAULT_REPORTERS) {
|
|
56
79
|
if (typeof reporter !== 'string' && !Object.prototype.hasOwnProperty.call(reporter, 'name')) {
|
|
57
80
|
continue;
|
|
58
81
|
}
|
|
82
|
+
|
|
59
83
|
const reporterName = typeof reporter === 'string' ? reporter : reporter.name;
|
|
60
84
|
const reporterOpts = typeof reporter === 'object' ? reporter : generalReportingOpts;
|
|
85
|
+
|
|
61
86
|
if (Object.prototype.hasOwnProperty.call(Reporters, reporterName)) {
|
|
62
87
|
this.reporters.push(new Reporters[reporterName](this.options, reporterOpts));
|
|
63
88
|
}
|
|
64
89
|
}
|
|
65
90
|
}
|
|
91
|
+
|
|
66
92
|
generateReports() {
|
|
67
93
|
if (!Array.isArray(this.reporters) || this.reporters.length == 0) {
|
|
68
94
|
return false;
|
|
69
95
|
}
|
|
96
|
+
|
|
70
97
|
for (let reporter of this.reporters) {
|
|
71
98
|
const reportPath = reporter.generate(this.results);
|
|
72
99
|
console.log(`Your report is ready: ${reportPath}`);
|
|
73
100
|
}
|
|
101
|
+
|
|
74
102
|
return true;
|
|
75
103
|
}
|
|
104
|
+
|
|
76
105
|
async waitForResult(rid) {
|
|
77
106
|
if (!rid || !this.runnerEndPromises[rid]) {
|
|
78
107
|
return null;
|
|
79
108
|
}
|
|
109
|
+
|
|
80
110
|
return this.runnerEndPromises[rid];
|
|
81
111
|
}
|
|
112
|
+
|
|
82
113
|
onRunnerStart(rid, opts, caps) {
|
|
83
114
|
if (!rid) {
|
|
84
115
|
throw new Error('"rid" cannot be empty.');
|
|
85
116
|
}
|
|
117
|
+
|
|
86
118
|
const testResult = new _testResult.default();
|
|
87
119
|
testResult.rid = rid;
|
|
88
120
|
testResult.name = opts.name || DEFAULT_TEST_NAME;
|
|
@@ -99,12 +131,15 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
99
131
|
caps
|
|
100
132
|
});
|
|
101
133
|
}
|
|
134
|
+
|
|
102
135
|
onRunnerEnd(rid, finalResult, fatalError) {
|
|
103
136
|
const testResult = this.results.find(x => x.rid === rid);
|
|
137
|
+
|
|
104
138
|
if (testResult) {
|
|
105
139
|
testResult.endTime = _util.default.getTimeStamp();
|
|
106
140
|
testResult.duration = testResult.endTime - testResult.startTime;
|
|
107
141
|
testResult.status = fatalError ? _status.default.FAILED : testResult.suites.some(x => x.status === _status.default.FAILED) ? _status.default.FAILED : _status.default.PASSED;
|
|
142
|
+
|
|
108
143
|
if (testResult.status === _status.default.FAILED) {
|
|
109
144
|
if (fatalError) {
|
|
110
145
|
testResult.failure = fatalError instanceof Error ? _helper.default.getFailureFromError(fatalError) : fatalError;
|
|
@@ -112,9 +147,11 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
112
147
|
testResult.failure = this._getFirstFailure(testResult);
|
|
113
148
|
}
|
|
114
149
|
}
|
|
150
|
+
|
|
115
151
|
if (finalResult && finalResult.capabilities) {
|
|
116
152
|
testResult.capabilities = finalResult.capabilities;
|
|
117
153
|
}
|
|
154
|
+
|
|
118
155
|
if (testResult.failure) {
|
|
119
156
|
if (testResult.failure.type && testResult.failure.location) {
|
|
120
157
|
console.log(`Error: ${testResult.failure.type} at ${testResult.failure.location}.`);
|
|
@@ -124,18 +161,22 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
124
161
|
console.log(`Error: ${testResult.failure}`);
|
|
125
162
|
}
|
|
126
163
|
}
|
|
164
|
+
|
|
127
165
|
console.log(`Test ${rid} has finished with status: ${testResult.status.toUpperCase()}.`);
|
|
128
166
|
}
|
|
167
|
+
|
|
129
168
|
this.emit('runner:end', {
|
|
130
169
|
rid,
|
|
131
170
|
result: testResult
|
|
132
171
|
});
|
|
172
|
+
|
|
133
173
|
if (this.runnerEndPromises[rid]) {
|
|
134
174
|
process.nextTick(() => {
|
|
135
175
|
this.runnerEndPromises[rid].resolve(testResult);
|
|
136
176
|
});
|
|
137
177
|
}
|
|
138
178
|
}
|
|
179
|
+
|
|
139
180
|
onIterationStart(rid, iteration, start) {
|
|
140
181
|
if (iteration) {
|
|
141
182
|
const msg = `${start} Iteration #${iteration} started...`;
|
|
@@ -143,6 +184,7 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
143
184
|
this.onLogEntry(null, 'INFO', msg, 'user');
|
|
144
185
|
}
|
|
145
186
|
}
|
|
187
|
+
|
|
146
188
|
onIterationEnd(rid, result, start) {
|
|
147
189
|
if (result && result.iterationNum && result.status && result.status.toUpperCase) {
|
|
148
190
|
const msg = `${start} Iteration #${result.iterationNum} ended with status: ${result.status.toUpperCase()}.`;
|
|
@@ -150,6 +192,7 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
150
192
|
this.onLogEntry(null, 'INFO', msg, 'user');
|
|
151
193
|
}
|
|
152
194
|
}
|
|
195
|
+
|
|
153
196
|
onSuiteStart(rid, suiteId, suite) {
|
|
154
197
|
console.log(`Suite "${suite.name}" has started...`);
|
|
155
198
|
this.emit('suite:start', {
|
|
@@ -158,11 +201,14 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
158
201
|
suite: suite
|
|
159
202
|
});
|
|
160
203
|
}
|
|
204
|
+
|
|
161
205
|
onSuiteEnd(rid, suiteId, suiteResult) {
|
|
162
206
|
const testResult = this.results.find(x => x.rid === rid);
|
|
207
|
+
|
|
163
208
|
if (!testResult) {
|
|
164
209
|
return;
|
|
165
210
|
}
|
|
211
|
+
|
|
166
212
|
testResult.suites.push(suiteResult);
|
|
167
213
|
console.log(`Suite "${suiteResult.name}" has ended with status: ${suiteResult.status.toUpperCase()}.`);
|
|
168
214
|
this.emit('suite:end', {
|
|
@@ -171,6 +217,7 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
171
217
|
result: suiteResult
|
|
172
218
|
});
|
|
173
219
|
}
|
|
220
|
+
|
|
174
221
|
onCaseStart(rid, suiteId, caseId, caseDef) {
|
|
175
222
|
console.log(`- Case "${caseDef.name}" has started...`);
|
|
176
223
|
this.emit('case:start', {
|
|
@@ -180,6 +227,7 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
180
227
|
case: caseDef
|
|
181
228
|
});
|
|
182
229
|
}
|
|
230
|
+
|
|
183
231
|
onCaseEnd(rid, suiteId, caseId, caseResult) {
|
|
184
232
|
console.log(`- Case "${caseResult.name}" has ended with status: ${caseResult.status.toUpperCase()}.`);
|
|
185
233
|
this.emit('case:end', {
|
|
@@ -189,17 +237,22 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
189
237
|
result: caseResult
|
|
190
238
|
});
|
|
191
239
|
}
|
|
240
|
+
|
|
192
241
|
onStepStart(rid, step) {
|
|
193
242
|
console.log(` - Step "${step.name}" has started...`);
|
|
243
|
+
|
|
194
244
|
if (this.options && this.options.rootPath && this.options.framework && this.options.framework === 'cucumber') {
|
|
195
245
|
const fullPath = _path.default.resolve(this.options.rootPath, step.location);
|
|
246
|
+
|
|
196
247
|
step.location = fullPath + ':1';
|
|
197
248
|
}
|
|
249
|
+
|
|
198
250
|
this.emit('step:start', {
|
|
199
251
|
rid,
|
|
200
252
|
step: step
|
|
201
253
|
});
|
|
202
254
|
}
|
|
255
|
+
|
|
203
256
|
onStepEnd(rid, stepResult) {
|
|
204
257
|
const status = stepResult.status.toUpperCase();
|
|
205
258
|
const duration = stepResult.duration ? (stepResult.duration / 1000).toFixed(2) : 0;
|
|
@@ -209,6 +262,7 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
209
262
|
step: stepResult
|
|
210
263
|
});
|
|
211
264
|
}
|
|
265
|
+
|
|
212
266
|
onLogEntry(time, level, msg, src = null) {
|
|
213
267
|
this.emit('log', {
|
|
214
268
|
level,
|
|
@@ -217,36 +271,46 @@ class ReportAggregator extends _events.EventEmitter {
|
|
|
217
271
|
src
|
|
218
272
|
});
|
|
219
273
|
}
|
|
274
|
+
|
|
220
275
|
_getFirstFailure(testResult) {
|
|
221
276
|
if (testResult.status === _status.default.FAILED) {
|
|
222
277
|
if (testResult.failure) {
|
|
223
278
|
return testResult.failure;
|
|
224
279
|
}
|
|
280
|
+
|
|
225
281
|
for (let suiteResult of testResult.suites) {
|
|
226
282
|
if (suiteResult.status !== _status.default.FAILED) {
|
|
227
283
|
continue;
|
|
228
284
|
}
|
|
285
|
+
|
|
229
286
|
if (suiteResult.failure) {
|
|
230
287
|
return suiteResult.failure;
|
|
231
288
|
}
|
|
289
|
+
|
|
232
290
|
for (let caseResult of suiteResult.cases) {
|
|
233
291
|
if (suiteResult.status !== _status.default.FAILED) {
|
|
234
292
|
continue;
|
|
235
293
|
}
|
|
294
|
+
|
|
236
295
|
if (caseResult.failure) {
|
|
237
296
|
return caseResult.failure;
|
|
238
297
|
}
|
|
298
|
+
|
|
239
299
|
for (let stepResult of caseResult.steps) {
|
|
240
300
|
if (stepResult.status !== _status.default.FAILED) {
|
|
241
301
|
continue;
|
|
242
302
|
}
|
|
303
|
+
|
|
243
304
|
return stepResult.failure || null;
|
|
244
305
|
}
|
|
245
306
|
}
|
|
246
307
|
}
|
|
247
308
|
}
|
|
309
|
+
|
|
248
310
|
return null;
|
|
249
311
|
}
|
|
312
|
+
|
|
250
313
|
}
|
|
314
|
+
|
|
251
315
|
exports.default = ReportAggregator;
|
|
252
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZXBvcnRlcnMiLCJqc29uIiwiSnNvblJlcG9ydGVyIiwianVuaXQiLCJKVW5pdFJlcG9ydGVyIiwiaHRtbCIsIkh0bWxSZXBvcnRlciIsImV4Y2VsIiwiRXhjZWxSZXBvcnRlciIsInBkZiIsIlBkZlJlcG9ydGVyIiwieG1sIiwiWG1sUmVwb3J0ZXIiLCJERUZBVUxUX1RFU1RfTkFNRSIsIkRFRkFVTFRfUkVQT1JURVJTIiwiUmVwb3J0QWdncmVnYXRvciIsIkV2ZW50RW1pdHRlciIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsInJlc3VsdHMiLCJydW5uZXJFbmRQcm9taXNlcyIsImluc3RhbnRpYXRlUmVwb3J0ZXJzIiwiZ2V0RXhpdENvZGUiLCJleGl0Q29kZSIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInRlc3RGYWlsZGVkIiwiZmluZCIsIml0ZW0iLCJzdGF0dXMiLCJyZXBvcnRlcnMiLCJnZW5lcmFsUmVwb3J0aW5nT3B0cyIsInJlcG9ydGluZyIsInJlcG9ydGVyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVwb3J0ZXJOYW1lIiwibmFtZSIsInJlcG9ydGVyT3B0cyIsInB1c2giLCJnZW5lcmF0ZVJlcG9ydHMiLCJyZXBvcnRQYXRoIiwiZ2VuZXJhdGUiLCJjb25zb2xlIiwibG9nIiwid2FpdEZvclJlc3VsdCIsInJpZCIsIm9uUnVubmVyU3RhcnQiLCJvcHRzIiwiY2FwcyIsIkVycm9yIiwidGVzdFJlc3VsdCIsIlRlc3RSZXN1bHQiLCJzdGFydFRpbWUiLCJveHV0aWwiLCJnZXRUaW1lU3RhbXAiLCJjYXBhYmlsaXRpZXMiLCJlbnZpcm9ubWVudCIsImVudlZhcnMiLCJkZWZlciIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJTdGF0dXMiLCJGQUlMRUQiLCJzdWl0ZXMiLCJzb21lIiwiUEFTU0VEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJvbkl0ZXJhdGlvblN0YXJ0IiwiaXRlcmF0aW9uIiwic3RhcnQiLCJtc2ciLCJvbkxvZ0VudHJ5Iiwib25JdGVyYXRpb25FbmQiLCJpdGVyYXRpb25OdW0iLCJvblN1aXRlU3RhcnQiLCJzdWl0ZUlkIiwic3VpdGUiLCJvblN1aXRlRW5kIiwic3VpdGVSZXN1bHQiLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjYXNlIiwib25DYXNlRW5kIiwiY2FzZVJlc3VsdCIsIm9uU3RlcFN0YXJ0Iiwic3RlcCIsInJvb3RQYXRoIiwiZnJhbWV3b3JrIiwiZnVsbFBhdGgiLCJwYXRoIiwib25TdGVwRW5kIiwic3RlcFJlc3VsdCIsInRvRml4ZWQiLCJ0aW1lIiwibGV2ZWwiLCJzcmMiLCJjYXNlcyIsInN0ZXBzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlcG9ydGVyL1JlcG9ydEFnZ3JlZ2F0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBSZXBvcnQgYWdncmVnYXRvclxyXG4gKi9cclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBUZXN0UmVzdWx0IGZyb20gJy4uL21vZGVsL3Rlc3QtcmVzdWx0JztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcblxyXG4vLyBpbXBvcnQgYWxsIGJ1aWx0LWluIHJlcG9ydGVyc1xyXG5pbXBvcnQgSnNvblJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1qc29uJztcclxuaW1wb3J0IEpVbml0UmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWp1bml0JztcclxuaW1wb3J0IEh0bWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItaHRtbCc7XHJcbmltcG9ydCBFeGNlbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1leGNlbCc7XHJcbmltcG9ydCBQZGZSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItcGRmJztcclxuaW1wb3J0IFhtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci14bWwnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTdGF0dXMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzJztcclxuXHJcbmNvbnN0IFJlcG9ydGVycyA9IHtcclxuICAgIGpzb246IEpzb25SZXBvcnRlcixcclxuICAgIGp1bml0OiBKVW5pdFJlcG9ydGVyLFxyXG4gICAgaHRtbDogSHRtbFJlcG9ydGVyLFxyXG4gICAgZXhjZWw6IEV4Y2VsUmVwb3J0ZXIsXHJcbiAgICBwZGY6IFBkZlJlcG9ydGVyLFxyXG4gICAgeG1sOiBYbWxSZXBvcnRlclxyXG59O1xyXG5cclxuY29uc3QgREVGQVVMVF9URVNUX05BTUUgPSAnT3h5Z2VuIFRlc3QnO1xyXG5jb25zdCBERUZBVUxUX1JFUE9SVEVSUyA9IFtdO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwb3J0QWdncmVnYXRvciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyByZXN1bHRzIGhhc2ggdGFibGUgYmFzZWQgb24gcnVubmVyIGlkIGtleVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIC8vIGEgaGFzaCBsaXN0IG9mIHJ1bm5lckVuZCBldmVudCBwcm9taXNlcywga2V5ZWQgYnkgcnVubmVyIGlkXHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5pbnN0YW50aWF0ZVJlcG9ydGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEV4aXRDb2RlKCkge1xyXG4gICAgICAgIGxldCBleGl0Q29kZSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICYmXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSAmJlxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0RmFpbGRlZCA9IHRoaXMucmVzdWx0cy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRlc3RGYWlsZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0Q29kZSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJyb2tlbiA/XHJcbiAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zdGFudGlhdGVSZXBvcnRlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRlcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBnZW5lcmFsUmVwb3J0aW5nT3B0cyA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcgfHwge307XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgZ2VuZXJhbFJlcG9ydGluZ09wdHMucmVwb3J0ZXJzIHx8IERFRkFVTFRfUkVQT1JURVJTKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVwb3J0ZXIgIT09ICdzdHJpbmcnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVwb3J0ZXIsICduYW1lJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSByZXBvcnRlcnMgdGhhdCBkbyBub3QgaGF2ZSAnbmFtZScgcHJvcGVydHkgYXMgaXQncyBlc3NlbnRpYWwgdG8gbG9hZCB0aGUgY29ycmVzcG9uZGluZyBSZXBvcnRlciBjbGFzc1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyTmFtZSA9IHR5cGVvZiByZXBvcnRlciA9PT0gJ3N0cmluZycgPyByZXBvcnRlciA6IHJlcG9ydGVyLm5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyT3B0cyA9IHR5cGVvZiByZXBvcnRlciA9PT0gJ29iamVjdCcgPyByZXBvcnRlciA6IGdlbmVyYWxSZXBvcnRpbmdPcHRzO1xyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSZXBvcnRlcnMsIHJlcG9ydGVyTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0ZXJzLnB1c2gobmV3IFJlcG9ydGVyc1tyZXBvcnRlck5hbWVdKHRoaXMub3B0aW9ucywgcmVwb3J0ZXJPcHRzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiB0aGlzLnJlcG9ydGVycykge1xyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRQYXRoID0gcmVwb3J0ZXIuZ2VuZXJhdGUodGhpcy5yZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lclN0YXJ0KHJpZCwgb3B0cywgY2Fwcykge1xyXG4gICAgICAgIGlmICghcmlkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyaWRcIiBjYW5ub3QgYmUgZW1wdHkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBuZXcgVGVzdFJlc3VsdCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQucmlkID0gcmlkO1xyXG4gICAgICAgIHRlc3RSZXN1bHQubmFtZSA9IG9wdHMubmFtZSB8fCBERUZBVUxUX1RFU1RfTkFNRTtcclxuICAgICAgICB0ZXN0UmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGNhcHM7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5lbnZpcm9ubWVudCA9IG9wdHMuZW52VmFycyB8fCB7fTtcclxuICAgICAgICB0ZXN0UmVzdWx0Lm9wdGlvbnMgPSBvcHRzO1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBwcm9taXNlIGZvciBsYXRlciB0byBiZSByZXNvbHZlZCBvbiBydW5uZXI6ZW5kIGV2ZW50XHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdID0gZGVmZXIoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjpzdGFydCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBvcHRzLFxyXG4gICAgICAgICAgICBjYXBzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SdW5uZXJFbmQocmlkLCBmaW5hbFJlc3VsdCwgZmF0YWxFcnJvcikge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHgucmlkID09PSByaWQpO1xyXG4gICAgICAgIGlmICh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRlc3RSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5kdXJhdGlvbiA9IHRlc3RSZXN1bHQuZW5kVGltZSAtIHRlc3RSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LnN0YXR1cyA9IGZhdGFsRXJyb3IgPyBTdGF0dXMuRkFJTEVEIDogKHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkpID8gU3RhdHVzLkZBSUxFRCA6IFN0YXR1cy5QQVNTRUQ7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhdGFsRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBpZiBmYXRhbEVycm9yIGlzIG5vdCBpbmhlcml0ZWQgZnJvbSBFcnJvciBjbGFzcyB0aGVuIHdlIGFscmVhZHkgZ290IE94eWdlbiBGYWlsdXJlIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuZmFpbHVyZSA9IGZhdGFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZmF0YWxFcnJvcikgOiBmYXRhbEVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gdGhpcy5fZ2V0Rmlyc3RGYWlsdXJlKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChmaW5hbFJlc3VsdCAmJiBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gZmluYWxSZXN1bHQuY2FwYWJpbGl0aWVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSAmJiB0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlLnR5cGV9IGF0ICR7dGVzdFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9ufS5gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdFJlc3VsdC5mYWlsdXJlLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlLnR5cGV9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ZXN0UmVzdWx0LmZhaWx1cmUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIGZpbmlzaGVkIHdpdGggc3RhdHVzOiAke3Rlc3RSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgcmVzdWx0OiB0ZXN0UmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0pIHtcclxuICAgICAgICAgICAgLy8gY2FsbGluZyBuZXh0VGljaygpIHdpbGwgaGVscCB1cyB0byBpbnN1cmUgdGhhdCB3ZSByZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGVtaXQoJ3J1bm5lcjplbmQnKSBoYXMgY29tcGxldGVkXHJcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdLnJlc29sdmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkl0ZXJhdGlvblN0YXJ0KHJpZCwgaXRlcmF0aW9uLCBzdGFydCkge1xyXG4gICAgICAgIGlmIChpdGVyYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtpdGVyYXRpb259IHN0YXJ0ZWQuLi5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uRW5kKHJpZCwgcmVzdWx0LCBzdGFydCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lml0ZXJhdGlvbk51bSAmJiByZXN1bHQuc3RhdHVzICYmIHJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtyZXN1bHQuaXRlcmF0aW9uTnVtfSBlbmRlZCB3aXRoIHN0YXR1czogJHtyZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TdWl0ZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlOiBzdWl0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlRW5kKHJpZCwgc3VpdGVJZCwgc3VpdGVSZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcclxuICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXN0UmVzdWx0LnN1aXRlcy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke3N1aXRlUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHN1aXRlUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZVN0YXJ0KHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBjYXNlRGVmKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZURlZi5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgY2FzZTogY2FzZURlZixcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhc2VFbmQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VSZXN1bHQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke2Nhc2VSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGNhc2VSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwU3RhcnQocmlkLCBzdGVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwRW5kKHJpZCwgc3RlcFJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0ZXBSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXBSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgaW4gJHtkdXJhdGlvbn1zIHdpdGggc3RhdHVzOiAke3N0YXR1c30uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTG9nRW50cnkodGltZSwgbGV2ZWwsIG1zZywgc3JjID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywge1xyXG4gICAgICAgICAgICBsZXZlbCwgbXNnLCB0aW1lLCBzcmNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGZhaWx1cmUgb2JqZWN0IGluIG9uZSBvZiB0ZXN0IHJlc3VsdCdzIGVudGl0aWVzLiBcclxuICAgICAqIEBwYXJhbSB7VGVzdFJlc3VsdH0gdGVzdFJlc3VsdCBcclxuICAgICAqL1xyXG4gICAgX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlUmVzdWx0IG9mIHN1aXRlUmVzdWx0LmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGVwUmVzdWx0IG9mIGNhc2VSZXN1bHQuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAg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
|
|
316
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvcnRlci9SZXBvcnRBZ2dyZWdhdG9yLmpzIl0sIm5hbWVzIjpbIlJlcG9ydGVycyIsImpzb24iLCJKc29uUmVwb3J0ZXIiLCJqdW5pdCIsIkpVbml0UmVwb3J0ZXIiLCJodG1sIiwiSHRtbFJlcG9ydGVyIiwiZXhjZWwiLCJFeGNlbFJlcG9ydGVyIiwicGRmIiwiUGRmUmVwb3J0ZXIiLCJ4bWwiLCJYbWxSZXBvcnRlciIsIkRFRkFVTFRfVEVTVF9OQU1FIiwiREVGQVVMVF9SRVBPUlRFUlMiLCJSZXBvcnRBZ2dyZWdhdG9yIiwiRXZlbnRFbWl0dGVyIiwiY29uc3RydWN0b3IiLCJvcHRpb25zIiwicmVzdWx0cyIsInJ1bm5lckVuZFByb21pc2VzIiwiaW5zdGFudGlhdGVSZXBvcnRlcnMiLCJnZXRFeGl0Q29kZSIsImV4aXRDb2RlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidGVzdEZhaWxkZWQiLCJmaW5kIiwiaXRlbSIsInN0YXR1cyIsInJlcG9ydGVycyIsImdlbmVyYWxSZXBvcnRpbmdPcHRzIiwicmVwb3J0aW5nIiwicmVwb3J0ZXIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJyZXBvcnRlck5hbWUiLCJuYW1lIiwicmVwb3J0ZXJPcHRzIiwicHVzaCIsImdlbmVyYXRlUmVwb3J0cyIsInJlcG9ydFBhdGgiLCJnZW5lcmF0ZSIsImNvbnNvbGUiLCJsb2ciLCJ3YWl0Rm9yUmVzdWx0IiwicmlkIiwib25SdW5uZXJTdGFydCIsIm9wdHMiLCJjYXBzIiwiRXJyb3IiLCJ0ZXN0UmVzdWx0IiwiVGVzdFJlc3VsdCIsInN0YXJ0VGltZSIsIm94dXRpbCIsImdldFRpbWVTdGFtcCIsImNhcGFiaWxpdGllcyIsImVudmlyb25tZW50IiwiZW52VmFycyIsImVtaXQiLCJvblJ1bm5lckVuZCIsImZpbmFsUmVzdWx0IiwiZmF0YWxFcnJvciIsIngiLCJlbmRUaW1lIiwiZHVyYXRpb24iLCJTdGF0dXMiLCJGQUlMRUQiLCJzdWl0ZXMiLCJzb21lIiwiUEFTU0VEIiwiZmFpbHVyZSIsImVycm9ySGVscGVyIiwiZ2V0RmFpbHVyZUZyb21FcnJvciIsIl9nZXRGaXJzdEZhaWx1cmUiLCJ0eXBlIiwibG9jYXRpb24iLCJ0b1VwcGVyQ2FzZSIsInJlc3VsdCIsInByb2Nlc3MiLCJuZXh0VGljayIsInJlc29sdmUiLCJvbkl0ZXJhdGlvblN0YXJ0IiwiaXRlcmF0aW9uIiwic3RhcnQiLCJtc2ciLCJvbkxvZ0VudHJ5Iiwib25JdGVyYXRpb25FbmQiLCJpdGVyYXRpb25OdW0iLCJvblN1aXRlU3RhcnQiLCJzdWl0ZUlkIiwic3VpdGUiLCJvblN1aXRlRW5kIiwic3VpdGVSZXN1bHQiLCJvbkNhc2VTdGFydCIsImNhc2VJZCIsImNhc2VEZWYiLCJjYXNlIiwib25DYXNlRW5kIiwiY2FzZVJlc3VsdCIsIm9uU3RlcFN0YXJ0Iiwic3RlcCIsInJvb3RQYXRoIiwiZnJhbWV3b3JrIiwiZnVsbFBhdGgiLCJwYXRoIiwib25TdGVwRW5kIiwic3RlcFJlc3VsdCIsInRvRml4ZWQiLCJ0aW1lIiwibGV2ZWwiLCJzcmMiLCJjYXNlcyIsInN0ZXBzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLFNBQVMsR0FBRztBQUNkQyxFQUFBQSxJQUFJLEVBQUVDLHFCQURRO0FBRWRDLEVBQUFBLEtBQUssRUFBRUMsc0JBRk87QUFHZEMsRUFBQUEsSUFBSSxFQUFFQyxxQkFIUTtBQUlkQyxFQUFBQSxLQUFLLEVBQUVDLHNCQUpPO0FBS2RDLEVBQUFBLEdBQUcsRUFBRUMsb0JBTFM7QUFNZEMsRUFBQUEsR0FBRyxFQUFFQztBQU5TLENBQWxCO0FBU0EsTUFBTUMsaUJBQWlCLEdBQUcsYUFBMUI7QUFDQSxNQUFNQyxpQkFBaUIsR0FBRyxFQUExQjs7QUFFZSxNQUFNQyxn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Q2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKlxyXG4gKiBSZXBvcnQgYWdncmVnYXRvclxyXG4gKi9cclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcclxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XHJcbmltcG9ydCBUZXN0UmVzdWx0IGZyb20gJy4uL21vZGVsL3Rlc3QtcmVzdWx0JztcclxuaW1wb3J0IG94dXRpbCBmcm9tICcuLi9saWIvdXRpbCc7XHJcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnd2hlbic7XHJcblxyXG4vLyBpbXBvcnQgYWxsIGJ1aWx0LWluIHJlcG9ydGVyc1xyXG5pbXBvcnQgSnNvblJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1qc29uJztcclxuaW1wb3J0IEpVbml0UmVwb3J0ZXIgZnJvbSAnLi4vb3hfcmVwb3J0ZXJzL3JlcG9ydGVyLWp1bml0JztcclxuaW1wb3J0IEh0bWxSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItaHRtbCc7XHJcbmltcG9ydCBFeGNlbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci1leGNlbCc7XHJcbmltcG9ydCBQZGZSZXBvcnRlciBmcm9tICcuLi9veF9yZXBvcnRlcnMvcmVwb3J0ZXItcGRmJztcclxuaW1wb3J0IFhtbFJlcG9ydGVyIGZyb20gJy4uL294X3JlcG9ydGVycy9yZXBvcnRlci14bWwnO1xyXG5pbXBvcnQgZXJyb3JIZWxwZXIgZnJvbSAnLi4vZXJyb3JzL2hlbHBlcic7XHJcbmltcG9ydCBTdGF0dXMgZnJvbSAnLi4vbW9kZWwvc3RhdHVzJztcclxuXHJcbmNvbnN0IFJlcG9ydGVycyA9IHtcclxuICAgIGpzb246IEpzb25SZXBvcnRlcixcclxuICAgIGp1bml0OiBKVW5pdFJlcG9ydGVyLFxyXG4gICAgaHRtbDogSHRtbFJlcG9ydGVyLFxyXG4gICAgZXhjZWw6IEV4Y2VsUmVwb3J0ZXIsXHJcbiAgICBwZGY6IFBkZlJlcG9ydGVyLFxyXG4gICAgeG1sOiBYbWxSZXBvcnRlclxyXG59O1xyXG5cclxuY29uc3QgREVGQVVMVF9URVNUX05BTUUgPSAnT3h5Z2VuIFRlc3QnO1xyXG5jb25zdCBERUZBVUxUX1JFUE9SVEVSUyA9IFtdO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVwb3J0QWdncmVnYXRvciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICAvLyByZXN1bHRzIGhhc2ggdGFibGUgYmFzZWQgb24gcnVubmVyIGlkIGtleVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIC8vIGEgaGFzaCBsaXN0IG9mIHJ1bm5lckVuZCBldmVudCBwcm9taXNlcywga2V5ZWQgYnkgcnVubmVyIGlkXHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlcyA9IHt9O1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5pbnN0YW50aWF0ZVJlcG9ydGVycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEV4aXRDb2RlKCkge1xyXG4gICAgICAgIGxldCBleGl0Q29kZSA9IDA7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzICYmXHJcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5yZXN1bHRzKSAmJlxyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXN0RmFpbGRlZCA9IHRoaXMucmVzdWx0cy5maW5kKChpdGVtKSA9PiBpdGVtLnN0YXR1cyA9PT0gJ2ZhaWxlZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRlc3RGYWlsZGVkKSB7XHJcbiAgICAgICAgICAgICAgICBleGl0Q29kZSA9IC0xO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGJyb2tlbiA/XHJcbiAgICAgICAgICAgIGV4aXRDb2RlID0gLTE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZXhpdENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zdGFudGlhdGVSZXBvcnRlcnMoKSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRlcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBnZW5lcmFsUmVwb3J0aW5nT3B0cyA9IHRoaXMub3B0aW9ucy5yZXBvcnRpbmcgfHwge307XHJcbiAgICAgICAgZm9yIChsZXQgcmVwb3J0ZXIgb2YgZ2VuZXJhbFJlcG9ydGluZ09wdHMucmVwb3J0ZXJzIHx8IERFRkFVTFRfUkVQT1JURVJTKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVwb3J0ZXIgIT09ICdzdHJpbmcnICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVwb3J0ZXIsICduYW1lJykpIHtcclxuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSByZXBvcnRlcnMgdGhhdCBkbyBub3QgaGF2ZSAnbmFtZScgcHJvcGVydHkgYXMgaXQncyBlc3NlbnRpYWwgdG8gbG9hZCB0aGUgY29ycmVzcG9uZGluZyBSZXBvcnRlciBjbGFzc1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyTmFtZSA9IHR5cGVvZiByZXBvcnRlciA9PT0gJ3N0cmluZycgPyByZXBvcnRlciA6IHJlcG9ydGVyLm5hbWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcG9ydGVyT3B0cyA9IHR5cGVvZiByZXBvcnRlciA9PT0gJ29iamVjdCcgPyByZXBvcnRlciA6IGdlbmVyYWxSZXBvcnRpbmdPcHRzO1xyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSZXBvcnRlcnMsIHJlcG9ydGVyTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0ZXJzLnB1c2gobmV3IFJlcG9ydGVyc1tyZXBvcnRlck5hbWVdKHRoaXMub3B0aW9ucywgcmVwb3J0ZXJPcHRzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2VuZXJhdGVSZXBvcnRzKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnJlcG9ydGVycykgfHwgdGhpcy5yZXBvcnRlcnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCByZXBvcnRlciBvZiB0aGlzLnJlcG9ydGVycykge1xyXG4gICAgICAgICAgICBjb25zdCByZXBvcnRQYXRoID0gcmVwb3J0ZXIuZ2VuZXJhdGUodGhpcy5yZXN1bHRzKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFlvdXIgcmVwb3J0IGlzIHJlYWR5OiAke3JlcG9ydFBhdGh9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JSZXN1bHQocmlkKSB7XHJcbiAgICAgICAgaWYgKCFyaWQgfHwgIXRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucnVubmVyRW5kUHJvbWlzZXNbcmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBvblJ1bm5lclN0YXJ0KHJpZCwgb3B0cywgY2Fwcykge1xyXG4gICAgICAgIGlmICghcmlkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignXCJyaWRcIiBjYW5ub3QgYmUgZW1wdHkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSBuZXcgVGVzdFJlc3VsdCgpO1xyXG4gICAgICAgIHRlc3RSZXN1bHQucmlkID0gcmlkO1xyXG4gICAgICAgIHRlc3RSZXN1bHQubmFtZSA9IG9wdHMubmFtZSB8fCBERUZBVUxUX1RFU1RfTkFNRTtcclxuICAgICAgICB0ZXN0UmVzdWx0LnN0YXJ0VGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICB0ZXN0UmVzdWx0LmNhcGFiaWxpdGllcyA9IGNhcHM7XHJcbiAgICAgICAgdGVzdFJlc3VsdC5lbnZpcm9ubWVudCA9IG9wdHMuZW52VmFycyB8fCB7fTtcclxuICAgICAgICB0ZXN0UmVzdWx0Lm9wdGlvbnMgPSBvcHRzO1xyXG4gICAgICAgIHRoaXMucmVzdWx0cy5wdXNoKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgIC8vIGNyZWF0ZSBhIG5ldyBwcm9taXNlIGZvciBsYXRlciB0byBiZSByZXNvbHZlZCBvbiBydW5uZXI6ZW5kIGV2ZW50XHJcbiAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdID0gZGVmZXIoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjpzdGFydCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBvcHRzLFxyXG4gICAgICAgICAgICBjYXBzXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25SdW5uZXJFbmQocmlkLCBmaW5hbFJlc3VsdCwgZmF0YWxFcnJvcikge1xyXG4gICAgICAgIGNvbnN0IHRlc3RSZXN1bHQgPSB0aGlzLnJlc3VsdHMuZmluZCh4ID0+IHgucmlkID09PSByaWQpO1xyXG4gICAgICAgIGlmICh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgICAgIHRlc3RSZXN1bHQuZW5kVGltZSA9IG94dXRpbC5nZXRUaW1lU3RhbXAoKTtcclxuICAgICAgICAgICAgdGVzdFJlc3VsdC5kdXJhdGlvbiA9IHRlc3RSZXN1bHQuZW5kVGltZSAtIHRlc3RSZXN1bHQuc3RhcnRUaW1lO1xyXG4gICAgICAgICAgICB0ZXN0UmVzdWx0LnN0YXR1cyA9IGZhdGFsRXJyb3IgPyBTdGF0dXMuRkFJTEVEIDogKHRlc3RSZXN1bHQuc3VpdGVzLnNvbWUoeCA9PiB4LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkpID8gU3RhdHVzLkZBSUxFRCA6IFN0YXR1cy5QQVNTRUQ7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LnN0YXR1cyA9PT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZhdGFsRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhc3N1bWUgdGhhdCBpZiBmYXRhbEVycm9yIGlzIG5vdCBpbmhlcml0ZWQgZnJvbSBFcnJvciBjbGFzcyB0aGVuIHdlIGFscmVhZHkgZ290IE94eWdlbiBGYWlsdXJlIG9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuZmFpbHVyZSA9IGZhdGFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9ySGVscGVyLmdldEZhaWx1cmVGcm9tRXJyb3IoZmF0YWxFcnJvcikgOiBmYXRhbEVycm9yO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVzdFJlc3VsdC5mYWlsdXJlID0gdGhpcy5fZ2V0Rmlyc3RGYWlsdXJlKHRlc3RSZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChmaW5hbFJlc3VsdCAmJiBmaW5hbFJlc3VsdC5jYXBhYmlsaXRpZXMpIHtcclxuICAgICAgICAgICAgICAgIHRlc3RSZXN1bHQuY2FwYWJpbGl0aWVzID0gZmluYWxSZXN1bHQuY2FwYWJpbGl0aWVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUudHlwZSAmJiB0ZXN0UmVzdWx0LmZhaWx1cmUubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlLnR5cGV9IGF0ICR7dGVzdFJlc3VsdC5mYWlsdXJlLmxvY2F0aW9ufS5gKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGVzdFJlc3VsdC5mYWlsdXJlLnR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3I6ICR7dGVzdFJlc3VsdC5mYWlsdXJlLnR5cGV9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0ZXN0UmVzdWx0LmZhaWx1cmUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yOiAke3Rlc3RSZXN1bHQuZmFpbHVyZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgVGVzdCAke3JpZH0gaGFzIGZpbmlzaGVkIHdpdGggc3RhdHVzOiAke3Rlc3RSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVtaXQoJ3J1bm5lcjplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgcmVzdWx0OiB0ZXN0UmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnJ1bm5lckVuZFByb21pc2VzW3JpZF0pIHtcclxuICAgICAgICAgICAgLy8gY2FsbGluZyBuZXh0VGljaygpIHdpbGwgaGVscCB1cyB0byBpbnN1cmUgdGhhdCB3ZSByZXNvbHZlIHRoZSBwcm9taXNlIGFmdGVyIGVtaXQoJ3J1bm5lcjplbmQnKSBoYXMgY29tcGxldGVkXHJcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ydW5uZXJFbmRQcm9taXNlc1tyaWRdLnJlc29sdmUodGVzdFJlc3VsdCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkl0ZXJhdGlvblN0YXJ0KHJpZCwgaXRlcmF0aW9uLCBzdGFydCkge1xyXG4gICAgICAgIGlmIChpdGVyYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtpdGVyYXRpb259IHN0YXJ0ZWQuLi5gO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xyXG4gICAgICAgICAgICB0aGlzLm9uTG9nRW50cnkobnVsbCwgJ0lORk8nLCBtc2csICd1c2VyJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uSXRlcmF0aW9uRW5kKHJpZCwgcmVzdWx0LCBzdGFydCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0Lml0ZXJhdGlvbk51bSAmJiByZXN1bHQuc3RhdHVzICYmIHJlc3VsdC5zdGF0dXMudG9VcHBlckNhc2UpIHtcclxuICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7c3RhcnR9IEl0ZXJhdGlvbiAjJHtyZXN1bHQuaXRlcmF0aW9uTnVtfSBlbmRlZCB3aXRoIHN0YXR1czogJHtyZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmA7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XHJcbiAgICAgICAgICAgIHRoaXMub25Mb2dFbnRyeShudWxsLCAnSU5GTycsIG1zZywgJ3VzZXInKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TdWl0ZVN0YXJ0KHJpZCwgc3VpdGVJZCwgc3VpdGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQ6IHN1aXRlSWQsXHJcbiAgICAgICAgICAgIHN1aXRlOiBzdWl0ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN1aXRlRW5kKHJpZCwgc3VpdGVJZCwgc3VpdGVSZXN1bHQpIHtcclxuICAgICAgICBjb25zdCB0ZXN0UmVzdWx0ID0gdGhpcy5yZXN1bHRzLmZpbmQoeCA9PiB4LnJpZCA9PT0gcmlkKTtcclxuICAgICAgICBpZiAoIXRlc3RSZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0ZXN0UmVzdWx0LnN1aXRlcy5wdXNoKHN1aXRlUmVzdWx0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgU3VpdGUgXCIke3N1aXRlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke3N1aXRlUmVzdWx0LnN0YXR1cy50b1VwcGVyQ2FzZSgpfS5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoJ3N1aXRlOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdWl0ZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IHN1aXRlUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2FzZVN0YXJ0KHJpZCwgc3VpdGVJZCwgY2FzZUlkLCBjYXNlRGVmKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYC0gQ2FzZSBcIiR7Y2FzZURlZi5uYW1lfVwiIGhhcyBzdGFydGVkLi4uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdjYXNlOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN1aXRlSWQsXHJcbiAgICAgICAgICAgIGNhc2VJZCxcclxuICAgICAgICAgICAgY2FzZTogY2FzZURlZixcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNhc2VFbmQocmlkLCBzdWl0ZUlkLCBjYXNlSWQsIGNhc2VSZXN1bHQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhgLSBDYXNlIFwiJHtjYXNlUmVzdWx0Lm5hbWV9XCIgaGFzIGVuZGVkIHdpdGggc3RhdHVzOiAke2Nhc2VSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCl9LmApO1xyXG4gICAgICAgIHRoaXMuZW1pdCgnY2FzZTplbmQnLCB7XHJcbiAgICAgICAgICAgIHJpZCxcclxuICAgICAgICAgICAgc3VpdGVJZCxcclxuICAgICAgICAgICAgY2FzZUlkLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGNhc2VSZXN1bHQsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwU3RhcnQocmlkLCBzdGVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coYCAgLSBTdGVwIFwiJHtzdGVwLm5hbWV9XCIgaGFzIHN0YXJ0ZWQuLi5gKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucm9vdFBhdGggJiYgdGhpcy5vcHRpb25zLmZyYW1ld29yayAmJiB0aGlzLm9wdGlvbnMuZnJhbWV3b3JrID09PSAnY3VjdW1iZXInKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMub3B0aW9ucy5yb290UGF0aCwgc3RlcC5sb2NhdGlvbik7XHJcbiAgICAgICAgICAgIHN0ZXAubG9jYXRpb24gPSBmdWxsUGF0aCsnOjEnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOnN0YXJ0Jywge1xyXG4gICAgICAgICAgICByaWQsXHJcbiAgICAgICAgICAgIHN0ZXA6IHN0ZXAsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TdGVwRW5kKHJpZCwgc3RlcFJlc3VsdCkge1xyXG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHN0ZXBSZXN1bHQuc3RhdHVzLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBzdGVwUmVzdWx0LmR1cmF0aW9uID8gKHN0ZXBSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDIpIDogMDtcclxuICAgICAgICBjb25zb2xlLmxvZyhgICAtIFN0ZXAgXCIke3N0ZXBSZXN1bHQubmFtZX1cIiBoYXMgZW5kZWQgaW4gJHtkdXJhdGlvbn1zIHdpdGggc3RhdHVzOiAke3N0YXR1c30uYCk7XHJcbiAgICAgICAgdGhpcy5lbWl0KCdzdGVwOmVuZCcsIHtcclxuICAgICAgICAgICAgcmlkLFxyXG4gICAgICAgICAgICBzdGVwOiBzdGVwUmVzdWx0LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTG9nRW50cnkodGltZSwgbGV2ZWwsIG1zZywgc3JjID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZW1pdCgnbG9nJywge1xyXG4gICAgICAgICAgICBsZXZlbCwgbXNnLCB0aW1lLCBzcmNcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGZhaWx1cmUgb2JqZWN0IGluIG9uZSBvZiB0ZXN0IHJlc3VsdCdzIGVudGl0aWVzLiBcclxuICAgICAqIEBwYXJhbSB7VGVzdFJlc3VsdH0gdGVzdFJlc3VsdCBcclxuICAgICAqL1xyXG4gICAgX2dldEZpcnN0RmFpbHVyZSh0ZXN0UmVzdWx0KSB7XHJcbiAgICAgICAgaWYgKHRlc3RSZXN1bHQuc3RhdHVzID09PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgIGlmICh0ZXN0UmVzdWx0LmZhaWx1cmUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0UmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgc3VpdGVSZXN1bHQgb2YgdGVzdFJlc3VsdC5zdWl0ZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5zdGF0dXMgIT09IFN0YXR1cy5GQUlMRUQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdWl0ZVJlc3VsdC5mYWlsdXJlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlUmVzdWx0LmZhaWx1cmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjYXNlUmVzdWx0IG9mIHN1aXRlUmVzdWx0LmNhc2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1aXRlUmVzdWx0LnN0YXR1cyAhPT0gU3RhdHVzLkZBSUxFRCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhc2VSZXN1bHQuZmFpbHVyZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzZVJlc3VsdC5mYWlsdXJlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdGVwUmVzdWx0IG9mIGNhc2VSZXN1bHQuc3RlcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ZXBSZXN1bHQuc3RhdHVzICE9PSBTdGF0dXMuRkFJTEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RlcFJlc3VsdC5mYWlsdXJlIHx8IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG59Il19
|