@zohodesk/testinglibrary 0.1.8-stb-bdd-v26 → 0.1.9
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/.babelrc +21 -18
- package/.eslintrc.js +31 -31
- package/.prettierrc +5 -5
- package/README.md +17 -17
- package/bin/cli.js +2 -2
- package/build/bdd-framework/cli/commands/env.js +42 -0
- package/build/bdd-framework/cli/commands/export.js +47 -0
- package/build/bdd-framework/cli/commands/test.js +64 -0
- package/build/bdd-framework/cli/index.js +11 -0
- package/build/bdd-framework/cli/options.js +19 -0
- package/build/bdd-framework/cli/worker.js +13 -0
- package/build/bdd-framework/config/configDir.js +35 -0
- package/build/bdd-framework/config/enrichReporterData.js +23 -0
- package/build/bdd-framework/config/env.js +50 -0
- package/build/bdd-framework/config/index.js +94 -0
- package/build/bdd-framework/config/lang.js +14 -0
- package/build/bdd-framework/cucumber/buildStepDefinition.js +43 -0
- package/build/bdd-framework/cucumber/createTestStep.js +43 -0
- package/build/bdd-framework/cucumber/formatter/EventDataCollector.js +126 -0
- package/build/bdd-framework/cucumber/formatter/GherkinDocumentParser.js +72 -0
- package/build/bdd-framework/cucumber/formatter/PickleParser.js +25 -0
- package/build/bdd-framework/cucumber/formatter/durationHelpers.js +13 -0
- package/build/bdd-framework/cucumber/formatter/getColorFns.js +57 -0
- package/build/bdd-framework/cucumber/formatter/index.js +16 -0
- package/build/bdd-framework/cucumber/formatter/locationHelpers.js +16 -0
- package/build/bdd-framework/cucumber/loadConfig.js +17 -0
- package/build/bdd-framework/cucumber/loadFeatures.js +70 -0
- package/build/bdd-framework/cucumber/loadSnippetBuilder.js +20 -0
- package/build/bdd-framework/cucumber/loadSteps.js +47 -0
- package/build/bdd-framework/cucumber/resolveFeaturePaths.js +62 -0
- package/build/bdd-framework/cucumber/stepArguments.js +21 -0
- package/build/bdd-framework/cucumber/types.js +5 -0
- package/build/bdd-framework/cucumber/valueChecker.js +23 -0
- package/build/bdd-framework/decorators.js +18 -0
- package/build/bdd-framework/gen/fixtures.js +48 -0
- package/build/bdd-framework/gen/formatter.js +123 -0
- package/build/bdd-framework/gen/i18n.js +39 -0
- package/build/bdd-framework/gen/index.js +185 -0
- package/build/bdd-framework/gen/testFile.js +465 -0
- package/build/bdd-framework/gen/testMeta.js +60 -0
- package/build/bdd-framework/gen/testNode.js +60 -0
- package/build/bdd-framework/gen/testPoms.js +133 -0
- package/build/bdd-framework/hooks/scenario.js +130 -0
- package/build/bdd-framework/hooks/worker.js +89 -0
- package/build/bdd-framework/index.js +52 -0
- package/build/bdd-framework/playwright/fixtureParameterNames.js +93 -0
- package/build/bdd-framework/playwright/getLocationInFile.js +79 -0
- package/build/bdd-framework/playwright/loadConfig.js +42 -0
- package/build/bdd-framework/playwright/loadUtils.js +33 -0
- package/build/bdd-framework/playwright/testTypeImpl.js +61 -0
- package/build/bdd-framework/playwright/transform.js +88 -0
- package/build/bdd-framework/playwright/types.js +5 -0
- package/build/bdd-framework/playwright/utils.js +34 -0
- package/build/bdd-framework/reporter/cucumber/base.js +57 -0
- package/build/bdd-framework/reporter/cucumber/custom.js +73 -0
- package/build/bdd-framework/reporter/cucumber/helper.js +12 -0
- package/build/bdd-framework/reporter/cucumber/html.js +35 -0
- package/build/bdd-framework/reporter/cucumber/index.js +74 -0
- package/build/bdd-framework/reporter/cucumber/json.js +312 -0
- package/build/bdd-framework/reporter/cucumber/junit.js +205 -0
- package/build/bdd-framework/reporter/cucumber/message.js +20 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/AttachmentMapper.js +64 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/Builder.js +196 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocument.js +43 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocumentClone.js +52 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/GherkinDocuments.js +105 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/Hook.js +70 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/Meta.js +45 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/Pickles.js +27 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/Projects.js +38 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCase.js +128 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCaseRun.js +126 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestCaseRunHooks.js +102 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestStepAttachments.js +50 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/TestStepRun.js +88 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/index.js +30 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/pwUtils.js +51 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/timing.js +35 -0
- package/build/bdd-framework/reporter/cucumber/messagesBuilder/types.js +5 -0
- package/build/bdd-framework/run/StepInvoker.js +68 -0
- package/build/bdd-framework/run/bddDataAttachment.js +46 -0
- package/build/bdd-framework/run/bddFixtures.js +191 -0
- package/build/bdd-framework/run/bddWorld.js +79 -0
- package/build/bdd-framework/run/bddWorldInternal.js +15 -0
- package/build/bdd-framework/snippets/index.js +132 -0
- package/build/bdd-framework/snippets/snippetSyntax.js +43 -0
- package/build/bdd-framework/snippets/snippetSyntaxDecorators.js +26 -0
- package/build/bdd-framework/snippets/snippetSyntaxTs.js +18 -0
- package/build/bdd-framework/stepDefinitions/createBdd.js +66 -0
- package/build/bdd-framework/stepDefinitions/decorators/class.js +68 -0
- package/build/bdd-framework/stepDefinitions/decorators/steps.js +99 -0
- package/build/bdd-framework/stepDefinitions/defineStep.js +62 -0
- package/build/bdd-framework/stepDefinitions/stepConfig.js +24 -0
- package/build/bdd-framework/utils/AutofillMap.js +20 -0
- package/build/bdd-framework/utils/exit.js +62 -0
- package/build/bdd-framework/utils/index.js +93 -0
- package/build/bdd-framework/utils/jsStringWrap.js +44 -0
- package/build/bdd-framework/utils/logger.js +30 -0
- package/build/bdd-framework/utils/stripAnsiEscapes.js +20 -0
- package/build/core/playwright/builtInFixtures/addTags.js +1 -1
- package/build/core/playwright/builtInFixtures/context.js +18 -1
- package/build/core/playwright/builtInFixtures/i18N.js +33 -0
- package/build/core/playwright/builtInFixtures/index.js +19 -7
- package/build/core/playwright/builtInFixtures/page.js +69 -39
- package/build/core/playwright/builtInFixtures/unauthenticatedPage.js +18 -0
- package/build/core/playwright/clear-caches.js +19 -8
- package/build/core/playwright/codegen.js +4 -4
- package/build/core/playwright/constants/browserTypes.js +12 -0
- package/build/core/playwright/custom-commands.js +1 -1
- package/build/core/playwright/env-initializer.js +10 -6
- package/build/core/playwright/helpers/auth/accountLogin.js +18 -0
- package/build/core/playwright/helpers/auth/checkAuthCookies.js +47 -0
- package/build/core/playwright/helpers/auth/getUrlOrigin.js +13 -0
- package/build/core/playwright/helpers/auth/getUsers.js +72 -0
- package/build/core/playwright/helpers/auth/index.js +58 -0
- package/build/core/playwright/helpers/auth/loginSteps.js +36 -0
- package/build/core/playwright/helpers/configFileNameProvider.js +17 -0
- package/build/core/playwright/helpers/getUserFixtures.js +23 -0
- package/build/core/playwright/helpers/mergeObjects.js +13 -0
- package/build/core/playwright/helpers/parseUserArgs.js +11 -0
- package/build/core/playwright/index.js +69 -15
- package/build/core/playwright/readConfigFile.js +50 -39
- package/build/core/playwright/report-generator.js +7 -7
- package/build/core/playwright/setup/config-creator.js +15 -16
- package/build/core/playwright/setup/config-utils.js +60 -26
- package/build/core/playwright/setup/custom-reporter.js +3 -2
- package/build/core/playwright/tag-processor.js +12 -23
- package/build/core/playwright/test-runner.js +49 -63
- package/build/core/playwright/types.js +43 -0
- package/build/decorators.d.ts +1 -1
- package/build/decorators.js +16 -2
- package/build/index.d.ts +79 -12
- package/build/index.js +51 -9
- package/build/lib/cli.js +12 -3
- package/build/lib/post-install.js +18 -10
- package/build/parser/sample.feature +34 -34
- package/build/parser/sample.spec.js +18 -18
- package/build/setup-folder-structure/helper.js +3 -0
- package/build/setup-folder-structure/reportEnhancement/addonScript.html +24 -24
- package/build/setup-folder-structure/samples/auth-setup-sample.js +72 -72
- package/build/setup-folder-structure/samples/authUsers-sample.json +8 -8
- package/build/setup-folder-structure/samples/env-config-sample.json +20 -20
- package/build/setup-folder-structure/samples/git-ignore.sample.js +36 -36
- package/build/setup-folder-structure/samples/uat-config-sample.js +44 -44
- package/build/utils/cliArgsToObject.js +30 -26
- package/build/utils/fileUtils.js +4 -19
- package/build/utils/getFilePath.js +1 -2
- package/build/utils/rootPath.js +16 -9
- package/changelog.md +144 -131
- package/jest.config.js +63 -63
- package/npm-shrinkwrap.json +6475 -5994
- package/package.json +57 -56
- package/playwright.config.js +112 -112
- package/build/bdd-poc/config/pathConfig.js +0 -22
- package/build/bdd-poc/core-runner/exportMethods.js +0 -22
- package/build/bdd-poc/core-runner/main.js +0 -15
- package/build/bdd-poc/core-runner/stepDefinitions.js +0 -157
- package/build/bdd-poc/core-runner/stepRunner.js +0 -25
- package/build/bdd-poc/errors/throwError.js +0 -23
- package/build/bdd-poc/index.js +0 -26
- package/build/bdd-poc/test/cucumber/featureFileParer.js +0 -84
- package/build/bdd-poc/test/cucumber/parserCucumber.js +0 -15
- package/build/bdd-poc/test/stepGenerate/extractTestInputs.js +0 -65
- package/build/bdd-poc/test/stepGenerate/parserSteps.js +0 -81
- package/build/bdd-poc/test/stepGenerate/stepFileGenerate.js +0 -40
- package/build/bdd-poc/test/stepGenerate/stepsnippets.js +0 -61
- package/build/bdd-poc/test/tagsHandle.js +0 -70
- package/build/bdd-poc/test/testData.js +0 -125
- package/build/bdd-poc/test/testStructure.js +0 -92
- package/build/bdd-poc/utils/stringManipulation.js +0 -26
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isTestContainsSubtest = isTestContainsSubtest;
|
|
7
|
+
exports.runStepWithCustomLocation = runStepWithCustomLocation;
|
|
8
|
+
var _test = require("@playwright/test");
|
|
9
|
+
var _utils = require("../utils");
|
|
10
|
+
/**
|
|
11
|
+
* Helpers to deal with Playwright test internal stuff.
|
|
12
|
+
* See: https://github.com/microsoft/playwright/blob/main/packages/playwright-test/src/common/testType.ts
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const testTypeSymbol = (0, _utils.getSymbolByName)(_test.test, 'testType');
|
|
16
|
+
/**
|
|
17
|
+
* Returns test fixtures using Symbol.
|
|
18
|
+
*/
|
|
19
|
+
function getTestFixtures(test) {
|
|
20
|
+
return getTestImpl(test).fixtures;
|
|
21
|
+
}
|
|
22
|
+
function getTestImpl(test) {
|
|
23
|
+
return test[testTypeSymbol];
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Run step with location pointing to Given, When, Then call.
|
|
27
|
+
*/
|
|
28
|
+
// eslint-disable-next-line max-params
|
|
29
|
+
async function runStepWithCustomLocation(test, stepText, location, body) {
|
|
30
|
+
const testInfo = test.info();
|
|
31
|
+
// See: https://github.com/microsoft/playwright/blob/main/packages/playwright/src/common/testType.ts#L221
|
|
32
|
+
// @ts-expect-error _runAsStep is hidden from public
|
|
33
|
+
return testInfo._runAsStep({
|
|
34
|
+
category: 'test.step',
|
|
35
|
+
title: stepText,
|
|
36
|
+
location
|
|
37
|
+
}, async () => {
|
|
38
|
+
return await body();
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns true if test contains all fixtures of subtest.
|
|
43
|
+
* - test was extended from subtest
|
|
44
|
+
* - test is a result of mergeTests(subtest, ...)
|
|
45
|
+
*/
|
|
46
|
+
function isTestContainsSubtest(test, subtest) {
|
|
47
|
+
if (test === subtest) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
const testFixtures = new Set(getTestFixtures(test).map(f => locationToString(f.location)));
|
|
51
|
+
return getTestFixtures(subtest).every(f => {
|
|
52
|
+
return testFixtures.has(locationToString(f.location));
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function locationToString({
|
|
56
|
+
file,
|
|
57
|
+
line,
|
|
58
|
+
column
|
|
59
|
+
}) {
|
|
60
|
+
return `${file}:${line}:${column}`;
|
|
61
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.installTransform = installTransform;
|
|
8
|
+
exports.requireTransform = requireTransform;
|
|
9
|
+
var _module = _interopRequireDefault(require("module"));
|
|
10
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
11
|
+
var _path = _interopRequireDefault(require("path"));
|
|
12
|
+
var _utils = require("./utils");
|
|
13
|
+
/* eslint-disable max-params */
|
|
14
|
+
/**
|
|
15
|
+
* Installs require hook to transform ts.
|
|
16
|
+
* Extracted from playwright.
|
|
17
|
+
* See: https://github.com/microsoft/playwright/blob/main/packages/playwright-test/src/transform/transform.ts
|
|
18
|
+
*/
|
|
19
|
+
function installTransform() {
|
|
20
|
+
const {
|
|
21
|
+
pirates
|
|
22
|
+
} = (0, _utils.requirePlaywrightModule)('lib/utilsBundle.js');
|
|
23
|
+
const {
|
|
24
|
+
resolveHook,
|
|
25
|
+
shouldTransform,
|
|
26
|
+
transformHook
|
|
27
|
+
} = requireTransform();
|
|
28
|
+
let reverted = false;
|
|
29
|
+
const originalResolveFilename = _module.default._resolveFilename;
|
|
30
|
+
function resolveFilename(specifier, parent, ...rest) {
|
|
31
|
+
if (!reverted && parent) {
|
|
32
|
+
const resolved = resolveHook(parent.filename, specifier);
|
|
33
|
+
if (resolved !== undefined) {
|
|
34
|
+
specifier = resolved;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return originalResolveFilename.call(this, specifier, parent, ...rest);
|
|
38
|
+
}
|
|
39
|
+
_module.default._resolveFilename = resolveFilename;
|
|
40
|
+
const revertPirates = pirates.addHook((code, filename) => {
|
|
41
|
+
if (!shouldTransform(filename)) {
|
|
42
|
+
return code;
|
|
43
|
+
}
|
|
44
|
+
// Since PW 1.42 transformHook returns { code, serializedCache } instead of code string
|
|
45
|
+
// See: https://github.com/microsoft/playwright/commit/f605a5009b3c75746120a6ec6d940f62624af5ec#diff-0f8a2f313f1572108f59a6e84663858ebb4fc455163410526b56878794001103
|
|
46
|
+
// See: https://github.com/vitalets/playwright-bdd/issues/96
|
|
47
|
+
const res = transformHook(code, filename);
|
|
48
|
+
return typeof res === 'string' ? res : res.code;
|
|
49
|
+
}, {
|
|
50
|
+
exts: ['.ts', '.tsx', '.js', '.jsx', '.mjs']
|
|
51
|
+
});
|
|
52
|
+
return () => {
|
|
53
|
+
reverted = true;
|
|
54
|
+
_module.default._resolveFilename = originalResolveFilename;
|
|
55
|
+
revertPirates();
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function requireTransform() {
|
|
59
|
+
const transformPathSince1_35 = (0, _utils.getPlaywrightModulePath)('lib/transform/transform.js');
|
|
60
|
+
if (_fs.default.existsSync(transformPathSince1_35)) {
|
|
61
|
+
const {
|
|
62
|
+
resolveHook,
|
|
63
|
+
shouldTransform,
|
|
64
|
+
transformHook,
|
|
65
|
+
requireOrImport
|
|
66
|
+
} = (0, _utils.requirePlaywrightModule)(transformPathSince1_35);
|
|
67
|
+
return {
|
|
68
|
+
resolveHook,
|
|
69
|
+
shouldTransform,
|
|
70
|
+
transformHook,
|
|
71
|
+
requireOrImport
|
|
72
|
+
};
|
|
73
|
+
} else {
|
|
74
|
+
const {
|
|
75
|
+
resolveHook,
|
|
76
|
+
transformHook,
|
|
77
|
+
requireOrImport
|
|
78
|
+
} = (0, _utils.requirePlaywrightModule)('lib/common/transform.js');
|
|
79
|
+
// see: https://github.com/microsoft/playwright/blob/b4ffb848de1b00e9a0abad6dacdccce60cce9bed/packages/playwright-test/src/reporters/base.ts#L524
|
|
80
|
+
const shouldTransform = file => !file.includes(`${_path.default.sep}node_modules${_path.default.sep}`);
|
|
81
|
+
return {
|
|
82
|
+
resolveHook,
|
|
83
|
+
shouldTransform,
|
|
84
|
+
transformHook,
|
|
85
|
+
requireOrImport
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getPlaywrightModulePath = getPlaywrightModulePath;
|
|
8
|
+
exports.requirePlaywrightModule = requirePlaywrightModule;
|
|
9
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
10
|
+
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
var _utils = require("../utils");
|
|
12
|
+
// cache playwright root
|
|
13
|
+
let playwrightRoot = '';
|
|
14
|
+
/**
|
|
15
|
+
* Requires Playwright's internal module that is not exported via package.exports.
|
|
16
|
+
*/
|
|
17
|
+
function requirePlaywrightModule(modulePath) {
|
|
18
|
+
const absPath = _path.default.isAbsolute(modulePath) ? modulePath : getPlaywrightModulePath(modulePath);
|
|
19
|
+
return require(absPath);
|
|
20
|
+
}
|
|
21
|
+
function getPlaywrightModulePath(relativePath) {
|
|
22
|
+
return _path.default.join(getPlaywrightRoot(), relativePath);
|
|
23
|
+
}
|
|
24
|
+
function getPlaywrightRoot() {
|
|
25
|
+
if (!playwrightRoot) {
|
|
26
|
+
// Since 1.38 all modules moved from @playwright/test to playwright.
|
|
27
|
+
// Here we check existance of 'lib' dir instead of checking version.
|
|
28
|
+
// See: https://github.com/microsoft/playwright/pull/26946
|
|
29
|
+
const playwrightTestRoot = (0, _utils.resolvePackageRoot)('@playwright/test');
|
|
30
|
+
const libDir = _path.default.join(playwrightTestRoot, 'lib');
|
|
31
|
+
playwrightRoot = _fs.default.existsSync(libDir) ? playwrightTestRoot : (0, _utils.resolvePackageRoot)('playwright');
|
|
32
|
+
}
|
|
33
|
+
return playwrightRoot;
|
|
34
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _path = _interopRequireDefault(require("path"));
|
|
9
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
10
|
+
var _stream = require("stream");
|
|
11
|
+
/**
|
|
12
|
+
* Base reporter for Cucumber reporters.
|
|
13
|
+
* Reference: https://github.com/cucumber/cucumber-js/blob/main/src/formatter/index.ts
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
// Import pipeline from the 'stream' module
|
|
17
|
+
|
|
18
|
+
class BaseReporter {
|
|
19
|
+
internalOptions;
|
|
20
|
+
outputStream = process.stdout;
|
|
21
|
+
constructor(internalOptions) {
|
|
22
|
+
this.internalOptions = internalOptions;
|
|
23
|
+
}
|
|
24
|
+
get eventBroadcaster() {
|
|
25
|
+
return this.internalOptions.eventBroadcaster;
|
|
26
|
+
}
|
|
27
|
+
get eventDataCollector() {
|
|
28
|
+
return this.internalOptions.eventDataCollector;
|
|
29
|
+
}
|
|
30
|
+
printsToStdio() {
|
|
31
|
+
return isStdout(this.outputStream);
|
|
32
|
+
}
|
|
33
|
+
async init() {}
|
|
34
|
+
async finished() {
|
|
35
|
+
if (!isStdout(this.outputStream)) {
|
|
36
|
+
this.outputStream.end();
|
|
37
|
+
await new Promise((resolve, reject) => {
|
|
38
|
+
this.outputStream.on('finish', resolve);
|
|
39
|
+
this.outputStream.on('error', reject);
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
setOutputStream(outputFile) {
|
|
44
|
+
if (!outputFile) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const absolutePath = _path.default.resolve(this.internalOptions.cwd, outputFile);
|
|
48
|
+
_fs.default.mkdirSync(_path.default.dirname(absolutePath), {
|
|
49
|
+
recursive: true
|
|
50
|
+
});
|
|
51
|
+
this.outputStream = _fs.default.createWriteStream(absolutePath);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.default = BaseReporter;
|
|
55
|
+
function isStdout(stream) {
|
|
56
|
+
return stream === process.stdout;
|
|
57
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _base = _interopRequireDefault(require("./base"));
|
|
9
|
+
var _loadUtils = require("../../playwright/loadUtils");
|
|
10
|
+
var _getColorFns = _interopRequireDefault(require("../../cucumber/formatter/getColorFns"));
|
|
11
|
+
/**
|
|
12
|
+
* Custom Cucumber reporter.
|
|
13
|
+
* See: https://github.com/cucumber/cucumber-js/blob/main/docs/custom_formatters.md
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
class CustomReporter extends _base.default {
|
|
17
|
+
reporterPathOrModule;
|
|
18
|
+
userOptions;
|
|
19
|
+
formatter;
|
|
20
|
+
constructor(internalOptions, reporterPathOrModule, userOptions = {}) {
|
|
21
|
+
super(internalOptions);
|
|
22
|
+
this.reporterPathOrModule = reporterPathOrModule;
|
|
23
|
+
this.userOptions = userOptions;
|
|
24
|
+
this.setOutputStream(this.userOptions.outputFile);
|
|
25
|
+
}
|
|
26
|
+
printsToStdio() {
|
|
27
|
+
// currently always return true, b/c loading of custom reporter is async,
|
|
28
|
+
// but printsToStdio() is called synchronously at the beginning.
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
async init() {
|
|
32
|
+
const formatterOptions = this.buildFormatterOptions();
|
|
33
|
+
const FormatterConstructor = await this.loadFormatterFromFile();
|
|
34
|
+
this.formatter = new FormatterConstructor(formatterOptions);
|
|
35
|
+
}
|
|
36
|
+
async finished() {
|
|
37
|
+
var _this$formatter;
|
|
38
|
+
await ((_this$formatter = this.formatter) === null || _this$formatter === void 0 ? void 0 : _this$formatter.finished());
|
|
39
|
+
await super.finished();
|
|
40
|
+
}
|
|
41
|
+
async loadFormatterFromFile() {
|
|
42
|
+
// see: https://github.com/microsoft/playwright/blob/main/packages/playwright/src/common/config.ts#L225
|
|
43
|
+
const reporterPath = require.resolve(this.reporterPathOrModule, {
|
|
44
|
+
paths: [this.internalOptions.cwd]
|
|
45
|
+
});
|
|
46
|
+
return (0, _loadUtils.requireOrImportDefaultFunction)(reporterPath, true);
|
|
47
|
+
}
|
|
48
|
+
buildFormatterOptions() {
|
|
49
|
+
const colorFns = (0, _getColorFns.default)(this.outputStream, process.env, this.userOptions.colorsEnabled);
|
|
50
|
+
return {
|
|
51
|
+
cwd: this.internalOptions.cwd,
|
|
52
|
+
eventBroadcaster: this.eventBroadcaster,
|
|
53
|
+
eventDataCollector: this.eventDataCollector,
|
|
54
|
+
parsedArgvOptions: this.userOptions,
|
|
55
|
+
colorFns,
|
|
56
|
+
stream: this.outputStream,
|
|
57
|
+
log: this.outputStream.write.bind(this.outputStream),
|
|
58
|
+
cleanup: async () => {},
|
|
59
|
+
snippetBuilder: null,
|
|
60
|
+
supportCodeLibrary: {
|
|
61
|
+
World: {}
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// const fakeSuportCodeLibrary = {
|
|
67
|
+
// parameterTypeRegistry: ParameterTypeRegistry;
|
|
68
|
+
// stepDefinitions: StepDefinition[];
|
|
69
|
+
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
70
|
+
// World: any;
|
|
71
|
+
// originalCoordinates: ISupportCodeCoordinates;
|
|
72
|
+
// }
|
|
73
|
+
exports.default = CustomReporter;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.cucumberReporter = cucumberReporter;
|
|
7
|
+
function cucumberReporter(type, userOptions) {
|
|
8
|
+
return ['../../../bdd-framework/reporter/cucumber/index.js', {
|
|
9
|
+
$type: type,
|
|
10
|
+
...(userOptions || {})
|
|
11
|
+
}];
|
|
12
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _htmlFormatter = _interopRequireDefault(require("@cucumber/html-formatter"));
|
|
9
|
+
var _utils = require("../../utils");
|
|
10
|
+
var _path = _interopRequireDefault(require("path"));
|
|
11
|
+
var _base = _interopRequireDefault(require("./base"));
|
|
12
|
+
class HtmlReporter extends _base.default {
|
|
13
|
+
userOptions;
|
|
14
|
+
htmlStream;
|
|
15
|
+
constructor(internalOptions, userOptions = {}) {
|
|
16
|
+
super(internalOptions);
|
|
17
|
+
this.userOptions = userOptions;
|
|
18
|
+
this.setOutputStream(this.userOptions.outputFile);
|
|
19
|
+
const packageRoot = (0, _utils.resolvePackageRoot)('@cucumber/html-formatter');
|
|
20
|
+
this.htmlStream = new _htmlFormatter.default(_path.default.join(packageRoot, 'dist/main.css'), _path.default.join(packageRoot, 'dist/main.js'));
|
|
21
|
+
this.eventBroadcaster.on('envelope', envelope => {
|
|
22
|
+
this.htmlStream.write(envelope);
|
|
23
|
+
});
|
|
24
|
+
this.htmlStream.pipe(this.outputStream);
|
|
25
|
+
}
|
|
26
|
+
async finished() {
|
|
27
|
+
this.htmlStream.end();
|
|
28
|
+
await new Promise((resolve, reject) => {
|
|
29
|
+
this.htmlStream.on('finish', resolve);
|
|
30
|
+
this.htmlStream.on('error', reject);
|
|
31
|
+
});
|
|
32
|
+
await super.finished();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.default = HtmlReporter;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _events = _interopRequireDefault(require("events"));
|
|
9
|
+
var _messagesBuilder = require("./messagesBuilder");
|
|
10
|
+
var _configDir = require("../../config/configDir");
|
|
11
|
+
var _enrichReporterData = require("../../config/enrichReporterData");
|
|
12
|
+
var _message = _interopRequireDefault(require("./message"));
|
|
13
|
+
var _html = _interopRequireDefault(require("./html"));
|
|
14
|
+
var _junit = _interopRequireDefault(require("./junit"));
|
|
15
|
+
var _json = _interopRequireDefault(require("./json"));
|
|
16
|
+
var _custom = _interopRequireDefault(require("./custom"));
|
|
17
|
+
/**
|
|
18
|
+
* Playwright reporter that generates different Cucumber reports.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const builtinReporters = {
|
|
22
|
+
html: _html.default,
|
|
23
|
+
message: _message.default,
|
|
24
|
+
junit: _junit.default,
|
|
25
|
+
json: _json.default
|
|
26
|
+
};
|
|
27
|
+
class CucumberReporterAdapter {
|
|
28
|
+
messagesBuilderRef;
|
|
29
|
+
type;
|
|
30
|
+
userOptions;
|
|
31
|
+
reporter;
|
|
32
|
+
constructor(fullOptions) {
|
|
33
|
+
const {
|
|
34
|
+
$type,
|
|
35
|
+
...userOptions
|
|
36
|
+
} = fullOptions;
|
|
37
|
+
this.type = $type;
|
|
38
|
+
this.userOptions = userOptions;
|
|
39
|
+
(0, _enrichReporterData.enableEnrichReporterData)();
|
|
40
|
+
this.messagesBuilderRef = (0, _messagesBuilder.getMessagesBuilderRef)();
|
|
41
|
+
this.reporter = this.createCucumberReporter();
|
|
42
|
+
}
|
|
43
|
+
printsToStdio() {
|
|
44
|
+
return this.reporter.printsToStdio();
|
|
45
|
+
}
|
|
46
|
+
onTestEnd(test, result) {
|
|
47
|
+
this.messagesBuilderRef.onTestEnd(test, result);
|
|
48
|
+
}
|
|
49
|
+
async onEnd(result) {
|
|
50
|
+
this.messagesBuilderRef.onEnd(result);
|
|
51
|
+
await this.reporter.init();
|
|
52
|
+
await this.messagesBuilderRef.builder.buildMessages();
|
|
53
|
+
this.messagesBuilderRef.builder.emitMessages(this.reporter.eventBroadcaster);
|
|
54
|
+
await this.reporter.finished();
|
|
55
|
+
}
|
|
56
|
+
createCucumberReporter() {
|
|
57
|
+
const internalOptions = {
|
|
58
|
+
cwd: (0, _configDir.getPlaywrightConfigDir)(),
|
|
59
|
+
eventBroadcaster: new _events.default(),
|
|
60
|
+
eventDataCollector: this.messagesBuilderRef.builder.eventDataCollector
|
|
61
|
+
};
|
|
62
|
+
if (isBuiltInReporter(this.type)) {
|
|
63
|
+
const BuiltInReporter = builtinReporters[this.type];
|
|
64
|
+
return new BuiltInReporter(internalOptions, this.userOptions);
|
|
65
|
+
} else {
|
|
66
|
+
const reporterPath = this.type;
|
|
67
|
+
return new _custom.default(internalOptions, reporterPath, this.userOptions);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.default = CucumberReporterAdapter;
|
|
72
|
+
function isBuiltInReporter(type) {
|
|
73
|
+
return type in builtinReporters;
|
|
74
|
+
}
|