@eclipse-che/che-e2e 7.74.0-dev-1d09cb7 → 7.74.0-dev-aace77a
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/.eslintignore +10 -0
- package/.eslintrc.js +197 -0
- package/.prettierignore +10 -0
- package/.prettierrc.json +10 -0
- package/CODE_STYLE.md +144 -0
- package/README.md +47 -47
- package/configs/inversify.config.ts +39 -14
- package/configs/inversify.types.ts +44 -30
- package/configs/mocharc.ts +21 -24
- package/constants/API_TEST_CONSTANTS.ts +67 -0
- package/constants/BASE_TEST_CONSTANTS.ts +80 -0
- package/constants/CHROME_DRIVER_CONSTANTS.ts +42 -0
- package/constants/FACTORY_TEST_CONSTANTS.ts +61 -0
- package/constants/MONACO_CONSTANTS.ts +25 -0
- package/constants/OAUTH_CONSTANTS.ts +67 -0
- package/constants/PLUGIN_TEST_CONSTANTS.ts +15 -0
- package/constants/REPORTER_CONSTANTS.ts +53 -0
- package/constants/TIMEOUT_CONSTANTS.ts +131 -0
- package/dist/configs/inversify.config.js +36 -9
- package/dist/configs/inversify.config.js.map +1 -1
- package/dist/configs/inversify.types.js +19 -5
- package/dist/configs/inversify.types.js.map +1 -1
- package/dist/configs/mocharc.js +13 -16
- package/dist/configs/mocharc.js.map +1 -1
- package/dist/constants/{APITestConstants.js → API_TEST_CONSTANTS.js} +12 -12
- package/dist/constants/API_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/{BaseTestConstants.js → BASE_TEST_CONSTANTS.js} +16 -16
- package/dist/constants/BASE_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/CHROME_DRIVER_CONSTANTS.js +36 -0
- package/dist/constants/CHROME_DRIVER_CONSTANTS.js.map +1 -0
- package/dist/constants/{FactoryTestConstants.js → FACTORY_TEST_CONSTANTS.js} +14 -13
- package/dist/constants/FACTORY_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/{MonacoConstants.js → MONACO_CONSTANTS.js} +7 -7
- package/dist/constants/MONACO_CONSTANTS.js.map +1 -0
- package/dist/constants/{OAuthConstants.js → OAUTH_CONSTANTS.js} +14 -14
- package/dist/constants/OAUTH_CONSTANTS.js.map +1 -0
- package/dist/constants/{PluginsTestConstants.js → PLUGIN_TEST_CONSTANTS.js} +7 -7
- package/dist/constants/PLUGIN_TEST_CONSTANTS.js.map +1 -0
- package/dist/constants/{ReporterConstants.js → REPORTER_CONSTANTS.js} +12 -12
- package/dist/constants/REPORTER_CONSTANTS.js.map +1 -0
- package/dist/constants/{TimeoutConstants.js → TIMEOUT_CONSTANTS.js} +24 -24
- package/dist/constants/TIMEOUT_CONSTANTS.js.map +1 -0
- package/dist/driver/ChromeDriver.js +12 -22
- package/dist/driver/ChromeDriver.js.map +1 -1
- package/dist/index.js +18 -12
- package/dist/index.js.map +1 -1
- package/dist/pageobjects/dashboard/CreateWorkspace.js +15 -15
- package/dist/pageobjects/dashboard/CreateWorkspace.js.map +1 -1
- package/dist/pageobjects/dashboard/Dashboard.js +20 -21
- package/dist/pageobjects/dashboard/Dashboard.js.map +1 -1
- package/dist/pageobjects/dashboard/Workspaces.js +55 -60
- package/dist/pageobjects/dashboard/Workspaces.js.map +1 -1
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js +58 -48
- package/dist/pageobjects/dashboard/workspace-details/WorkspaceDetails.js.map +1 -1
- package/dist/pageobjects/git-providers/OauthPage.js +22 -20
- package/dist/pageobjects/git-providers/OauthPage.js.map +1 -1
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js +26 -12
- package/dist/pageobjects/ide/CheCodeLocatorLoader.js.map +1 -1
- package/dist/pageobjects/login/interfaces/ICheLoginPage.js +2 -2
- package/dist/pageobjects/login/interfaces/IOcpLoginPage.js +2 -2
- package/dist/pageobjects/login/kubernetes/DexLoginPage.js +14 -14
- package/dist/pageobjects/login/kubernetes/DexLoginPage.js.map +1 -1
- package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js +7 -7
- package/dist/pageobjects/login/kubernetes/KubernetesLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/OcpLoginPage.js +24 -28
- package/dist/pageobjects/login/openshift/OcpLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js +13 -16
- package/dist/pageobjects/login/openshift/OcpRedHatLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/OcpUserLoginPage.js +9 -9
- package/dist/pageobjects/login/openshift/OcpUserLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/RedHatLoginPage.js +19 -23
- package/dist/pageobjects/login/openshift/RedHatLoginPage.js.map +1 -1
- package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js +20 -19
- package/dist/pageobjects/login/openshift/RegularUserOcpCheLoginPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpApplicationPage.js +11 -11
- package/dist/pageobjects/openshift/OcpApplicationPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpImportFromGitPage.js +24 -24
- package/dist/pageobjects/openshift/OcpImportFromGitPage.js.map +1 -1
- package/dist/pageobjects/openshift/OcpMainPage.js +30 -30
- package/dist/pageobjects/openshift/OcpMainPage.js.map +1 -1
- package/dist/specs/MochaHooks.js +33 -27
- package/dist/specs/MochaHooks.js.map +1 -1
- package/dist/specs/SmokeTest.spec.js +17 -17
- package/dist/specs/SmokeTest.spec.js.map +1 -1
- package/dist/specs/api/ContainerOverridesAPI.spec.js +8 -6
- package/dist/specs/api/ContainerOverridesAPI.spec.js.map +1 -1
- package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js +27 -24
- package/dist/specs/api/DevfileAcceptanceTestAPI.spec.js.map +1 -1
- package/dist/specs/api/EmptyWorkspaceAPI.spec.js +17 -17
- package/dist/specs/api/EmptyWorkspaceAPI.spec.js.map +1 -1
- package/dist/specs/api/PodOverridesAPI.spec.js +10 -8
- package/dist/specs/api/PodOverridesAPI.spec.js.map +1 -1
- package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js +10 -10
- package/dist/specs/dashboard-samples/EmptyWorkspace.spec.js.map +1 -1
- package/dist/specs/dashboard-samples/Quarkus.spec.js +13 -13
- package/dist/specs/dashboard-samples/Quarkus.spec.js.map +1 -1
- package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js +52 -52
- package/dist/specs/dashboard-samples/RecommendedExtensions.spec.js.map +1 -1
- package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js +23 -19
- package/dist/specs/devconsole-intergration/DevConsoleIntegration.spec.js.map +1 -1
- package/dist/specs/factory/Factory.spec.js +38 -41
- package/dist/specs/factory/Factory.spec.js.map +1 -1
- package/dist/specs/factory/NoSetupRepoFactory.spec.js +52 -50
- package/dist/specs/factory/NoSetupRepoFactory.spec.js.map +1 -1
- package/dist/specs/factory/RefusedOAuthFactory.spec.js +49 -51
- package/dist/specs/factory/RefusedOAuthFactory.spec.js.map +1 -1
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js +45 -42
- package/dist/specs/miscellaneous/PredefinedNamespace.spec.js.map +1 -1
- package/dist/tests-library/LoginTests.js +13 -13
- package/dist/tests-library/LoginTests.js.map +1 -1
- package/dist/tests-library/ProjectAndFileTests.js +9 -7
- package/dist/tests-library/ProjectAndFileTests.js.map +1 -1
- package/dist/tests-library/WorkspaceHandlingTests.js +22 -19
- package/dist/tests-library/WorkspaceHandlingTests.js.map +1 -1
- package/dist/utils/BrowserTabsUtil.js +21 -21
- package/dist/utils/BrowserTabsUtil.js.map +1 -1
- package/dist/utils/CheReporter.js +91 -65
- package/dist/utils/CheReporter.js.map +1 -1
- package/dist/utils/DevWorkspaceConfigurationHelper.js +34 -15
- package/dist/utils/DevWorkspaceConfigurationHelper.js.map +1 -1
- package/dist/utils/DevfilesRegistryHelper.js +34 -18
- package/dist/utils/DevfilesRegistryHelper.js.map +1 -1
- package/dist/utils/DriverHelper.js +73 -68
- package/dist/utils/DriverHelper.js.map +1 -1
- package/dist/utils/IContextParams.js +12 -0
- package/dist/utils/IContextParams.js.map +1 -0
- package/dist/utils/IKubernetesCommandLineToolsExecutor.js +3 -0
- package/dist/utils/IKubernetesCommandLineToolsExecutor.js.map +1 -0
- package/dist/utils/KubernetesCommandLineToolsExecutor.js +146 -107
- package/dist/utils/KubernetesCommandLineToolsExecutor.js.map +1 -1
- package/dist/utils/Logger.js +18 -19
- package/dist/utils/Logger.js.map +1 -1
- package/dist/utils/ScreenCatcher.js +26 -16
- package/dist/utils/ScreenCatcher.js.map +1 -1
- package/dist/utils/ShellExecutor.js +29 -9
- package/dist/utils/ShellExecutor.js.map +1 -1
- package/dist/utils/StringUtil.js +19 -9
- package/dist/utils/StringUtil.js.map +1 -1
- package/dist/utils/request-handlers/CheApiRequestHandler.js +29 -29
- package/dist/utils/request-handlers/CheApiRequestHandler.js.map +1 -1
- package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js +12 -8
- package/dist/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.js.map +1 -1
- package/dist/utils/request-handlers/headers/IAuthorizationHeaderHandler.js +2 -2
- package/dist/utils/workspace/ApiUrlResolver.js +5 -5
- package/dist/utils/workspace/ApiUrlResolver.js.map +1 -1
- package/dist/utils/workspace/ITestWorkspaceUtil.js +2 -2
- package/dist/utils/workspace/TestWorkspaceUtil.js +25 -23
- package/dist/utils/workspace/TestWorkspaceUtil.js.map +1 -1
- package/dist/utils/workspace/WorkspaceStatus.js +2 -2
- package/dist/utils/workspace/WorkspaceStatus.js.map +1 -1
- package/driver/ChromeDriver.ts +45 -58
- package/driver/IDriver.ts +3 -3
- package/index.ts +11 -9
- package/package.json +59 -49
- package/pageobjects/dashboard/CreateWorkspace.ts +65 -55
- package/pageobjects/dashboard/Dashboard.ts +100 -100
- package/pageobjects/dashboard/Workspaces.ts +210 -186
- package/pageobjects/dashboard/workspace-details/WorkspaceDetails.ts +153 -131
- package/pageobjects/git-providers/OauthPage.ts +177 -166
- package/pageobjects/ide/CheCodeLocatorLoader.ts +51 -46
- package/pageobjects/login/interfaces/ICheLoginPage.ts +3 -3
- package/pageobjects/login/interfaces/IOcpLoginPage.ts +3 -3
- package/pageobjects/login/kubernetes/DexLoginPage.ts +31 -30
- package/pageobjects/login/kubernetes/KubernetesLoginPage.ts +15 -14
- package/pageobjects/login/openshift/OcpLoginPage.ts +51 -56
- package/pageobjects/login/openshift/OcpRedHatLoginPage.ts +27 -27
- package/pageobjects/login/openshift/OcpUserLoginPage.ts +15 -18
- package/pageobjects/login/openshift/RedHatLoginPage.ts +49 -46
- package/pageobjects/login/openshift/RegularUserOcpCheLoginPage.ts +43 -34
- package/pageobjects/openshift/OcpApplicationPage.ts +21 -19
- package/pageobjects/openshift/OcpImportFromGitPage.ts +68 -68
- package/pageobjects/openshift/OcpMainPage.ts +69 -69
- package/specs/MochaHooks.ts +59 -52
- package/specs/SmokeTest.spec.ts +47 -45
- package/specs/api/ContainerOverridesAPI.spec.ts +39 -26
- package/specs/api/DevfileAcceptanceTestAPI.spec.ts +110 -97
- package/specs/api/EmptyWorkspaceAPI.spec.ts +67 -58
- package/specs/api/PodOverridesAPI.spec.ts +48 -34
- package/specs/dashboard-samples/EmptyWorkspace.spec.ts +36 -36
- package/specs/dashboard-samples/Quarkus.spec.ts +41 -40
- package/specs/dashboard-samples/RecommendedExtensions.spec.ts +202 -183
- package/specs/devconsole-intergration/DevConsoleIntegration.spec.ts +85 -75
- package/specs/factory/Factory.spec.ts +184 -178
- package/specs/factory/NoSetupRepoFactory.spec.ts +233 -219
- package/specs/factory/RefusedOAuthFactory.spec.ts +223 -211
- package/specs/miscellaneous/PredefinedNamespace.spec.ts +70 -64
- package/tests-library/LoginTests.ts +34 -32
- package/tests-library/ProjectAndFileTests.ts +21 -18
- package/tests-library/WorkspaceHandlingTests.ts +98 -89
- package/tsconfig.json +15 -15
- package/utils/BrowserTabsUtil.ts +78 -74
- package/utils/CheReporter.ts +159 -157
- package/utils/DevWorkspaceConfigurationHelper.ts +63 -69
- package/utils/DevfilesRegistryHelper.ts +71 -57
- package/utils/DriverHelper.ts +728 -700
- package/utils/IContextParams.ts +26 -0
- package/utils/IKubernetesCommandLineToolsExecutor.ts +42 -0
- package/utils/KubernetesCommandLineToolsExecutor.ts +231 -183
- package/utils/Logger.ts +102 -125
- package/utils/ScreenCatcher.ts +57 -46
- package/utils/ShellExecutor.ts +23 -12
- package/utils/StringUtil.ts +49 -36
- package/utils/request-handlers/CheApiRequestHandler.ts +91 -88
- package/utils/request-handlers/headers/CheMultiuserAuthorizationHeaderHandler.ts +32 -21
- package/utils/request-handlers/headers/IAuthorizationHeaderHandler.ts +3 -3
- package/utils/workspace/ApiUrlResolver.ts +31 -26
- package/utils/workspace/ITestWorkspaceUtil.ts +31 -31
- package/utils/workspace/TestWorkspaceUtil.ts +152 -145
- package/utils/workspace/WorkspaceStatus.ts +5 -5
- package/constants/APITestConstants.ts +0 -57
- package/constants/BaseTestConstants.ts +0 -68
- package/constants/ChromeDriverConstants.ts +0 -46
- package/constants/FactoryTestConstants.ts +0 -51
- package/constants/MonacoConstants.ts +0 -22
- package/constants/OAuthConstants.ts +0 -57
- package/constants/PluginsTestConstants.ts +0 -15
- package/constants/ReporterConstants.ts +0 -45
- package/constants/TimeoutConstants.ts +0 -113
- package/dist/constants/APITestConstants.js.map +0 -1
- package/dist/constants/BaseTestConstants.js.map +0 -1
- package/dist/constants/ChromeDriverConstants.js +0 -44
- package/dist/constants/ChromeDriverConstants.js.map +0 -1
- package/dist/constants/FactoryTestConstants.js.map +0 -1
- package/dist/constants/MonacoConstants.js.map +0 -1
- package/dist/constants/OAuthConstants.js.map +0 -1
- package/dist/constants/PluginsTestConstants.js.map +0 -1
- package/dist/constants/ReporterConstants.js.map +0 -1
- package/dist/constants/TimeoutConstants.js.map +0 -1
- package/tslint.json +0 -126
package/utils/Logger.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
1
|
+
/** *******************************************************************
|
|
2
|
+
* copyright (c) 2019-2023 Red Hat, Inc.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made
|
|
5
5
|
* available under the terms of the Eclipse Public License 2.0
|
|
@@ -7,137 +7,114 @@
|
|
|
7
7
|
*
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
**********************************************************************/
|
|
10
|
-
import {
|
|
10
|
+
import { REPORTER_CONSTANTS } from '../constants/REPORTER_CONSTANTS';
|
|
11
11
|
|
|
12
12
|
export abstract class Logger {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
logLevelSymbol,
|
|
24
|
-
`${this.getFullMessage(callerInfo, text)}`
|
|
25
|
-
);
|
|
26
|
-
}
|
|
13
|
+
/**
|
|
14
|
+
* uses for logging of fatal errors.
|
|
15
|
+
* @param text log text
|
|
16
|
+
* @param indentLevel log level
|
|
17
|
+
*/
|
|
18
|
+
static error(text: string = '', indentLevel: number = 1): void {
|
|
19
|
+
const callerInfo: string = this.getCallerInfo();
|
|
20
|
+
const logLevelSymbol: string = '[ERROR] ';
|
|
21
|
+
this.logText(indentLevel, logLevelSymbol, `${this.getFullMessage(callerInfo, text)}`);
|
|
22
|
+
}
|
|
27
23
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
logLevelSymbol,
|
|
42
|
-
`${this.getFullMessage(callerInfo, text)}`
|
|
43
|
-
);
|
|
44
|
-
}
|
|
24
|
+
/**
|
|
25
|
+
* uses for logging of recoverable errors and general warnings.
|
|
26
|
+
* @param text log text
|
|
27
|
+
* @param indentLevel log level
|
|
28
|
+
*/
|
|
29
|
+
static warn(text: string = '', indentLevel: number = 1): void {
|
|
30
|
+
if (REPORTER_CONSTANTS.TS_SELENIUM_LOG_LEVEL === 'ERROR') {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const callerInfo: string = this.getCallerInfo();
|
|
34
|
+
const logLevelSymbol: string = '[WARN] ';
|
|
35
|
+
this.logText(indentLevel, logLevelSymbol, `${this.getFullMessage(callerInfo, text)}`);
|
|
36
|
+
}
|
|
45
37
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
const logLevelSymbol: string = '• ';
|
|
60
|
-
this.logText(
|
|
61
|
-
indentLevel,
|
|
62
|
-
logLevelSymbol,
|
|
63
|
-
`${this.getFullMessage(callerInfo, text)}`
|
|
64
|
-
);
|
|
65
|
-
}
|
|
38
|
+
/**
|
|
39
|
+
* uses for logging of the public methods of the pageobjects.
|
|
40
|
+
* @param text log text
|
|
41
|
+
* @param indentLevel log level
|
|
42
|
+
*/
|
|
43
|
+
static info(text: string = '', indentLevel: number = 3): void {
|
|
44
|
+
if (REPORTER_CONSTANTS.TS_SELENIUM_LOG_LEVEL === 'ERROR' || REPORTER_CONSTANTS.TS_SELENIUM_LOG_LEVEL === 'WARN') {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const callerInfo: string = this.getCallerInfo();
|
|
48
|
+
const logLevelSymbol: string = '• ';
|
|
49
|
+
this.logText(indentLevel, logLevelSymbol, `${this.getFullMessage(callerInfo, text)}`);
|
|
50
|
+
}
|
|
66
51
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
logLevelSymbol,
|
|
85
|
-
`${this.getFullMessage(callerInfo, text)}`
|
|
86
|
-
);
|
|
87
|
-
}
|
|
52
|
+
/**
|
|
53
|
+
* uses for logging of the public methods of the pageobjects.
|
|
54
|
+
* @param text log text
|
|
55
|
+
* @param indentLevel log level
|
|
56
|
+
*/
|
|
57
|
+
static debug(text: string = '', indentLevel: number = 5): void {
|
|
58
|
+
if (
|
|
59
|
+
REPORTER_CONSTANTS.TS_SELENIUM_LOG_LEVEL === 'ERROR' ||
|
|
60
|
+
REPORTER_CONSTANTS.TS_SELENIUM_LOG_LEVEL === 'WARN' ||
|
|
61
|
+
REPORTER_CONSTANTS.TS_SELENIUM_LOG_LEVEL === 'INFO'
|
|
62
|
+
) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const callerInfo: string = this.getCallerInfo();
|
|
66
|
+
const logLevelSymbol: string = '▼ ';
|
|
67
|
+
this.logText(indentLevel, logLevelSymbol, `${this.getFullMessage(callerInfo, text)}`);
|
|
68
|
+
}
|
|
88
69
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
logLevelSymbol,
|
|
109
|
-
`${this.getFullMessage(callerInfo, text)}`
|
|
110
|
-
);
|
|
111
|
-
}
|
|
70
|
+
/**
|
|
71
|
+
* uses for logging of the public methods of the {@link DriverHelper} or
|
|
72
|
+
* private methods inside of pageobjects.
|
|
73
|
+
* @param text log text
|
|
74
|
+
* @param indentLevel log level
|
|
75
|
+
*/
|
|
76
|
+
static trace(text: string = '', indentLevel: number = 6): void {
|
|
77
|
+
if (
|
|
78
|
+
REPORTER_CONSTANTS.TS_SELENIUM_LOG_LEVEL === 'ERROR' ||
|
|
79
|
+
REPORTER_CONSTANTS.TS_SELENIUM_LOG_LEVEL === 'WARN' ||
|
|
80
|
+
REPORTER_CONSTANTS.TS_SELENIUM_LOG_LEVEL === 'INFO' ||
|
|
81
|
+
REPORTER_CONSTANTS.TS_SELENIUM_LOG_LEVEL === 'DEBUG'
|
|
82
|
+
) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const callerInfo: string = this.getCallerInfo();
|
|
86
|
+
const logLevelSymbol: string = '‣ ';
|
|
87
|
+
this.logText(indentLevel, logLevelSymbol, `${this.getFullMessage(callerInfo, text)}`);
|
|
88
|
+
}
|
|
112
89
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
90
|
+
private static getFullMessage(callerInfo: string, text: string): string {
|
|
91
|
+
return `${callerInfo}${this.separator(text, callerInfo)}${text}`;
|
|
92
|
+
}
|
|
116
93
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
94
|
+
private static logText(messageIndentationLevel: number, logLevelSymbol: string, text: string): void {
|
|
95
|
+
if (text) {
|
|
96
|
+
// start group for every level
|
|
97
|
+
for (let i: number = 0; i < messageIndentationLevel; i++) {
|
|
98
|
+
console.group();
|
|
99
|
+
}
|
|
100
|
+
// print the trimmed text
|
|
101
|
+
// if multiline, the message should be properly padded
|
|
102
|
+
console.log(logLevelSymbol + text);
|
|
103
|
+
// end group for every level
|
|
104
|
+
for (let i: number = 0; i < messageIndentationLevel; i++) {
|
|
105
|
+
console.groupEnd();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
132
109
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
110
|
+
private static getCallerInfo(): string {
|
|
111
|
+
const e: Error = new Error();
|
|
112
|
+
const stack: string[] = e.stack ? e.stack.split('\n') : [];
|
|
113
|
+
// " at functionName ( ..." => "functionName"
|
|
114
|
+
return stack[3].includes('.<anonymous') ? '' : stack[3].replace(/^\s+at\s+(.+?)\s.+/g, '$1');
|
|
115
|
+
}
|
|
139
116
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
117
|
+
private static separator(text: string, caller: string): string {
|
|
118
|
+
return text ? (caller ? ' - ' : '') : '';
|
|
119
|
+
}
|
|
143
120
|
}
|
package/utils/ScreenCatcher.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
1
|
+
/** *******************************************************************
|
|
2
|
+
* copyright (c) 2021-2023 Red Hat, Inc.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made
|
|
5
5
|
* available under the terms of the Eclipse Public License 2.0
|
|
@@ -14,61 +14,72 @@ import { CLASSES } from '../configs/inversify.types';
|
|
|
14
14
|
import { DriverHelper } from './DriverHelper';
|
|
15
15
|
import { error } from 'selenium-webdriver';
|
|
16
16
|
import { StringUtil } from './StringUtil';
|
|
17
|
-
import {
|
|
17
|
+
import { REPORTER_CONSTANTS } from '../constants/REPORTER_CONSTANTS';
|
|
18
18
|
|
|
19
19
|
@injectable()
|
|
20
20
|
export class ScreenCatcher {
|
|
21
|
-
|
|
21
|
+
constructor(
|
|
22
|
+
@inject(CLASSES.DriverHelper)
|
|
23
|
+
private readonly driverHelper: DriverHelper
|
|
24
|
+
) {}
|
|
22
25
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
async catchMethodScreen(methodName: string, methodIndex: number, screenshotIndex: number): Promise<void> {
|
|
27
|
+
const executionScreenCastDir: string = `${REPORTER_CONSTANTS.TS_SELENIUM_REPORT_FOLDER}/executionScreencast`;
|
|
28
|
+
const executionScreenCastErrorsDir: string = `${REPORTER_CONSTANTS.TS_SELENIUM_REPORT_FOLDER}/executionScreencastErrors`;
|
|
29
|
+
const formattedMethodIndex: string = new Intl.NumberFormat('en-us', {
|
|
30
|
+
minimumIntegerDigits: 3
|
|
31
|
+
}).format(methodIndex);
|
|
32
|
+
const formattedScreenshotIndex: string = new Intl.NumberFormat('en-us', { minimumIntegerDigits: 5 })
|
|
33
|
+
.format(screenshotIndex)
|
|
34
|
+
.replace(/,/g, '');
|
|
28
35
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
36
|
+
if (!fs.existsSync(REPORTER_CONSTANTS.TS_SELENIUM_REPORT_FOLDER)) {
|
|
37
|
+
fs.mkdirSync(REPORTER_CONSTANTS.TS_SELENIUM_REPORT_FOLDER);
|
|
38
|
+
}
|
|
32
39
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
if (!fs.existsSync(executionScreenCastDir)) {
|
|
41
|
+
fs.mkdirSync(executionScreenCastDir);
|
|
42
|
+
}
|
|
36
43
|
|
|
37
|
-
|
|
38
|
-
|
|
44
|
+
const date: Date = new Date();
|
|
45
|
+
const timeStr: string =
|
|
46
|
+
date.toLocaleTimeString('en-us', { hour12: false }) +
|
|
47
|
+
'.' +
|
|
48
|
+
new Intl.NumberFormat('en-us', { minimumIntegerDigits: 3 }).format(date.getMilliseconds());
|
|
39
49
|
|
|
40
|
-
|
|
50
|
+
const screenshotPath: string = `${executionScreenCastDir}/${formattedMethodIndex}-${formattedScreenshotIndex}--(${StringUtil.sanitizeTitle(
|
|
51
|
+
timeStr
|
|
52
|
+
)})_${StringUtil.sanitizeTitle(methodName)}.png`;
|
|
41
53
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
try {
|
|
55
|
+
await this.catchScreen(screenshotPath);
|
|
56
|
+
} catch (err) {
|
|
57
|
+
if (!fs.existsSync(executionScreenCastErrorsDir)) {
|
|
58
|
+
fs.mkdirSync(executionScreenCastErrorsDir);
|
|
59
|
+
}
|
|
48
60
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
61
|
+
let errorLogFilePath: string = screenshotPath.replace('.png', '.txt');
|
|
62
|
+
errorLogFilePath = errorLogFilePath.replace(executionScreenCastDir, executionScreenCastErrorsDir);
|
|
63
|
+
if (err instanceof error.IError) {
|
|
64
|
+
this.writeErrorLog(errorLogFilePath, err);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
56
68
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
69
|
+
async catchScreen(screenshotPath: string): Promise<void> {
|
|
70
|
+
const screenshot: string = await this.driverHelper.getDriver().takeScreenshot();
|
|
71
|
+
const screenshotStream: WriteStream = fs.createWriteStream(screenshotPath);
|
|
72
|
+
screenshotStream.write(Buffer.from(screenshot, 'base64'));
|
|
73
|
+
screenshotStream.end();
|
|
74
|
+
}
|
|
63
75
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (err.stack) {
|
|
68
|
-
const screenshotStream: WriteStream = fs.createWriteStream(errorLogPath);
|
|
69
|
-
screenshotStream.write(Buffer.from(err.stack, 'utf8'));
|
|
70
|
-
screenshotStream.end();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
76
|
+
writeErrorLog(errorLogPath: string, err: error.IError): void {
|
|
77
|
+
console.log(`Failed to save screenshot, additional information in the ${errorLogPath}`);
|
|
73
78
|
|
|
79
|
+
if (err.stack) {
|
|
80
|
+
const screenshotStream: WriteStream = fs.createWriteStream(errorLogPath);
|
|
81
|
+
screenshotStream.write(Buffer.from(err.stack, 'utf8'));
|
|
82
|
+
screenshotStream.end();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
74
85
|
}
|
package/utils/ShellExecutor.ts
CHANGED
|
@@ -1,17 +1,28 @@
|
|
|
1
|
-
|
|
1
|
+
/** *******************************************************************
|
|
2
|
+
* copyright (c) 2023 Red Hat, Inc.
|
|
3
|
+
*
|
|
4
|
+
* This program and the accompanying materials are made
|
|
5
|
+
* available under the terms of the Eclipse Public License 2.0
|
|
6
|
+
* which is available at https://www.eclipse.org/legal/epl-2.0/
|
|
7
|
+
*
|
|
8
|
+
* SPDX-License-Identifier: EPL-2.0
|
|
9
|
+
**********************************************************************/
|
|
10
|
+
import { exec, ShellString } from 'shelljs';
|
|
11
|
+
import { Logger } from './Logger';
|
|
12
|
+
import { injectable } from 'inversify';
|
|
2
13
|
|
|
14
|
+
@injectable()
|
|
3
15
|
export class ShellExecutor {
|
|
16
|
+
wait(seconds: number): void {
|
|
17
|
+
this.executeCommand(`sleep ${seconds}s`);
|
|
18
|
+
}
|
|
4
19
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
20
|
+
curl(link: string): ShellString {
|
|
21
|
+
return this.executeCommand(`curl -k ${link}`);
|
|
22
|
+
}
|
|
8
23
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
protected static execWithLog(command: string): ShellString {
|
|
14
|
-
echo(command);
|
|
15
|
-
return exec(command);
|
|
16
|
-
}
|
|
24
|
+
executeCommand(command: string): ShellString {
|
|
25
|
+
Logger.debug(command);
|
|
26
|
+
return exec(command);
|
|
27
|
+
}
|
|
17
28
|
}
|
package/utils/StringUtil.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
1
|
+
/** *******************************************************************
|
|
2
|
+
* copyright (c) 2019 Red Hat, Inc.
|
|
3
3
|
*
|
|
4
4
|
* This program and the accompanying materials are made
|
|
5
5
|
* available under the terms of the Eclipse Public License 2.0
|
|
@@ -8,42 +8,55 @@
|
|
|
8
8
|
* SPDX-License-Identifier: EPL-2.0
|
|
9
9
|
**********************************************************************/
|
|
10
10
|
|
|
11
|
-
import { injectable } from 'inversify';
|
|
12
11
|
import { Logger } from './Logger';
|
|
12
|
+
import { injectable } from 'inversify';
|
|
13
13
|
|
|
14
14
|
@injectable()
|
|
15
15
|
export class StringUtil {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
16
|
+
/**
|
|
17
|
+
* method extracts a test repo name from git clone https url;
|
|
18
|
+
* it splits the url into string[] by "/" or ".", deletes empty elements and elements that contains just "git", "main" or "tree" word, than returns the last one;
|
|
19
|
+
* please, avoid to call the test repo as just "git" or to use dots in the name, like: github.com/user/git.git, github.com/user/name.with.dots.
|
|
20
|
+
* @param url git https url (which using for "git clone")
|
|
21
|
+
* @return project name
|
|
22
|
+
*/
|
|
23
|
+
static getProjectNameFromGitUrl(url: string): string {
|
|
24
|
+
Logger.debug(`${url}`);
|
|
25
|
+
|
|
26
|
+
if (url.includes('?')) {
|
|
27
|
+
url = url.substring(0, url.indexOf('?'));
|
|
28
|
+
}
|
|
29
|
+
if (url.includes('/tree/')) {
|
|
30
|
+
url = url.split('/').slice(0, -2).join('/');
|
|
31
|
+
}
|
|
32
|
+
const projectName: string = url
|
|
33
|
+
.split(/[\/.]/)
|
|
34
|
+
.filter((e: string): boolean => !['git', ''].includes(e))
|
|
35
|
+
.reverse()[0];
|
|
36
|
+
Logger.debug(`${projectName}`);
|
|
37
|
+
return projectName;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
static sanitizeTitle(arg: string): string {
|
|
41
|
+
Logger.trace();
|
|
42
|
+
|
|
43
|
+
return arg
|
|
44
|
+
.replace(/\//g, '+')
|
|
45
|
+
.replace(/,/g, '.')
|
|
46
|
+
.replace(/:/g, '-')
|
|
47
|
+
.replace(/['"]/g, '')
|
|
48
|
+
.replace(/[^a-z0-9+\-.()\[\]_]/gi, '_');
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* replaces ${ENV}, $ENV to "$ENV"
|
|
53
|
+
* @param command string command with environmental variables in unsupported format
|
|
54
|
+
* @return updated command with environmental variables in supported format
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
static updateCommandEnvsToShStyle(command: string): string {
|
|
58
|
+
Logger.trace();
|
|
59
|
+
|
|
60
|
+
return command.replace(/[{}]/g, '').replace(/(?<!")\${?[a-zA-Z0-9_+\-\s]+\b}?/gm, '"$&"');
|
|
61
|
+
}
|
|
49
62
|
}
|