@lynxwall/cucumber-tsflow 7.1.0 → 7.1.2
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/README.md +2 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +7 -5
- package/lib/cli/load-configuration.d.ts +0 -21
- package/lib/cli/load-configuration.js +0 -124
- package/lib/cli/load-configuration.js.map +0 -1
- package/lib/cucumber/coordinator.d.ts +0 -15
- package/lib/cucumber/coordinator.js +0 -40
- package/lib/cucumber/coordinator.js.map +0 -1
- package/lib/cucumber/make-runtime.d.ts +0 -21
- package/lib/cucumber/make-runtime.js +0 -17
- package/lib/cucumber/make-runtime.js.map +0 -1
- package/lib/cucumber/managed-scenario-context.d.ts +0 -52
- package/lib/cucumber/managed-scenario-context.js +0 -149
- package/lib/cucumber/managed-scenario-context.js.map +0 -1
- package/lib/cucumber/message-collector.d.ts +0 -87
- package/lib/cucumber/message-collector.js +0 -280
- package/lib/cucumber/message-collector.js.map +0 -1
- package/lib/cucumber/parallel/adapter.d.ts +0 -46
- package/lib/cucumber/parallel/adapter.js +0 -156
- package/lib/cucumber/parallel/adapter.js.map +0 -1
- package/lib/cucumber/parallel/run-worker.d.ts +0 -1
- package/lib/cucumber/parallel/run-worker.js +0 -24
- package/lib/cucumber/parallel/run-worker.js.map +0 -1
- package/lib/cucumber/parallel/worker.d.ts +0 -26
- package/lib/cucumber/parallel/worker.js +0 -95
- package/lib/cucumber/parallel/worker.js.map +0 -1
- package/lib/cucumber/run-cucumber.d.ts +0 -16
- package/lib/cucumber/run-cucumber.js +0 -139
- package/lib/cucumber/run-cucumber.js.map +0 -1
- package/lib/cucumber/serial/adapter.d.ts +0 -12
- package/lib/cucumber/serial/adapter.js +0 -24
- package/lib/cucumber/serial/adapter.js.map +0 -1
- package/lib/cucumber/test-case-info.d.ts +0 -23
- package/lib/cucumber/test-case-info.js +0 -3
- package/lib/cucumber/test-case-info.js.map +0 -1
- package/lib/cucumber/test-case-runner.d.ts +0 -48
- package/lib/cucumber/test-case-runner.js +0 -359
- package/lib/cucumber/test-case-runner.js.map +0 -1
- package/lib/cucumber/utils.d.ts +0 -16
- package/lib/cucumber/utils.js +0 -78
- package/lib/cucumber/utils.js.map +0 -1
- package/lib/cucumber/worker.d.ts +0 -17
- package/lib/cucumber/worker.js +0 -57
- package/lib/cucumber/worker.js.map +0 -1
- package/lib/formatters/behave-json-formatter.d.ts +0 -49
- package/lib/formatters/behave-json-formatter.js +0 -85
- package/lib/formatters/behave-json-formatter.js.map +0 -1
- package/lib/formatters/junit-bamboo-formatter.d.ts +0 -17
- package/lib/formatters/junit-bamboo-formatter.js +0 -175
- package/lib/formatters/junit-bamboo-formatter.js.map +0 -1
- package/lib/formatters/tsflow-snippet-syntax.d.ts +0 -9
- package/lib/formatters/tsflow-snippet-syntax.js +0 -89
- package/lib/formatters/tsflow-snippet-syntax.js.map +0 -1
- package/lib/types/parallel.d.ts +0 -11
- package/lib/types/parallel.js +0 -3
- package/lib/types/parallel.js.map +0 -1
- package/lib/types/scenario-context.d.ts +0 -16
- package/lib/types/scenario-context.js +0 -18
- package/lib/types/scenario-context.js.map +0 -1
- package/lib/types/scenario-info.d.ts +0 -16
- package/lib/types/scenario-info.js +0 -23
- package/lib/types/scenario-info.js.map +0 -1
- package/lib/types/step-binding-flags.d.ts +0 -53
- package/lib/types/step-binding-flags.js +0 -59
- package/lib/types/step-binding-flags.js.map +0 -1
- package/lib/types/step-binding.d.ts +0 -60
- package/lib/types/step-binding.js +0 -18
- package/lib/types/step-binding.js.map +0 -1
- package/lib/types/types.d.ts +0 -22
- package/lib/types/types.js +0 -3
- package/lib/types/types.js.map +0 -1
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@ With this latest release, cucumber-tsflow has been refactored to support cucumbe
|
|
|
20
20
|
- **API support** that implements and extends the cucumber-js API.
|
|
21
21
|
- Support for Node 22 and Typescript 5.8.
|
|
22
22
|
- Switched to **official Typescript Decorators** with metadata support implemented in [Typescript 5.2](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html#decorator-metadata).
|
|
23
|
+
**NOTE:** Please **remove *experimentalDecorators*** from your TypeScript configuration as it is no longer supported with the update to use official decorators, which are very different.
|
|
23
24
|
- Transpiler configuration updates to support node and Typescript changes.
|
|
24
25
|
- Added a new section to this readme that describes [Transpilers and TypeScript](#transpilers-and-typescript) in more detail.
|
|
25
26
|
|
|
@@ -166,7 +167,7 @@ The transpilers included with cucumber-tsflow transpile to **CommonJS** and do n
|
|
|
166
167
|
|
|
167
168
|
All of the transpilers included with cucumber-tsflow use the same TypeScript configuration, which take precedence when running your tests using one of these transpilers. In other words, while each transpiler is different, they all use the same tsconfig settings, which are shown below:
|
|
168
169
|
|
|
169
|
-
```
|
|
170
|
+
```typescript
|
|
170
171
|
compilerOptions: {
|
|
171
172
|
module: 'nodeNext',
|
|
172
173
|
target: 'es2022',
|
package/lib/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "7.1.
|
|
1
|
+
export declare const version = "7.1.2";
|
package/lib/version.js
CHANGED
package/lib/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AACd,QAAA,OAAO,GAAG,OAAO,CAAA","sourcesContent":["// Generated by genversion.\nexport const version = '7.1.
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAA,2BAA2B;AACd,QAAA,OAAO,GAAG,OAAO,CAAA","sourcesContent":["// Generated by genversion.\nexport const version = '7.1.2'\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lynxwall/cucumber-tsflow",
|
|
3
3
|
"description": "Provides 'specflow' like bindings for CucumberJS 11.2.0 in TypeScript 5.8+.",
|
|
4
|
-
"version": "7.1.
|
|
4
|
+
"version": "7.1.2",
|
|
5
5
|
"author": "Lonnie Wall <lynxdev@lynxwall.com>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"keywords": [
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@cucumber/cucumber": "~11.2.0",
|
|
53
53
|
"@jeanbenitez/logical-expression-parser": "~1.0.0",
|
|
54
|
+
"@types/node": "~22.13.10",
|
|
54
55
|
"ansis": "~3.17.0",
|
|
55
56
|
"commander": "^13.1.0",
|
|
56
57
|
"debug": "^4.3.4",
|
|
@@ -69,6 +70,7 @@
|
|
|
69
70
|
"ts-node": "~10.9.2",
|
|
70
71
|
"tsconfig-paths": "~4.2.0",
|
|
71
72
|
"tslib": "2.8.1",
|
|
73
|
+
"typescript": "~5.8.2",
|
|
72
74
|
"underscore": "~1.13.7"
|
|
73
75
|
},
|
|
74
76
|
"devDependencies": {
|
|
@@ -77,18 +79,18 @@
|
|
|
77
79
|
"@types/glob": "~8.1.0",
|
|
78
80
|
"@types/hash-sum": "~1.0.2",
|
|
79
81
|
"@types/lodash.merge": "~4.6.9",
|
|
80
|
-
"@types/node": "~22.13.10",
|
|
81
82
|
"@types/source-map-support": "~0.5.10",
|
|
82
83
|
"@types/underscore": "~1.13.0",
|
|
83
84
|
"genversion": "~3.2.0",
|
|
84
|
-
"shx": "0.3.4"
|
|
85
|
-
"typescript": "~5.8.2"
|
|
85
|
+
"shx": "0.3.4"
|
|
86
86
|
},
|
|
87
87
|
"scripts": {
|
|
88
88
|
"build": "genversion --es6 src/version.ts && tsc --build tsconfig.node.json && shx cp src/wrapper.mjs lib/ && shx cp src/api/wrapper.mjs lib/api/",
|
|
89
89
|
"build:watch": "tsc --build tsconfig.node.json --watch"
|
|
90
90
|
},
|
|
91
|
-
"bin":
|
|
91
|
+
"bin": {
|
|
92
|
+
"cucumber-tsflow": "bin/cucumber-tsflow.js"
|
|
93
|
+
},
|
|
92
94
|
"files": [
|
|
93
95
|
"api/",
|
|
94
96
|
"bin/",
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { ILoadConfigurationOptions, IRunConfiguration } from '@cucumber/cucumber/lib/api/types';
|
|
2
|
-
import { IRunEnvironment } from '@cucumber/cucumber/lib/environment/index';
|
|
3
|
-
import { ITsflowConfiguration } from './argv-parser';
|
|
4
|
-
export interface ITsflowResolvedConfiguration {
|
|
5
|
-
/**
|
|
6
|
-
* The final flat configuration object resolved from the configuration file/profiles plus any extra provided.
|
|
7
|
-
*/
|
|
8
|
-
useConfiguration: ITsflowConfiguration;
|
|
9
|
-
/**
|
|
10
|
-
* The format that can be passed into `runCucumber`.
|
|
11
|
-
*/
|
|
12
|
-
runConfiguration: IRunConfiguration;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Load user-authored configuration to be used in a test run.
|
|
16
|
-
*
|
|
17
|
-
* @public
|
|
18
|
-
* @param options - Coordinates required to find configuration.
|
|
19
|
-
* @param environment - Project environment.
|
|
20
|
-
*/
|
|
21
|
-
export declare const loadConfiguration: (options?: ILoadConfigurationOptions, environment?: IRunEnvironment) => Promise<ITsflowResolvedConfiguration>;
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.loadConfiguration = void 0;
|
|
7
|
-
const locate_file_1 = require("@cucumber/cucumber/lib/configuration/locate_file");
|
|
8
|
-
const index_1 = require("@cucumber/cucumber/lib/configuration/index");
|
|
9
|
-
const validate_configuration_1 = require("@cucumber/cucumber/lib/configuration/validate_configuration");
|
|
10
|
-
const convert_configuration_1 = require("@cucumber/cucumber/lib/api/convert_configuration");
|
|
11
|
-
const index_2 = require("@cucumber/cucumber/lib/environment/index");
|
|
12
|
-
const helpers_1 = require("../utils/helpers");
|
|
13
|
-
const gherkin_manager_1 = __importDefault(require("../gherkin/gherkin-manager"));
|
|
14
|
-
const ansis_1 = __importDefault(require("ansis"));
|
|
15
|
-
/**
|
|
16
|
-
* Load user-authored configuration to be used in a test run.
|
|
17
|
-
*
|
|
18
|
-
* @public
|
|
19
|
-
* @param options - Coordinates required to find configuration.
|
|
20
|
-
* @param environment - Project environment.
|
|
21
|
-
*/
|
|
22
|
-
const loadConfiguration = async (options = {}, environment = {}) => {
|
|
23
|
-
const { cwd, env, logger } = (0, index_2.makeEnvironment)(environment);
|
|
24
|
-
const configFile = options.file ?? (0, locate_file_1.locateFile)(cwd);
|
|
25
|
-
if (configFile) {
|
|
26
|
-
logger.debug(`Configuration will be loaded from "${configFile}"`);
|
|
27
|
-
}
|
|
28
|
-
else if (configFile === false) {
|
|
29
|
-
logger.debug('Skipping configuration file resolution');
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
logger.debug('No configuration file found');
|
|
33
|
-
}
|
|
34
|
-
const profileConfiguration = configFile ? await (0, index_1.fromFile)(logger, cwd, configFile, options.profiles) : {};
|
|
35
|
-
// if a feature was passed in on command line it's added
|
|
36
|
-
// to the provided configuration as paths. We need to clear
|
|
37
|
-
// any paths from configuration so that only the feature passed
|
|
38
|
-
// in is executed.
|
|
39
|
-
const paths = options.provided.paths;
|
|
40
|
-
if (paths && paths?.length > 0) {
|
|
41
|
-
profileConfiguration.paths = [];
|
|
42
|
-
}
|
|
43
|
-
const original = (0, index_1.mergeConfigurations)(index_1.DEFAULT_CONFIGURATION, profileConfiguration, (0, index_1.parseConfiguration)(logger, 'Provided', options.provided));
|
|
44
|
-
switch (original.transpiler) {
|
|
45
|
-
case 'esvue':
|
|
46
|
-
original.requireModule.push('@lynxwall/cucumber-tsflow/lib/esvue');
|
|
47
|
-
break;
|
|
48
|
-
case 'tsvue':
|
|
49
|
-
original.requireModule.push('@lynxwall/cucumber-tsflow/lib/tsvue');
|
|
50
|
-
break;
|
|
51
|
-
case 'tsnode':
|
|
52
|
-
original.requireModule.push('@lynxwall/cucumber-tsflow/lib/tsnode');
|
|
53
|
-
break;
|
|
54
|
-
default:
|
|
55
|
-
// defaulting to esbuild
|
|
56
|
-
original.requireModule.push('@lynxwall/cucumber-tsflow/lib/esnode');
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
// set the snippet syntax
|
|
60
|
-
if (!original.formatOptions.snippetSyntax) {
|
|
61
|
-
original.formatOptions.snippetSyntax = '@lynxwall/cucumber-tsflow/lib/snippet.js';
|
|
62
|
-
}
|
|
63
|
-
// look for behave format
|
|
64
|
-
for (let idx = 0; idx < original.format.length; idx++) {
|
|
65
|
-
if (typeof original.format[idx] === 'string') {
|
|
66
|
-
const formatItem = original.format[idx];
|
|
67
|
-
if (formatItem.startsWith('behave:')) {
|
|
68
|
-
original.format[idx] = formatItem.replace('behave', '@lynxwall/cucumber-tsflow/lib/behave.js');
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else if (original.format[idx].length > 0) {
|
|
72
|
-
const formatItem = original.format[idx][0];
|
|
73
|
-
if (formatItem.startsWith('behave')) {
|
|
74
|
-
const newVal = formatItem.replace('behave', '@lynxwall/cucumber-tsflow/lib/behave.js');
|
|
75
|
-
original.format[idx] = original.format[idx].length > 1 ? [newVal, original.format[idx][1]] : [newVal];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
// look for junitbamboo format
|
|
80
|
-
for (let idx = 0; idx < original.format.length; idx++) {
|
|
81
|
-
if (typeof original.format[idx] === 'string') {
|
|
82
|
-
const formatItem = original.format[idx];
|
|
83
|
-
if (formatItem.startsWith('junitbamboo:')) {
|
|
84
|
-
original.format[idx] = formatItem.replace('junitbamboo', '@lynxwall/cucumber-tsflow/lib/junitbamboo.js');
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
else if (original.format[idx].length > 0) {
|
|
88
|
-
const formatItem = original.format[idx][0];
|
|
89
|
-
if (formatItem.startsWith('junitbamboo')) {
|
|
90
|
-
const newVal = formatItem.replace('junitbamboo', '@lynxwall/cucumber-tsflow/lib/junitbamboo.js');
|
|
91
|
-
original.format[idx] = original.format[idx].length > 1 ? [newVal, original.format[idx][1]] : [newVal];
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
// check to see if a debugFile was passed in
|
|
96
|
-
if ((0, helpers_1.hasStringValue)(original.debugFile)) {
|
|
97
|
-
// Initialize gherkin manager with path to feature files
|
|
98
|
-
const gherkin = new gherkin_manager_1.default();
|
|
99
|
-
await gherkin.loadFeatures(original.paths);
|
|
100
|
-
const features = gherkin.findFeaturesByStepFile(original.debugFile);
|
|
101
|
-
if (features.length > 0) {
|
|
102
|
-
original.paths = [];
|
|
103
|
-
features.forEach(x => original.paths.push(x.featureFile));
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
// log a message if the feature path is not found
|
|
107
|
-
logger.warn(ansis_1.default.yellow(`\nUnable to find feature for debugFile: ${original.debugFile}`));
|
|
108
|
-
logger.warn(ansis_1.default.yellow('All tests will be executed\n'));
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
// check to see if enable-vue-style was set
|
|
112
|
-
// if not, default it to false
|
|
113
|
-
if (original.enableVueStyle === null || original.enableVueStyle === undefined) {
|
|
114
|
-
original.enableVueStyle = false;
|
|
115
|
-
}
|
|
116
|
-
(0, validate_configuration_1.validateConfiguration)(original, logger);
|
|
117
|
-
const runnable = await (0, convert_configuration_1.convertConfiguration)(logger, original, env);
|
|
118
|
-
return {
|
|
119
|
-
useConfiguration: original,
|
|
120
|
-
runConfiguration: runnable
|
|
121
|
-
};
|
|
122
|
-
};
|
|
123
|
-
exports.loadConfiguration = loadConfiguration;
|
|
124
|
-
//# sourceMappingURL=load-configuration.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"load-configuration.js","sourceRoot":"","sources":["../../src/cli/load-configuration.ts"],"names":[],"mappings":"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","sourcesContent":["import { ILoadConfigurationOptions, IRunConfiguration } from '@cucumber/cucumber/lib/api/types';\r\nimport { locateFile } from '@cucumber/cucumber/lib/configuration/locate_file';\r\nimport {\r\n\tDEFAULT_CONFIGURATION,\r\n\tfromFile,\r\n\tIConfiguration,\r\n\tparseConfiguration,\r\n\tmergeConfigurations\r\n} from '@cucumber/cucumber/lib/configuration/index';\r\nimport { validateConfiguration } from '@cucumber/cucumber/lib/configuration/validate_configuration';\r\nimport { convertConfiguration } from '@cucumber/cucumber/lib/api/convert_configuration';\r\nimport { IRunEnvironment, makeEnvironment } from '@cucumber/cucumber/lib/environment/index';\r\nimport { ITsflowConfiguration } from './argv-parser';\r\nimport { hasStringValue } from '../utils/helpers';\r\nimport GherkinManager from '../gherkin/gherkin-manager';\r\nimport chalk from 'ansis';\r\n\r\nexport interface ITsflowResolvedConfiguration {\r\n\t/**\r\n\t * The final flat configuration object resolved from the configuration file/profiles plus any extra provided.\r\n\t */\r\n\tuseConfiguration: ITsflowConfiguration;\r\n\t/**\r\n\t * The format that can be passed into `runCucumber`.\r\n\t */\r\n\trunConfiguration: IRunConfiguration;\r\n}\r\n\r\n/**\r\n * Load user-authored configuration to be used in a test run.\r\n *\r\n * @public\r\n * @param options - Coordinates required to find configuration.\r\n * @param environment - Project environment.\r\n */\r\nexport const loadConfiguration = async (\r\n\toptions: ILoadConfigurationOptions = {},\r\n\tenvironment: IRunEnvironment = {}\r\n): Promise<ITsflowResolvedConfiguration> => {\r\n\tconst { cwd, env, logger } = makeEnvironment(environment);\r\n\tconst configFile = options.file ?? locateFile(cwd);\r\n\tif (configFile) {\r\n\t\tlogger.debug(`Configuration will be loaded from \"${configFile}\"`);\r\n\t} else if (configFile === false) {\r\n\t\tlogger.debug('Skipping configuration file resolution');\r\n\t} else {\r\n\t\tlogger.debug('No configuration file found');\r\n\t}\r\n\tconst profileConfiguration = configFile ? await fromFile(logger, cwd, configFile, options.profiles) : {};\r\n\r\n\t// if a feature was passed in on command line it's added\r\n\t// to the provided configuration as paths. We need to clear\r\n\t// any paths from configuration so that only the feature passed\r\n\t// in is executed.\r\n\tconst paths = (options.provided as Partial<IConfiguration>).paths;\r\n\tif (paths && paths?.length > 0) {\r\n\t\tprofileConfiguration.paths = [];\r\n\t}\r\n\r\n\tconst original = mergeConfigurations(\r\n\t\tDEFAULT_CONFIGURATION,\r\n\t\tprofileConfiguration,\r\n\t\tparseConfiguration(logger, 'Provided', options.provided)\r\n\t) as ITsflowConfiguration;\r\n\r\n\tswitch (original.transpiler) {\r\n\t\tcase 'esvue':\r\n\t\t\toriginal.requireModule.push('@lynxwall/cucumber-tsflow/lib/esvue');\r\n\t\t\tbreak;\r\n\t\tcase 'tsvue':\r\n\t\t\toriginal.requireModule.push('@lynxwall/cucumber-tsflow/lib/tsvue');\r\n\t\t\tbreak;\r\n\t\tcase 'tsnode':\r\n\t\t\toriginal.requireModule.push('@lynxwall/cucumber-tsflow/lib/tsnode');\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\t// defaulting to esbuild\r\n\t\t\toriginal.requireModule.push('@lynxwall/cucumber-tsflow/lib/esnode');\r\n\t\t\tbreak;\r\n\t}\r\n\t// set the snippet syntax\r\n\tif (!original.formatOptions.snippetSyntax) {\r\n\t\toriginal.formatOptions.snippetSyntax = '@lynxwall/cucumber-tsflow/lib/snippet.js';\r\n\t}\r\n\t// look for behave format\r\n\tfor (let idx = 0; idx < original.format.length; idx++) {\r\n\t\tif (typeof original.format[idx] === 'string') {\r\n\t\t\tconst formatItem = original.format[idx] as string;\r\n\t\t\tif (formatItem.startsWith('behave:')) {\r\n\t\t\t\toriginal.format[idx] = formatItem.replace('behave', '@lynxwall/cucumber-tsflow/lib/behave.js');\r\n\t\t\t}\r\n\t\t} else if (original.format[idx].length > 0) {\r\n\t\t\tconst formatItem = original.format[idx][0] as string;\r\n\t\t\tif (formatItem.startsWith('behave')) {\r\n\t\t\t\tconst newVal = formatItem.replace('behave', '@lynxwall/cucumber-tsflow/lib/behave.js');\r\n\t\t\t\toriginal.format[idx] = original.format[idx].length > 1 ? [newVal, original.format[idx][1]] : [newVal];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// look for junitbamboo format\r\n\tfor (let idx = 0; idx < original.format.length; idx++) {\r\n\t\tif (typeof original.format[idx] === 'string') {\r\n\t\t\tconst formatItem = original.format[idx] as string;\r\n\t\t\tif (formatItem.startsWith('junitbamboo:')) {\r\n\t\t\t\toriginal.format[idx] = formatItem.replace('junitbamboo', '@lynxwall/cucumber-tsflow/lib/junitbamboo.js');\r\n\t\t\t}\r\n\t\t} else if (original.format[idx].length > 0) {\r\n\t\t\tconst formatItem = original.format[idx][0] as string;\r\n\t\t\tif (formatItem.startsWith('junitbamboo')) {\r\n\t\t\t\tconst newVal = formatItem.replace('junitbamboo', '@lynxwall/cucumber-tsflow/lib/junitbamboo.js');\r\n\t\t\t\toriginal.format[idx] = original.format[idx].length > 1 ? [newVal, original.format[idx][1]] : [newVal];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// check to see if a debugFile was passed in\r\n\tif (hasStringValue(original.debugFile)) {\r\n\t\t// Initialize gherkin manager with path to feature files\r\n\t\tconst gherkin = new GherkinManager();\r\n\t\tawait gherkin.loadFeatures(original.paths);\r\n\t\tconst features = gherkin.findFeaturesByStepFile(original.debugFile);\r\n\t\tif (features.length > 0) {\r\n\t\t\toriginal.paths = [];\r\n\t\t\tfeatures.forEach(x => original.paths.push(x.featureFile));\r\n\t\t} else {\r\n\t\t\t// log a message if the feature path is not found\r\n\t\t\tlogger.warn(chalk.yellow(`\\nUnable to find feature for debugFile: ${original.debugFile}`));\r\n\t\t\tlogger.warn(chalk.yellow('All tests will be executed\\n'));\r\n\t\t}\r\n\t}\r\n\r\n\t// check to see if enable-vue-style was set\r\n\t// if not, default it to false\r\n\tif (original.enableVueStyle === null || original.enableVueStyle === undefined) {\r\n\t\toriginal.enableVueStyle = false;\r\n\t}\r\n\r\n\tvalidateConfiguration(original, logger);\r\n\tconst runnable = await convertConfiguration(logger, original, env);\r\n\treturn {\r\n\t\tuseConfiguration: original,\r\n\t\trunConfiguration: runnable\r\n\t};\r\n};\r\n"]}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'node:events';
|
|
2
|
-
import { IdGenerator } from '@cucumber/messages';
|
|
3
|
-
import { SourcedPickle } from '@cucumber/cucumber/lib/assemble/index';
|
|
4
|
-
import { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';
|
|
5
|
-
import { RuntimeAdapter } from '@cucumber/cucumber/lib/runtime/types';
|
|
6
|
-
import { Runtime } from '@cucumber/cucumber/lib/runtime/index';
|
|
7
|
-
export declare class Coordinator implements Runtime {
|
|
8
|
-
private eventBroadcaster;
|
|
9
|
-
private newId;
|
|
10
|
-
private sourcedPickles;
|
|
11
|
-
private supportCodeLibrary;
|
|
12
|
-
private adapter;
|
|
13
|
-
constructor(eventBroadcaster: EventEmitter, newId: IdGenerator.NewId, sourcedPickles: ReadonlyArray<SourcedPickle>, supportCodeLibrary: SupportCodeLibrary, adapter: RuntimeAdapter);
|
|
14
|
-
run(): Promise<boolean>;
|
|
15
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Coordinator = void 0;
|
|
4
|
-
const index_1 = require("@cucumber/cucumber/lib/assemble/index");
|
|
5
|
-
const stopwatch_1 = require("@cucumber/cucumber/lib/runtime/stopwatch");
|
|
6
|
-
class Coordinator {
|
|
7
|
-
eventBroadcaster;
|
|
8
|
-
newId;
|
|
9
|
-
sourcedPickles;
|
|
10
|
-
supportCodeLibrary;
|
|
11
|
-
adapter;
|
|
12
|
-
constructor(eventBroadcaster, newId, sourcedPickles, supportCodeLibrary, adapter) {
|
|
13
|
-
this.eventBroadcaster = eventBroadcaster;
|
|
14
|
-
this.newId = newId;
|
|
15
|
-
this.sourcedPickles = sourcedPickles;
|
|
16
|
-
this.supportCodeLibrary = supportCodeLibrary;
|
|
17
|
-
this.adapter = adapter;
|
|
18
|
-
}
|
|
19
|
-
async run() {
|
|
20
|
-
const testRunStartedId = this.newId();
|
|
21
|
-
this.eventBroadcaster.emit('envelope', {
|
|
22
|
-
testRunStarted: {
|
|
23
|
-
id: testRunStartedId,
|
|
24
|
-
timestamp: (0, stopwatch_1.timestamp)(),
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
const assembledTestCases = await (0, index_1.assembleTestCases)(testRunStartedId, this.eventBroadcaster, this.newId, this.sourcedPickles, this.supportCodeLibrary);
|
|
28
|
-
const success = await this.adapter.run(assembledTestCases);
|
|
29
|
-
this.eventBroadcaster.emit('envelope', {
|
|
30
|
-
testRunFinished: {
|
|
31
|
-
testRunStartedId,
|
|
32
|
-
timestamp: (0, stopwatch_1.timestamp)(),
|
|
33
|
-
success,
|
|
34
|
-
},
|
|
35
|
-
});
|
|
36
|
-
return success;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
exports.Coordinator = Coordinator;
|
|
40
|
-
//# sourceMappingURL=coordinator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator.js","sourceRoot":"","sources":["../../src/cucumber/coordinator.ts"],"names":[],"mappings":";;;AAEA,iEAAwF;AAGxF,wEAAoE;AAGpE,MAAa,WAAW;IAEZ;IACA;IACA;IACA;IACA;IALV,YACU,gBAA8B,EAC9B,KAAwB,EACxB,cAA4C,EAC5C,kBAAsC,EACtC,OAAuB;QAJvB,qBAAgB,GAAhB,gBAAgB,CAAc;QAC9B,UAAK,GAAL,KAAK,CAAmB;QACxB,mBAAc,GAAd,cAAc,CAA8B;QAC5C,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,YAAO,GAAP,OAAO,CAAgB;IAC9B,CAAC;IAEJ,KAAK,CAAC,GAAG;QACP,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;QAErC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE;YACrC,cAAc,EAAE;gBACd,EAAE,EAAE,gBAAgB;gBACpB,SAAS,EAAE,IAAA,qBAAS,GAAE;aACvB;SACiB,CAAC,CAAA;QAErB,MAAM,kBAAkB,GAAG,MAAM,IAAA,yBAAiB,EAChD,gBAAgB,EAChB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,kBAAkB,CACxB,CAAA;QAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QAE1D,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,EAAE;YACrC,eAAe,EAAE;gBACf,gBAAgB;gBAChB,SAAS,EAAE,IAAA,qBAAS,GAAE;gBACtB,OAAO;aACR;SACiB,CAAC,CAAA;QAErB,OAAO,OAAO,CAAA;IAChB,CAAC;CACF;AAvCD,kCAuCC","sourcesContent":["import { EventEmitter } from 'node:events'\r\nimport { Envelope, IdGenerator } from '@cucumber/messages'\r\nimport { assembleTestCases, SourcedPickle } from '@cucumber/cucumber/lib/assemble/index'\r\nimport { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types'\r\nimport { RuntimeAdapter } from '@cucumber/cucumber/lib/runtime/types'\r\nimport { timestamp } from '@cucumber/cucumber/lib/runtime/stopwatch'\r\nimport { Runtime } from '@cucumber/cucumber/lib/runtime/index'\r\n\r\nexport class Coordinator implements Runtime {\r\n constructor(\r\n private eventBroadcaster: EventEmitter,\r\n private newId: IdGenerator.NewId,\r\n private sourcedPickles: ReadonlyArray<SourcedPickle>,\r\n private supportCodeLibrary: SupportCodeLibrary,\r\n private adapter: RuntimeAdapter\r\n ) {}\r\n\r\n async run(): Promise<boolean> {\r\n const testRunStartedId = this.newId()\r\n\r\n this.eventBroadcaster.emit('envelope', {\r\n testRunStarted: {\r\n id: testRunStartedId,\r\n timestamp: timestamp(),\r\n },\r\n } satisfies Envelope)\r\n\r\n const assembledTestCases = await assembleTestCases(\r\n testRunStartedId,\r\n this.eventBroadcaster,\r\n this.newId,\r\n this.sourcedPickles,\r\n this.supportCodeLibrary\r\n )\r\n\r\n const success = await this.adapter.run(assembledTestCases)\r\n\r\n this.eventBroadcaster.emit('envelope', {\r\n testRunFinished: {\r\n testRunStartedId,\r\n timestamp: timestamp(),\r\n success,\r\n },\r\n } satisfies Envelope)\r\n\r\n return success\r\n }\r\n}\r\n"]}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'node:events';
|
|
2
|
-
import { IdGenerator } from '@cucumber/messages';
|
|
3
|
-
import { IRunOptionsRuntime } from '@cucumber/cucumber/lib/api/index';
|
|
4
|
-
import { ILogger } from '@cucumber/cucumber/lib/environment/index';
|
|
5
|
-
import { SourcedPickle } from '@cucumber/cucumber/lib/assemble/index';
|
|
6
|
-
import { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types';
|
|
7
|
-
import { IRunEnvironment } from '@cucumber/cucumber/lib/environment/index';
|
|
8
|
-
import { Runtime } from '@cucumber/cucumber/lib/runtime/types';
|
|
9
|
-
/**
|
|
10
|
-
* Extending this function from cucumber.js to use our own implementation
|
|
11
|
-
* of the Coordinator.
|
|
12
|
-
*/
|
|
13
|
-
export declare function makeRuntime({ environment, logger, eventBroadcaster, sourcedPickles, newId, supportCodeLibrary, options, }: {
|
|
14
|
-
environment: IRunEnvironment;
|
|
15
|
-
logger: ILogger;
|
|
16
|
-
eventBroadcaster: EventEmitter;
|
|
17
|
-
newId: IdGenerator.NewId;
|
|
18
|
-
sourcedPickles: ReadonlyArray<SourcedPickle>;
|
|
19
|
-
supportCodeLibrary: SupportCodeLibrary;
|
|
20
|
-
options: IRunOptionsRuntime;
|
|
21
|
-
}): Promise<Runtime>;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeRuntime = makeRuntime;
|
|
4
|
-
const adapter_1 = require("./parallel/adapter");
|
|
5
|
-
const adapter_2 = require("./serial/adapter");
|
|
6
|
-
const coordinator_1 = require("./coordinator");
|
|
7
|
-
/**
|
|
8
|
-
* Extending this function from cucumber.js to use our own implementation
|
|
9
|
-
* of the Coordinator.
|
|
10
|
-
*/
|
|
11
|
-
async function makeRuntime({ environment, logger, eventBroadcaster, sourcedPickles, newId, supportCodeLibrary, options, }) {
|
|
12
|
-
const adapter = options.parallel > 0
|
|
13
|
-
? new adapter_1.ChildProcessAdapter(environment, logger, eventBroadcaster, options, supportCodeLibrary)
|
|
14
|
-
: new adapter_2.InProcessAdapter(eventBroadcaster, newId, options, supportCodeLibrary);
|
|
15
|
-
return new coordinator_1.Coordinator(eventBroadcaster, newId, sourcedPickles, supportCodeLibrary, adapter);
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=make-runtime.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"make-runtime.js","sourceRoot":"","sources":["../../src/cucumber/make-runtime.ts"],"names":[],"mappings":";;AAgBA,kCAuCC;AA/CD,gDAAwD;AACxD,8CAAmD;AACnD,+CAA2C;AAE3C;;;GAGG;AACI,KAAK,UAAU,WAAW,CAAC,EAChC,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,cAAc,EACd,KAAK,EACL,kBAAkB,EAClB,OAAO,GASR;IACC,MAAM,OAAO,GACX,OAAO,CAAC,QAAQ,GAAG,CAAC;QAClB,CAAC,CAAC,IAAI,6BAAmB,CACrB,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,OAAO,EACP,kBAAkB,CACnB;QACH,CAAC,CAAC,IAAI,0BAAgB,CAClB,gBAAgB,EAChB,KAAK,EACL,OAAO,EACP,kBAAkB,CACnB,CAAA;IACP,OAAO,IAAI,yBAAW,CACpB,gBAAgB,EAChB,KAAK,EACL,cAAc,EACd,kBAAkB,EAClB,OAAO,CACR,CAAA;AACH,CAAC","sourcesContent":["import { EventEmitter } from 'node:events'\r\nimport { IdGenerator } from '@cucumber/messages'\r\nimport { IRunOptionsRuntime } from '@cucumber/cucumber/lib/api/index'\r\nimport { ILogger } from '@cucumber/cucumber/lib/environment/index'\r\nimport { SourcedPickle } from '@cucumber/cucumber/lib/assemble/index'\r\nimport { SupportCodeLibrary } from '@cucumber/cucumber/lib/support_code_library_builder/types'\r\nimport { IRunEnvironment } from '@cucumber/cucumber/lib/environment/index'\r\nimport { Runtime, RuntimeAdapter } from '@cucumber/cucumber/lib/runtime/types'\r\nimport { ChildProcessAdapter } from './parallel/adapter'\r\nimport { InProcessAdapter } from './serial/adapter'\r\nimport { Coordinator } from './coordinator'\r\n\r\n/**\r\n * Extending this function from cucumber.js to use our own implementation\r\n * of the Coordinator.\r\n */\r\nexport async function makeRuntime({\r\n environment,\r\n logger,\r\n eventBroadcaster,\r\n sourcedPickles,\r\n newId,\r\n supportCodeLibrary,\r\n options,\r\n}: {\r\n environment: IRunEnvironment\r\n logger: ILogger\r\n eventBroadcaster: EventEmitter\r\n newId: IdGenerator.NewId\r\n sourcedPickles: ReadonlyArray<SourcedPickle>\r\n supportCodeLibrary: SupportCodeLibrary\r\n options: IRunOptionsRuntime\r\n}): Promise<Runtime> {\r\n const adapter: RuntimeAdapter =\r\n options.parallel > 0\r\n ? new ChildProcessAdapter(\r\n environment,\r\n logger,\r\n eventBroadcaster,\r\n options,\r\n supportCodeLibrary\r\n )\r\n : new InProcessAdapter(\r\n eventBroadcaster,\r\n newId,\r\n options,\r\n supportCodeLibrary\r\n )\r\n return new Coordinator(\r\n eventBroadcaster,\r\n newId,\r\n sourcedPickles,\r\n supportCodeLibrary,\r\n adapter\r\n )\r\n}\r\n"]}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { ContextType } from '../types/types';
|
|
2
|
-
import { ScenarioContext, ScenarioInfo } from '../types/scenario-context';
|
|
3
|
-
import { EndTestCaseInfo, StartTestCaseInfo } from './test-case-info';
|
|
4
|
-
import { World } from '@cucumber/cucumber';
|
|
5
|
-
/**
|
|
6
|
-
* Represents a [[ScenarioContext]] implementation that manages a collection of context objects that
|
|
7
|
-
* are created and used by binding classes during a running Cucumber scenario.
|
|
8
|
-
*/
|
|
9
|
-
export declare class ManagedScenarioContext implements ScenarioContext {
|
|
10
|
-
private _scenarioInfo;
|
|
11
|
-
private _activeObjects;
|
|
12
|
-
constructor(scenarioTitle: string, tags: string[]);
|
|
13
|
-
/**
|
|
14
|
-
* Gets information about the scenario.
|
|
15
|
-
*
|
|
16
|
-
*/
|
|
17
|
-
get scenarioInfo(): ScenarioInfo;
|
|
18
|
-
getOrActivateBindingClass(classPrototype: any, contextTypes: ContextType[], worldObj: World): any;
|
|
19
|
-
/**
|
|
20
|
-
* If context objects are passed into our step, this function will
|
|
21
|
-
* call initialize on the context objects only once.
|
|
22
|
-
* Using Promise.resolve so that initialize can be synchronous or async.
|
|
23
|
-
*/
|
|
24
|
-
initialize(startTestCase: StartTestCaseInfo): Promise<void>;
|
|
25
|
-
/**
|
|
26
|
-
* All objects support dispose, which is executed when a
|
|
27
|
-
* test run is ended. Using Promise.resolve to support
|
|
28
|
-
* synchronous or async functions.
|
|
29
|
-
*/
|
|
30
|
-
dispose(endTestCase: EndTestCaseInfo): Promise<void>;
|
|
31
|
-
private activateBindingClass;
|
|
32
|
-
/**
|
|
33
|
-
* Get or activate any object
|
|
34
|
-
*
|
|
35
|
-
* @param classPrototype prototype for the object
|
|
36
|
-
* @param activatorFunc callback function used to create an instance of the object
|
|
37
|
-
* @param optional optional parameter passed into constructors
|
|
38
|
-
* @returns
|
|
39
|
-
*/
|
|
40
|
-
private getOrActivateObject;
|
|
41
|
-
/**
|
|
42
|
-
* Get or activate Context objects. Marks an object as a context
|
|
43
|
-
* object in ActiveInfo to let the system know it supports an initialize function.
|
|
44
|
-
*
|
|
45
|
-
* @param classPrototype prototype for the object
|
|
46
|
-
* @param activatorFunc callback function used to create an instance of the object
|
|
47
|
-
* @param optional optional parameter passed into constructors
|
|
48
|
-
* @returns
|
|
49
|
-
*/
|
|
50
|
-
private getOrActivateContext;
|
|
51
|
-
}
|
|
52
|
-
export * from '../types/scenario-context';
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
-
};
|
|
19
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.ManagedScenarioContext = void 0;
|
|
21
|
-
const underscore_1 = __importDefault(require("underscore"));
|
|
22
|
-
const scenario_context_1 = require("../types/scenario-context");
|
|
23
|
-
class ActiveInfo {
|
|
24
|
-
constructor(obj, isContext = false) {
|
|
25
|
-
this.activeObject = obj;
|
|
26
|
-
this.isContext = isContext;
|
|
27
|
-
}
|
|
28
|
-
activeObject;
|
|
29
|
-
isContext;
|
|
30
|
-
initialized = false;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Represents a [[ScenarioContext]] implementation that manages a collection of context objects that
|
|
34
|
-
* are created and used by binding classes during a running Cucumber scenario.
|
|
35
|
-
*/
|
|
36
|
-
class ManagedScenarioContext {
|
|
37
|
-
_scenarioInfo;
|
|
38
|
-
_activeObjects = new Map();
|
|
39
|
-
constructor(scenarioTitle, tags) {
|
|
40
|
-
this._scenarioInfo = new scenario_context_1.ScenarioInfo(scenarioTitle, tags);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Gets information about the scenario.
|
|
44
|
-
*
|
|
45
|
-
*/
|
|
46
|
-
get scenarioInfo() {
|
|
47
|
-
return this._scenarioInfo;
|
|
48
|
-
}
|
|
49
|
-
getOrActivateBindingClass(classPrototype, contextTypes, worldObj) {
|
|
50
|
-
return this.getOrActivateObject(classPrototype, () => {
|
|
51
|
-
return this.activateBindingClass(classPrototype, contextTypes, worldObj);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* If context objects are passed into our step, this function will
|
|
56
|
-
* call initialize on the context objects only once.
|
|
57
|
-
* Using Promise.resolve so that initialize can be synchronous or async.
|
|
58
|
-
*/
|
|
59
|
-
async initialize(startTestCase) {
|
|
60
|
-
for (const [_key, value] of this._activeObjects) {
|
|
61
|
-
if (value.isContext && !value.initialized && typeof value.activeObject.initialize === 'function') {
|
|
62
|
-
await Promise.resolve(value.activeObject.initialize(startTestCase));
|
|
63
|
-
value.initialized = true;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* All objects support dispose, which is executed when a
|
|
69
|
-
* test run is ended. Using Promise.resolve to support
|
|
70
|
-
* synchronous or async functions.
|
|
71
|
-
*/
|
|
72
|
-
async dispose(endTestCase) {
|
|
73
|
-
for (const [_key, value] of this._activeObjects) {
|
|
74
|
-
if (typeof value.activeObject.dispose === 'function') {
|
|
75
|
-
await Promise.resolve(value.activeObject.dispose(endTestCase));
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
activateBindingClass(classPrototype, contextTypes, worldObj) {
|
|
80
|
-
const invokeBindingConstructor = (args) => {
|
|
81
|
-
switch (contextTypes.length) {
|
|
82
|
-
case 0:
|
|
83
|
-
return new classPrototype.constructor();
|
|
84
|
-
case 1:
|
|
85
|
-
return new classPrototype.constructor(args[0]);
|
|
86
|
-
case 2:
|
|
87
|
-
return new classPrototype.constructor(args[0], args[1]);
|
|
88
|
-
case 3:
|
|
89
|
-
return new classPrototype.constructor(args[0], args[1], args[2]);
|
|
90
|
-
case 4:
|
|
91
|
-
return new classPrototype.constructor(args[0], args[1], args[2], args[3]);
|
|
92
|
-
case 5:
|
|
93
|
-
return new classPrototype.constructor(args[0], args[1], args[2], args[3], args[4]);
|
|
94
|
-
case 6:
|
|
95
|
-
return new classPrototype.constructor(args[0], args[1], args[2], args[3], args[4], args[5]);
|
|
96
|
-
case 7:
|
|
97
|
-
return new classPrototype.constructor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
|
|
98
|
-
case 8:
|
|
99
|
-
return new classPrototype.constructor(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
|
|
100
|
-
case 9:
|
|
101
|
-
return new classPrototype.constructor(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
|
|
102
|
-
case 10:
|
|
103
|
-
return new classPrototype.constructor(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
const contextObjects = underscore_1.default.map(contextTypes, contextType => this.getOrActivateContext(contextType.prototype, (worldObj) => {
|
|
107
|
-
return new contextType(worldObj);
|
|
108
|
-
}, worldObj));
|
|
109
|
-
return invokeBindingConstructor(contextObjects);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* Get or activate any object
|
|
113
|
-
*
|
|
114
|
-
* @param classPrototype prototype for the object
|
|
115
|
-
* @param activatorFunc callback function used to create an instance of the object
|
|
116
|
-
* @param optional optional parameter passed into constructors
|
|
117
|
-
* @returns
|
|
118
|
-
*/
|
|
119
|
-
getOrActivateObject(classPrototype, activatorFunc, optional) {
|
|
120
|
-
let activeObject = this._activeObjects.get(classPrototype)?.activeObject;
|
|
121
|
-
if (activeObject) {
|
|
122
|
-
return activeObject;
|
|
123
|
-
}
|
|
124
|
-
activeObject = activatorFunc(optional);
|
|
125
|
-
this._activeObjects.set(classPrototype, new ActiveInfo(activeObject));
|
|
126
|
-
return activeObject;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Get or activate Context objects. Marks an object as a context
|
|
130
|
-
* object in ActiveInfo to let the system know it supports an initialize function.
|
|
131
|
-
*
|
|
132
|
-
* @param classPrototype prototype for the object
|
|
133
|
-
* @param activatorFunc callback function used to create an instance of the object
|
|
134
|
-
* @param optional optional parameter passed into constructors
|
|
135
|
-
* @returns
|
|
136
|
-
*/
|
|
137
|
-
getOrActivateContext(classPrototype, activatorFunc, optional) {
|
|
138
|
-
let activeObject = this._activeObjects.get(classPrototype)?.activeObject;
|
|
139
|
-
if (activeObject) {
|
|
140
|
-
return activeObject;
|
|
141
|
-
}
|
|
142
|
-
activeObject = activatorFunc(optional);
|
|
143
|
-
this._activeObjects.set(classPrototype, new ActiveInfo(activeObject, true));
|
|
144
|
-
return activeObject;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
exports.ManagedScenarioContext = ManagedScenarioContext;
|
|
148
|
-
__exportStar(require("../types/scenario-context"), exports);
|
|
149
|
-
//# sourceMappingURL=managed-scenario-context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"managed-scenario-context.js","sourceRoot":"","sources":["../../src/cucumber/managed-scenario-context.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'underscore';\r\n\r\nimport { ContextType } from '../types/types';\r\nimport { ScenarioContext, ScenarioInfo } from '../types/scenario-context';\r\nimport { EndTestCaseInfo, StartTestCaseInfo } from './test-case-info';\r\nimport { World } from '@cucumber/cucumber';\r\n\r\nclass ActiveInfo {\r\n\tconstructor(obj: any, isContext: boolean = false) {\r\n\t\tthis.activeObject = obj;\r\n\t\tthis.isContext = isContext;\r\n\t}\r\n\tactiveObject: any;\r\n\tisContext: boolean;\r\n\tinitialized: boolean = false;\r\n}\r\n\r\n/**\r\n * Represents a [[ScenarioContext]] implementation that manages a collection of context objects that\r\n * are created and used by binding classes during a running Cucumber scenario.\r\n */\r\nexport class ManagedScenarioContext implements ScenarioContext {\r\n\tprivate _scenarioInfo: ScenarioInfo;\r\n\tprivate _activeObjects = new Map<any, ActiveInfo>();\r\n\r\n\tconstructor(scenarioTitle: string, tags: string[]) {\r\n\t\tthis._scenarioInfo = new ScenarioInfo(scenarioTitle, tags);\r\n\t}\r\n\r\n\t/**\r\n\t * Gets information about the scenario.\r\n\t *\r\n\t */\r\n\tpublic get scenarioInfo(): ScenarioInfo {\r\n\t\treturn this._scenarioInfo;\r\n\t}\r\n\r\n\tpublic getOrActivateBindingClass(classPrototype: any, contextTypes: ContextType[], worldObj: World): any {\r\n\t\treturn this.getOrActivateObject(classPrototype, () => {\r\n\t\t\treturn this.activateBindingClass(classPrototype, contextTypes, worldObj);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * If context objects are passed into our step, this function will\r\n\t * call initialize on the context objects only once.\r\n\t * Using Promise.resolve so that initialize can be synchronous or async.\r\n\t */\r\n\tpublic async initialize(startTestCase: StartTestCaseInfo): Promise<void> {\r\n\t\tfor (const [_key, value] of this._activeObjects) {\r\n\t\t\tif (value.isContext && !value.initialized && typeof value.activeObject.initialize === 'function') {\r\n\t\t\t\tawait Promise.resolve(value.activeObject.initialize(startTestCase));\r\n\t\t\t\tvalue.initialized = true;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * All objects support dispose, which is executed when a\r\n\t * test run is ended. Using Promise.resolve to support\r\n\t * synchronous or async functions.\r\n\t */\r\n\tpublic async dispose(endTestCase: EndTestCaseInfo): Promise<void> {\r\n\t\tfor (const [_key, value] of this._activeObjects) {\r\n\t\t\tif (typeof value.activeObject.dispose === 'function') {\r\n\t\t\t\tawait Promise.resolve(value.activeObject.dispose(endTestCase));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate activateBindingClass(classPrototype: any, contextTypes: ContextType[], worldObj: World): any {\r\n\t\tconst invokeBindingConstructor = (args: any[]): any => {\r\n\t\t\tswitch (contextTypes.length) {\r\n\t\t\t\tcase 0:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)();\r\n\t\t\t\tcase 1:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)(args[0]);\r\n\t\t\t\tcase 2:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)(args[0], args[1]);\r\n\t\t\t\tcase 3:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)(args[0], args[1], args[2]);\r\n\t\t\t\tcase 4:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)(args[0], args[1], args[2], args[3]);\r\n\t\t\t\tcase 5:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)(args[0], args[1], args[2], args[3], args[4]);\r\n\t\t\t\tcase 6:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)(args[0], args[1], args[2], args[3], args[4], args[5]);\r\n\t\t\t\tcase 7:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\r\n\t\t\t\tcase 8:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)(\r\n\t\t\t\t\t\targs[0],\r\n\t\t\t\t\t\targs[1],\r\n\t\t\t\t\t\targs[2],\r\n\t\t\t\t\t\targs[3],\r\n\t\t\t\t\t\targs[4],\r\n\t\t\t\t\t\targs[5],\r\n\t\t\t\t\t\targs[6],\r\n\t\t\t\t\t\targs[7]\r\n\t\t\t\t\t);\r\n\t\t\t\tcase 9:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)(\r\n\t\t\t\t\t\targs[0],\r\n\t\t\t\t\t\targs[1],\r\n\t\t\t\t\t\targs[2],\r\n\t\t\t\t\t\targs[3],\r\n\t\t\t\t\t\targs[4],\r\n\t\t\t\t\t\targs[5],\r\n\t\t\t\t\t\targs[6],\r\n\t\t\t\t\t\targs[7],\r\n\t\t\t\t\t\targs[8]\r\n\t\t\t\t\t);\r\n\t\t\t\tcase 10:\r\n\t\t\t\t\treturn new (classPrototype.constructor as any)(\r\n\t\t\t\t\t\targs[0],\r\n\t\t\t\t\t\targs[1],\r\n\t\t\t\t\t\targs[2],\r\n\t\t\t\t\t\targs[3],\r\n\t\t\t\t\t\targs[4],\r\n\t\t\t\t\t\targs[5],\r\n\t\t\t\t\t\targs[6],\r\n\t\t\t\t\t\targs[7],\r\n\t\t\t\t\t\targs[8],\r\n\t\t\t\t\t\targs[9]\r\n\t\t\t\t\t);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst contextObjects = _.map(contextTypes, contextType =>\r\n\t\t\tthis.getOrActivateContext(\r\n\t\t\t\tcontextType.prototype,\r\n\t\t\t\t(worldObj?: any) => {\r\n\t\t\t\t\treturn new contextType(worldObj);\r\n\t\t\t\t},\r\n\t\t\t\tworldObj\r\n\t\t\t)\r\n\t\t);\r\n\r\n\t\treturn invokeBindingConstructor(contextObjects);\r\n\t}\r\n\r\n\t/**\r\n\t * Get or activate any object\r\n\t *\r\n\t * @param classPrototype prototype for the object\r\n\t * @param activatorFunc callback function used to create an instance of the object\r\n\t * @param optional optional parameter passed into constructors\r\n\t * @returns\r\n\t */\r\n\tprivate getOrActivateObject(classPrototype: any, activatorFunc: (...args: any[]) => any, optional?: any): any {\r\n\t\tlet activeObject = this._activeObjects.get(classPrototype)?.activeObject;\r\n\t\tif (activeObject) {\r\n\t\t\treturn activeObject;\r\n\t\t}\r\n\t\tactiveObject = activatorFunc(optional);\r\n\t\tthis._activeObjects.set(classPrototype, new ActiveInfo(activeObject));\r\n\t\treturn activeObject;\r\n\t}\r\n\r\n\t/**\r\n\t * Get or activate Context objects. Marks an object as a context\r\n\t * object in ActiveInfo to let the system know it supports an initialize function.\r\n\t *\r\n\t * @param classPrototype prototype for the object\r\n\t * @param activatorFunc callback function used to create an instance of the object\r\n\t * @param optional optional parameter passed into constructors\r\n\t * @returns\r\n\t */\r\n\tprivate getOrActivateContext(classPrototype: any, activatorFunc: (...args: any[]) => any, optional?: any): any {\r\n\t\tlet activeObject = this._activeObjects.get(classPrototype)?.activeObject;\r\n\t\tif (activeObject) {\r\n\t\t\treturn activeObject;\r\n\t\t}\r\n\t\tactiveObject = activatorFunc(optional);\r\n\t\tthis._activeObjects.set(classPrototype, new ActiveInfo(activeObject, true));\r\n\t\treturn activeObject;\r\n\t}\r\n}\r\n\r\nexport * from '../types/scenario-context';\r\n"]}
|