@lynxwall/cucumber-tsflow 4.1.7 → 5.0.3
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 +245 -73
- package/bin/cucumber-tsflow +2 -1
- package/lib/behave.js +25 -2
- package/lib/cli/argv-parser.d.ts +24 -0
- package/lib/cli/argv-parser.js +117 -0
- package/lib/cli/index.d.ts +22 -0
- package/lib/cli/index.js +105 -0
- package/lib/cli/load-configuration.d.ts +20 -0
- package/lib/cli/load-configuration.js +98 -0
- package/lib/cli/run.d.ts +1 -0
- package/lib/cli/run.js +54 -0
- package/lib/cucumber/binding-decorator.js +75 -87
- package/lib/cucumber/binding-registry.d.ts +8 -0
- package/lib/cucumber/binding-registry.js +62 -11
- package/lib/cucumber/hook-decorators.d.ts +30 -12
- package/lib/cucumber/hook-decorators.js +54 -23
- package/lib/cucumber/managed-scenario-context.js +6 -3
- package/lib/cucumber/message-collector.d.ts +55 -0
- package/lib/cucumber/message-collector.js +143 -0
- package/lib/cucumber/step-definition-decorators.js +15 -8
- package/lib/cucumber/utils.d.ts +16 -0
- package/lib/cucumber/utils.js +88 -0
- package/lib/esnode.d.ts +0 -0
- package/lib/esnode.js +20 -0
- package/lib/{tsflow.d.ts → esvue.d.ts} +0 -0
- package/lib/esvue.js +52 -0
- package/lib/formatters/behave-json-formatter.d.ts +36 -5
- package/lib/formatters/behave-json-formatter.js +36 -12
- package/lib/formatters/tsflow-snippet-syntax.js +44 -14
- package/lib/gherkin/configuration.d.ts +30 -0
- package/lib/gherkin/configuration.js +37 -0
- package/lib/gherkin/gherkin-feature.d.ts +28 -0
- package/lib/gherkin/gherkin-feature.js +345 -0
- package/lib/gherkin/gherkin-manager.d.ts +29 -0
- package/lib/gherkin/gherkin-manager.js +123 -0
- package/lib/gherkin/models.d.ts +45 -0
- package/lib/{tsflow.js → gherkin/models.js} +2 -4
- package/lib/snippet.d.ts +1 -0
- package/lib/snippet.js +38 -0
- package/lib/transpilers/esbuild-transpiler.d.ts +4 -0
- package/lib/transpilers/esbuild-transpiler.js +31 -0
- package/lib/transpilers/esbuild.d.ts +12 -0
- package/lib/transpilers/esbuild.js +66 -0
- package/lib/transpilers/vue-sfc/compiler.d.ts +7 -0
- package/lib/transpilers/vue-sfc/compiler.js +32 -0
- package/lib/transpilers/vue-sfc/index.d.ts +25 -0
- package/lib/transpilers/vue-sfc/index.js +62 -0
- package/lib/transpilers/vue-sfc/main.d.ts +8 -0
- package/lib/transpilers/vue-sfc/main.js +266 -0
- package/lib/transpilers/vue-sfc/script.d.ts +5 -0
- package/lib/transpilers/vue-sfc/script.js +53 -0
- package/lib/transpilers/vue-sfc/template.d.ts +8 -0
- package/lib/transpilers/vue-sfc/template.js +113 -0
- package/lib/transpilers/vue-sfc/types.d.ts +55 -0
- package/lib/transpilers/vue-sfc/types.js +13 -0
- package/lib/transpilers/vue-sfc/utils/descriptorCache.d.ts +13 -0
- package/lib/transpilers/vue-sfc/utils/descriptorCache.js +67 -0
- package/lib/transpilers/vue-sfc/utils/error.d.ts +3 -0
- package/lib/transpilers/vue-sfc/utils/error.js +33 -0
- package/lib/transpilers/vue-sfc/utils/query.d.ts +13 -0
- package/lib/transpilers/vue-sfc/utils/query.js +46 -0
- package/lib/tsnode.js +7 -9
- package/lib/tsvue.d.ts +1 -7
- package/lib/tsvue.js +47 -27
- package/lib/types/step-binding-flags.d.ts +9 -1
- package/lib/types/step-binding-flags.js +10 -2
- package/lib/types/step-binding.d.ts +8 -2
- package/lib/types/step-binding.js +1 -1
- package/lib/utils/helpers.d.ts +6 -0
- package/lib/utils/helpers.js +28 -0
- package/lib/utils/logger.js +25 -2
- package/lib/utils/our-callsite.d.ts +1 -0
- package/lib/utils/our-callsite.js +33 -4
- package/lib/version.d.ts +1 -0
- package/lib/version.js +16 -0
- package/package.json +20 -9
|
@@ -1,23 +1,45 @@
|
|
|
1
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
2
|
+
if (k2 === undefined) k2 = k;
|
|
3
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
4
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
5
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
6
|
+
}
|
|
7
|
+
Object.defineProperty(o, k2, desc);
|
|
8
|
+
}) : (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
o[k2] = m[k];
|
|
11
|
+
}));
|
|
12
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
13
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
14
|
+
}) : function(o, v) {
|
|
15
|
+
o["default"] = v;
|
|
16
|
+
});
|
|
17
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
18
|
+
if (mod && mod.__esModule) return mod;
|
|
19
|
+
var result = {};
|
|
20
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
21
|
+
__setModuleDefault(result, mod);
|
|
22
|
+
return result;
|
|
23
|
+
};
|
|
24
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
25
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
|
+
};
|
|
1
27
|
(function (factory) {
|
|
2
28
|
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
29
|
var v = factory(require, exports);
|
|
4
30
|
if (v !== undefined) module.exports = v;
|
|
5
31
|
}
|
|
6
32
|
else if (typeof define === "function" && define.amd) {
|
|
7
|
-
define(["require", "exports", "@cucumber/cucumber/lib/formatter/
|
|
33
|
+
define(["require", "exports", "@cucumber/cucumber/lib/formatter/helpers/index", "@cucumber/messages", "@cucumber/cucumber/lib/value_checker", "@cucumber/cucumber/lib/formatter/json_formatter"], factory);
|
|
8
34
|
}
|
|
9
35
|
})(function (require, exports) {
|
|
10
36
|
"use strict";
|
|
11
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const
|
|
13
|
-
const messages = require("@cucumber/messages");
|
|
38
|
+
const index_1 = require("@cucumber/cucumber/lib/formatter/helpers/index");
|
|
39
|
+
const messages = __importStar(require("@cucumber/messages"));
|
|
14
40
|
const value_checker_1 = require("@cucumber/cucumber/lib/value_checker");
|
|
15
|
-
const
|
|
16
|
-
const { getStepKeyword } =
|
|
17
|
-
/**
|
|
18
|
-
* Extending JsonFormatter.getStepData to add a name field to before
|
|
19
|
-
* and After steps so that json can be exported to Behave Pro (name on steps required)
|
|
20
|
-
*/
|
|
41
|
+
const json_formatter_1 = __importDefault(require("@cucumber/cucumber/lib/formatter/json_formatter"));
|
|
42
|
+
const { getStepKeyword } = index_1.PickleParser;
|
|
21
43
|
class BehaveJsonFormatter extends json_formatter_1.default {
|
|
22
44
|
getStepData({ isBeforeHook, gherkinStepMap, pickleStepMap, testStep, testStepAttachments, testStepResult }) {
|
|
23
45
|
var _a;
|
|
@@ -35,8 +57,9 @@
|
|
|
35
57
|
data.name = '';
|
|
36
58
|
}
|
|
37
59
|
if ((0, value_checker_1.doesHaveValue)(testStep.stepDefinitionIds) && ((_a = testStep.stepDefinitionIds) === null || _a === void 0 ? void 0 : _a.length) === 1) {
|
|
38
|
-
const
|
|
39
|
-
|
|
60
|
+
const stepDefinitionId = testStep.stepDefinitionIds[0];
|
|
61
|
+
const stepDefinition = this.supportCodeLibrary.stepDefinitions.find(s => s.id === stepDefinitionId);
|
|
62
|
+
data.match = { location: (0, index_1.formatLocation)(stepDefinition) };
|
|
40
63
|
}
|
|
41
64
|
const { message, status } = testStepResult;
|
|
42
65
|
data.result = {
|
|
@@ -58,5 +81,6 @@
|
|
|
58
81
|
}
|
|
59
82
|
}
|
|
60
83
|
exports.default = BehaveJsonFormatter;
|
|
84
|
+
BehaveJsonFormatter.documentation = 'Prints the feature as JSON that can be used with Behave Pro';
|
|
61
85
|
});
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVoYXZlLWpzb24tZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zvcm1hdHRlcnMvYmVoYXZlLWpzb24tZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFBQSwwRUFBOEY7SUFDOUYsNkRBQStDO0lBQy9DLHdFQUFxRTtJQUNyRSxxR0FBNEU7SUFFNUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLG9CQUFZLENBQUM7SUErQ3hDLE1BQXFCLG1CQUFvQixTQUFRLHdCQUFhO1FBRzdELFdBQVcsQ0FBQyxFQUNYLFlBQVksRUFDWixjQUFjLEVBQ2QsYUFBYSxFQUNiLFFBQVEsRUFDUixtQkFBbUIsRUFDbkIsY0FBYyxFQUNTOztZQUN2QixNQUFNLElBQUksR0FBYyxFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFBLDZCQUFhLEVBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN6QyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLFlBQXNCLENBQUMsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ3ZDLFVBQVUsQ0FBQyxRQUF1QyxFQUNsRCxjQUFjLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN4QyxDQUFDO2dCQUNGLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYyxDQUFDLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNuRSxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7YUFDNUI7aUJBQU07Z0JBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7YUFDZjtZQUNELElBQUksSUFBQSw2QkFBYSxFQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUEsTUFBQSxRQUFRLENBQUMsaUJBQWlCLDBDQUFFLE1BQU0sTUFBSyxDQUFDLEVBQUU7Z0JBQzFGLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztnQkFDcEcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLFFBQVEsRUFBRSxJQUFBLHNCQUFjLEVBQUMsY0FBNkIsQ0FBQyxFQUFFLENBQUM7YUFDekU7WUFDRCxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQztZQUMzQyxJQUFJLENBQUMsTUFBTSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFO2FBQzNELENBQUM7WUFDRixJQUFJLElBQUEsNkJBQWEsRUFBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE9BQU8sQ0FBQzthQUN6RztZQUNELElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLElBQUksSUFBQSw2QkFBYSxFQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUM7YUFDcEM7WUFDRCxJQUFJLENBQUEsbUJBQW1CLGFBQW5CLG1CQUFtQix1QkFBbkIsbUJBQW1CLENBQUUsTUFBTSxJQUFHLENBQUMsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN4RCxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7b0JBQ3JCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztpQkFDL0IsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2IsQ0FBQzs7SUFoREYsc0NBaURDO0lBaER1QixpQ0FBYSxHQUFXLDZEQUE2RCxDQUFDIn0=
|
|
@@ -23,6 +23,37 @@
|
|
|
23
23
|
return $1.toLowerCase();
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
|
+
/**
|
|
27
|
+
* format cucumber expression parameters for typescript
|
|
28
|
+
* @param parameters
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
const formatParameters = (parameters) => {
|
|
32
|
+
const params = parameters.map(param => {
|
|
33
|
+
return `${param}: ${matchType(param)}`;
|
|
34
|
+
});
|
|
35
|
+
return params.join(', ');
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* match the parameter name passed in with a typescript
|
|
39
|
+
* primitive type (string, number or boolean)
|
|
40
|
+
* @param paramName
|
|
41
|
+
* @returns
|
|
42
|
+
*/
|
|
43
|
+
const matchType = (paramName) => {
|
|
44
|
+
const numberTypes = ['int', 'float', 'bigdecimal', 'double', 'biginteger', 'byte', 'short', 'long'];
|
|
45
|
+
const stringTypes = ['string', 'word'];
|
|
46
|
+
if (stringTypes.find(x => paramName.indexOf(x) >= 0)) {
|
|
47
|
+
return 'string';
|
|
48
|
+
}
|
|
49
|
+
if (numberTypes.find(x => paramName.indexOf(x) >= 0)) {
|
|
50
|
+
return 'number';
|
|
51
|
+
}
|
|
52
|
+
if (paramName.indexOf('boolean') >= 0) {
|
|
53
|
+
return 'boolean';
|
|
54
|
+
}
|
|
55
|
+
return 'any';
|
|
56
|
+
};
|
|
26
57
|
/**
|
|
27
58
|
* Generate snippets for tsflow.
|
|
28
59
|
* NOTE: Needs to be an exported function for cucumber to
|
|
@@ -50,19 +81,18 @@
|
|
|
50
81
|
else {
|
|
51
82
|
implementation = "return 'pending';";
|
|
52
83
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
return definitionChoices.join('') + ' // ' + comment + '\n ' + implementation + '\n}';
|
|
84
|
+
// we only care about the first expression. TypeScript has a
|
|
85
|
+
// small number of primitive types
|
|
86
|
+
const generatedExpression = generatedExpressions[0];
|
|
87
|
+
const allParameterNames = generatedExpression.parameterNames.concat(stepParameterNames);
|
|
88
|
+
if (snippetInterface === snippet_syntax_1.SnippetInterface.Callback) {
|
|
89
|
+
allParameterNames.push(CALLBACK_NAME);
|
|
90
|
+
}
|
|
91
|
+
const pattern = generatedExpression.source.replace(/'/g, "\\'");
|
|
92
|
+
const methodName = toCamelCase(pattern);
|
|
93
|
+
const parametersStr = allParameterNames.length > 0 ? formatParameters(allParameterNames) : '';
|
|
94
|
+
const definitionChoices = `@${functionName.toLowerCase()}('${pattern}')\n` + `${functionKeyword}${methodName}(${parametersStr}): any {\n`;
|
|
95
|
+
return `${definitionChoices} //${comment}\n ${implementation}\n}`;
|
|
66
96
|
}
|
|
67
97
|
};
|
|
68
98
|
}
|
|
@@ -70,4 +100,4 @@
|
|
|
70
100
|
// This is needed so that cucumber.js can load the function
|
|
71
101
|
module.exports = TsflowSnippetSyntax;
|
|
72
102
|
});
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNmbG93LXNuaXBwZXQtc3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zvcm1hdHRlcnMvdHNmbG93LXNuaXBwZXQtc3ludGF4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQUFBLG9IQUl5RjtJQUV6RixNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUM7SUFFakMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtRQUNuQyxPQUFPLEdBQUc7YUFDUixPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRTtZQUM5QixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUM7YUFDRCxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQzthQUNsQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQzthQUNyQixPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRTtZQUM1QixPQUFPLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGOzs7O09BSUc7SUFDSCxNQUFNLGdCQUFnQixHQUFHLENBQUMsVUFBb0IsRUFBVSxFQUFFO1FBQ3pELE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckMsT0FBTyxHQUFHLEtBQUssS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDLENBQUM7SUFFRjs7Ozs7T0FLRztJQUNILE1BQU0sU0FBUyxHQUFHLENBQUMsU0FBaUIsRUFBVSxFQUFFO1FBQy9DLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVks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
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare type ErrorOptions = {
|
|
2
|
+
scenariosMustMatchFeatureFile: boolean;
|
|
3
|
+
stepsMustMatchFeatureFile: boolean;
|
|
4
|
+
allowScenariosNotInFeatureFile: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare type Options = {
|
|
7
|
+
loadRelativePath?: boolean;
|
|
8
|
+
tagFilter?: string;
|
|
9
|
+
errors?: ErrorOptions | boolean;
|
|
10
|
+
scenarioNameTemplate?: (vars: ScenarioNameTemplateVars) => string;
|
|
11
|
+
};
|
|
12
|
+
export declare type ScenarioNameTemplateVars = {
|
|
13
|
+
featureTitle: string;
|
|
14
|
+
scenarioTitle: string;
|
|
15
|
+
scenarioTags: string[];
|
|
16
|
+
featureTags: string[];
|
|
17
|
+
};
|
|
18
|
+
export declare const defaultErrorSettings: {
|
|
19
|
+
scenariosMustMatchFeatureFile: boolean;
|
|
20
|
+
stepsMustMatchFeatureFile: boolean;
|
|
21
|
+
allowScenariosNotInFeatureFile: boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare const defaultConfiguration: Options;
|
|
24
|
+
export declare const getJestCucumberConfiguration: (options?: Options | undefined) => {
|
|
25
|
+
loadRelativePath?: boolean | undefined;
|
|
26
|
+
tagFilter?: string | undefined;
|
|
27
|
+
errors?: boolean | ErrorOptions | undefined;
|
|
28
|
+
scenarioNameTemplate?: ((vars: ScenarioNameTemplateVars) => string) | undefined;
|
|
29
|
+
};
|
|
30
|
+
export declare const setJestCucumberConfiguration: (options: Options) => void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
(function (factory) {
|
|
2
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
3
|
+
var v = factory(require, exports);
|
|
4
|
+
if (v !== undefined) module.exports = v;
|
|
5
|
+
}
|
|
6
|
+
else if (typeof define === "function" && define.amd) {
|
|
7
|
+
define(["require", "exports"], factory);
|
|
8
|
+
}
|
|
9
|
+
})(function (require, exports) {
|
|
10
|
+
"use strict";
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.setJestCucumberConfiguration = exports.getJestCucumberConfiguration = exports.defaultConfiguration = exports.defaultErrorSettings = void 0;
|
|
13
|
+
exports.defaultErrorSettings = {
|
|
14
|
+
scenariosMustMatchFeatureFile: true,
|
|
15
|
+
stepsMustMatchFeatureFile: true,
|
|
16
|
+
allowScenariosNotInFeatureFile: false
|
|
17
|
+
};
|
|
18
|
+
exports.defaultConfiguration = {
|
|
19
|
+
tagFilter: undefined,
|
|
20
|
+
scenarioNameTemplate: undefined,
|
|
21
|
+
errors: exports.defaultErrorSettings
|
|
22
|
+
};
|
|
23
|
+
let globalConfiguration = {};
|
|
24
|
+
const getJestCucumberConfiguration = (options) => {
|
|
25
|
+
const mergedOptions = { ...exports.defaultConfiguration, ...globalConfiguration, ...(options || {}) };
|
|
26
|
+
if (mergedOptions.errors === true) {
|
|
27
|
+
mergedOptions.errors = exports.defaultErrorSettings;
|
|
28
|
+
}
|
|
29
|
+
return mergedOptions;
|
|
30
|
+
};
|
|
31
|
+
exports.getJestCucumberConfiguration = getJestCucumberConfiguration;
|
|
32
|
+
const setJestCucumberConfiguration = (options) => {
|
|
33
|
+
globalConfiguration = options;
|
|
34
|
+
};
|
|
35
|
+
exports.setJestCucumberConfiguration = setJestCucumberConfiguration;
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9naGVya2luL2NvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBb0JhLFFBQUEsb0JBQW9CLEdBQUc7UUFDbkMsNkJBQTZCLEVBQUUsSUFBSTtRQUNuQyx5QkFBeUIsRUFBRSxJQUFJO1FBQy9CLDhCQUE4QixFQUFFLEtBQUs7S0FDckMsQ0FBQztJQUVXLFFBQUEsb0JBQW9CLEdBQVk7UUFDNUMsU0FBUyxFQUFFLFNBQVM7UUFDcEIsb0JBQW9CLEVBQUUsU0FBUztRQUMvQixNQUFNLEVBQUUsNEJBQW9CO0tBQzVCLENBQUM7SUFFRixJQUFJLG1CQUFtQixHQUFZLEVBQWEsQ0FBQztJQUUxQyxNQUFNLDRCQUE0QixHQUFHLENBQUMsT0FBaUIsRUFBRSxFQUFFO1FBQ2pFLE1BQU0sYUFBYSxHQUFHLEVBQUUsR0FBRyw0QkFBb0IsRUFBRSxHQUFHLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUU5RixJQUFJLGFBQWEsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ2xDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsNEJBQW9CLENBQUM7U0FDNUM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN0QixDQUFDLENBQUM7SUFSVyxRQUFBLDRCQUE0QixnQ0FRdkM7SUFFSyxNQUFNLDRCQUE0QixHQUFHLENBQUMsT0FBZ0IsRUFBRSxFQUFFO1FBQ2hFLG1CQUFtQixHQUFHLE9BQU8sQ0FBQztJQUMvQixDQUFDLENBQUM7SUFGVyxRQUFBLDRCQUE0QixnQ0FFdkMifQ==
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Options } from './configuration';
|
|
2
|
+
import { ParsedFeature } from './models';
|
|
3
|
+
export default class GherkinFeature {
|
|
4
|
+
private cwd;
|
|
5
|
+
loadFeature: (featureFilePath: string, options?: Options | undefined) => ParsedFeature;
|
|
6
|
+
loadFeatures: (globPattern: string, options?: Options | undefined) => ParsedFeature[];
|
|
7
|
+
private parseFeature;
|
|
8
|
+
private parseDataTableRow;
|
|
9
|
+
private parseDataTable;
|
|
10
|
+
private parseStepArgument;
|
|
11
|
+
private parseStep;
|
|
12
|
+
private parseSteps;
|
|
13
|
+
private parseTags;
|
|
14
|
+
private parseScenario;
|
|
15
|
+
private parseScenarioOutlineExampleSteps;
|
|
16
|
+
private getOutlineDynamicTitle;
|
|
17
|
+
private parseScenarioOutlineExample;
|
|
18
|
+
private parseScenarioOutlineExampleSet;
|
|
19
|
+
private parseScenarioOutlineExampleSets;
|
|
20
|
+
private parseScenarioOutline;
|
|
21
|
+
private parseScenarios;
|
|
22
|
+
private parseScenarioOutlines;
|
|
23
|
+
private collapseBackgrounds;
|
|
24
|
+
private parseBackgrounds;
|
|
25
|
+
private collapseRulesAndBackgrounds;
|
|
26
|
+
private createTranslationMap;
|
|
27
|
+
private translateKeywords;
|
|
28
|
+
}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
2
|
+
if (k2 === undefined) k2 = k;
|
|
3
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
4
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
5
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
6
|
+
}
|
|
7
|
+
Object.defineProperty(o, k2, desc);
|
|
8
|
+
}) : (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
o[k2] = m[k];
|
|
11
|
+
}));
|
|
12
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
13
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
14
|
+
}) : function(o, v) {
|
|
15
|
+
o["default"] = v;
|
|
16
|
+
});
|
|
17
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
18
|
+
if (mod && mod.__esModule) return mod;
|
|
19
|
+
var result = {};
|
|
20
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
21
|
+
__setModuleDefault(result, mod);
|
|
22
|
+
return result;
|
|
23
|
+
};
|
|
24
|
+
(function (factory) {
|
|
25
|
+
if (typeof module === "object" && typeof module.exports === "object") {
|
|
26
|
+
var v = factory(require, exports);
|
|
27
|
+
if (v !== undefined) module.exports = v;
|
|
28
|
+
}
|
|
29
|
+
else if (typeof define === "function" && define.amd) {
|
|
30
|
+
define(["require", "exports", "fs", "glob", "@cucumber/messages", "./configuration", "@cucumber/gherkin/dist/src"], factory);
|
|
31
|
+
}
|
|
32
|
+
})(function (require, exports) {
|
|
33
|
+
"use strict";
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
const fs_1 = require("fs");
|
|
36
|
+
const glob_1 = require("glob");
|
|
37
|
+
const messages = __importStar(require("@cucumber/messages"));
|
|
38
|
+
const configuration_1 = require("./configuration");
|
|
39
|
+
const src_1 = require("@cucumber/gherkin/dist/src");
|
|
40
|
+
class GherkinFeature {
|
|
41
|
+
constructor() {
|
|
42
|
+
this.cwd = process.cwd();
|
|
43
|
+
this.loadFeature = (featureFilePath, options) => {
|
|
44
|
+
try {
|
|
45
|
+
const featureText = (0, fs_1.readFileSync)(featureFilePath, 'utf8');
|
|
46
|
+
return this.parseFeature(featureText, featureFilePath, options);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (err.code === 'ENOENT') {
|
|
50
|
+
throw new Error(`Feature file not found (${featureFilePath})`);
|
|
51
|
+
}
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
this.loadFeatures = (globPattern, options) => {
|
|
56
|
+
const featureFiles = (0, glob_1.sync)(globPattern);
|
|
57
|
+
return featureFiles.map(featureFilePath => this.loadFeature(featureFilePath, options));
|
|
58
|
+
};
|
|
59
|
+
this.parseFeature = (featureText, featureFilePath, options) => {
|
|
60
|
+
let ast;
|
|
61
|
+
options = (0, configuration_1.getJestCucumberConfiguration)(options);
|
|
62
|
+
try {
|
|
63
|
+
const builder = new src_1.AstBuilder(messages.IdGenerator.uuid());
|
|
64
|
+
const matcher = new src_1.GherkinClassicTokenMatcher(); // or Gherkin.GherkinInMarkdownTokenMatcher()
|
|
65
|
+
ast = new src_1.Parser(builder, matcher).parse(featureText);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
throw new Error(`Error parsing feature Gherkin: ${err.message}`);
|
|
69
|
+
}
|
|
70
|
+
let astFeature = this.collapseRulesAndBackgrounds(ast.feature);
|
|
71
|
+
if (astFeature.language !== 'en') {
|
|
72
|
+
astFeature = this.translateKeywords(astFeature);
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
title: astFeature.name,
|
|
76
|
+
featureFile: featureFilePath.replace(`${this.cwd}\\`, ''),
|
|
77
|
+
scenarios: this.parseScenarios(astFeature),
|
|
78
|
+
scenarioOutlines: this.parseScenarioOutlines(astFeature),
|
|
79
|
+
tags: this.parseTags(astFeature),
|
|
80
|
+
options
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
this.parseDataTableRow = (astDataTableRow) => {
|
|
84
|
+
return astDataTableRow.cells.map((col) => col.value);
|
|
85
|
+
};
|
|
86
|
+
this.parseDataTable = (astDataTable, astDataTableHeader) => {
|
|
87
|
+
let headerRow;
|
|
88
|
+
let bodyRows;
|
|
89
|
+
if (astDataTableHeader) {
|
|
90
|
+
headerRow = this.parseDataTableRow(astDataTableHeader);
|
|
91
|
+
bodyRows = astDataTable;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
headerRow = this.parseDataTableRow(astDataTable.rows[0]);
|
|
95
|
+
bodyRows = astDataTable && astDataTable.rows && astDataTable.rows.length && astDataTable.rows.slice(1);
|
|
96
|
+
}
|
|
97
|
+
if (bodyRows && bodyRows.length > 0) {
|
|
98
|
+
return bodyRows.map(nextRow => {
|
|
99
|
+
const parsedRow = this.parseDataTableRow(nextRow);
|
|
100
|
+
return parsedRow.reduce((rowObj, nextCol, index) => {
|
|
101
|
+
return {
|
|
102
|
+
...rowObj,
|
|
103
|
+
[headerRow[index]]: nextCol
|
|
104
|
+
};
|
|
105
|
+
}, {});
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
return [];
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
this.parseStepArgument = (astStep) => {
|
|
113
|
+
if (astStep) {
|
|
114
|
+
switch (astStep.argument) {
|
|
115
|
+
case 'dataTable':
|
|
116
|
+
return this.parseDataTable(astStep.dataTable);
|
|
117
|
+
case 'docString':
|
|
118
|
+
return astStep.docString.content;
|
|
119
|
+
default:
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
return null;
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
this.parseStep = (astStep) => {
|
|
128
|
+
return {
|
|
129
|
+
stepText: astStep.text,
|
|
130
|
+
keyword: astStep.keyword.trim().toLowerCase(),
|
|
131
|
+
stepArgument: this.parseStepArgument(astStep),
|
|
132
|
+
lineNumber: astStep.location.line
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
this.parseSteps = (astScenario) => {
|
|
136
|
+
return astScenario.steps.map((astStep) => this.parseStep(astStep));
|
|
137
|
+
};
|
|
138
|
+
this.parseTags = (ast) => {
|
|
139
|
+
if (!ast.tags) {
|
|
140
|
+
return [];
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
return ast.tags.map((tag) => tag.name);
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
this.parseScenario = (astScenario, astFeature) => {
|
|
147
|
+
return {
|
|
148
|
+
title: astScenario.name,
|
|
149
|
+
steps: this.parseSteps(astScenario),
|
|
150
|
+
tags: [...this.parseTags(astFeature), ...this.parseTags(astScenario)],
|
|
151
|
+
lineNumber: astScenario.location.line,
|
|
152
|
+
scenarioContext: undefined
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
this.parseScenarioOutlineExampleSteps = (exampleTableRow, scenarioSteps) => {
|
|
156
|
+
return scenarioSteps.map(scenarioStep => {
|
|
157
|
+
const stepText = Object.keys(exampleTableRow).reduce((processedStepText, nextTableColumn) => {
|
|
158
|
+
return processedStepText.replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
|
|
159
|
+
}, scenarioStep.stepText);
|
|
160
|
+
let stepArgument = '';
|
|
161
|
+
if (scenarioStep.stepArgument) {
|
|
162
|
+
if (Array.isArray(scenarioStep.stepArgument)) {
|
|
163
|
+
stepArgument = scenarioStep.stepArgument.map((stepArgumentRow) => {
|
|
164
|
+
const modifiedStepArgumentRow = { ...stepArgumentRow };
|
|
165
|
+
Object.keys(exampleTableRow).forEach(nextTableColumn => {
|
|
166
|
+
Object.keys(modifiedStepArgumentRow).forEach(prop => {
|
|
167
|
+
modifiedStepArgumentRow[prop] = modifiedStepArgumentRow[prop].replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
return modifiedStepArgumentRow;
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
stepArgument = scenarioStep.stepArgument;
|
|
175
|
+
if (typeof scenarioStep.stepArgument === 'string' || scenarioStep.stepArgument instanceof String) {
|
|
176
|
+
Object.keys(exampleTableRow).forEach(nextTableColumn => {
|
|
177
|
+
stepArgument = stepArgument.replace(new RegExp(`<${nextTableColumn}>`, 'g'), exampleTableRow[nextTableColumn]);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
...scenarioStep,
|
|
184
|
+
stepText,
|
|
185
|
+
stepArgument
|
|
186
|
+
};
|
|
187
|
+
});
|
|
188
|
+
};
|
|
189
|
+
this.getOutlineDynamicTitle = (exampleTableRow, title) => {
|
|
190
|
+
return title.replace(/<(\S*)>/g, (_, firstMatch) => {
|
|
191
|
+
return exampleTableRow[firstMatch || ''];
|
|
192
|
+
});
|
|
193
|
+
};
|
|
194
|
+
this.parseScenarioOutlineExample = (exampleTableRow, outlineScenario, exampleSetTags) => {
|
|
195
|
+
return {
|
|
196
|
+
title: this.getOutlineDynamicTitle(exampleTableRow, outlineScenario.title),
|
|
197
|
+
steps: this.parseScenarioOutlineExampleSteps(exampleTableRow, outlineScenario.steps),
|
|
198
|
+
tags: Array.from(new Set([...outlineScenario.tags, ...exampleSetTags]))
|
|
199
|
+
};
|
|
200
|
+
};
|
|
201
|
+
this.parseScenarioOutlineExampleSet = (astExampleSet, outlineScenario) => {
|
|
202
|
+
const exampleTable = this.parseDataTable(astExampleSet.tableBody, astExampleSet.tableHeader);
|
|
203
|
+
return exampleTable.map(tableRow => this.parseScenarioOutlineExample(tableRow, outlineScenario, this.parseTags(astExampleSet)));
|
|
204
|
+
};
|
|
205
|
+
this.parseScenarioOutlineExampleSets = (astExampleSets, outlineScenario) => {
|
|
206
|
+
const exampleSets = astExampleSets.map((astExampleSet) => {
|
|
207
|
+
return this.parseScenarioOutlineExampleSet(astExampleSet, outlineScenario);
|
|
208
|
+
});
|
|
209
|
+
return exampleSets.reduce((scenarios, nextExampleSet) => {
|
|
210
|
+
return [...scenarios, ...nextExampleSet];
|
|
211
|
+
}, []);
|
|
212
|
+
};
|
|
213
|
+
this.parseScenarioOutline = (astScenarioOutline, astFeature) => {
|
|
214
|
+
const outlineScenario = this.parseScenario(astScenarioOutline.scenario, astFeature);
|
|
215
|
+
return {
|
|
216
|
+
title: outlineScenario.title,
|
|
217
|
+
scenarios: this.parseScenarioOutlineExampleSets(astScenarioOutline.scenario.examples, outlineScenario),
|
|
218
|
+
tags: outlineScenario.tags,
|
|
219
|
+
steps: outlineScenario.steps,
|
|
220
|
+
lineNumber: astScenarioOutline.scenario.location.line,
|
|
221
|
+
scenarioContext: undefined
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
this.parseScenarios = (astFeature) => {
|
|
225
|
+
return astFeature.children
|
|
226
|
+
.filter((child) => {
|
|
227
|
+
const keywords = ['Scenario Outline', 'Scenario Template'];
|
|
228
|
+
return child.scenario && keywords.indexOf(child.scenario.keyword) === -1;
|
|
229
|
+
})
|
|
230
|
+
.map((astScenario) => this.parseScenario(astScenario.scenario, astFeature));
|
|
231
|
+
};
|
|
232
|
+
this.parseScenarioOutlines = (astFeature) => {
|
|
233
|
+
return astFeature.children
|
|
234
|
+
.filter((child) => {
|
|
235
|
+
const keywords = ['Scenario Outline', 'Scenario Template'];
|
|
236
|
+
return child.scenario && keywords.indexOf(child.scenario.keyword) !== -1;
|
|
237
|
+
})
|
|
238
|
+
.map((astScenarioOutline) => this.parseScenarioOutline(astScenarioOutline, astFeature));
|
|
239
|
+
};
|
|
240
|
+
this.collapseBackgrounds = (astChildren, backgrounds) => {
|
|
241
|
+
const backgroundSteps = backgrounds.reduce((allBackgroundSteps, nextBackground) => {
|
|
242
|
+
return [...allBackgroundSteps, ...nextBackground.steps];
|
|
243
|
+
}, []);
|
|
244
|
+
astChildren.forEach(child => {
|
|
245
|
+
if (child.scenario) {
|
|
246
|
+
child.scenario.steps = [...backgroundSteps, ...child.scenario.steps];
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
return astChildren;
|
|
250
|
+
};
|
|
251
|
+
this.parseBackgrounds = (ast) => {
|
|
252
|
+
return ast.children.filter((child) => child.background).map((child) => child.background);
|
|
253
|
+
};
|
|
254
|
+
this.collapseRulesAndBackgrounds = (astFeature) => {
|
|
255
|
+
const featureBackgrounds = this.parseBackgrounds(astFeature);
|
|
256
|
+
const children = this.collapseBackgrounds(astFeature.children, featureBackgrounds).reduce((newChildren, nextChild) => {
|
|
257
|
+
if (nextChild.rule) {
|
|
258
|
+
const rule = nextChild.rule;
|
|
259
|
+
const ruleBackgrounds = this.parseBackgrounds(rule);
|
|
260
|
+
return [
|
|
261
|
+
...newChildren,
|
|
262
|
+
...this.collapseBackgrounds(rule.children, [...featureBackgrounds, ...ruleBackgrounds])
|
|
263
|
+
];
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
return [...newChildren, nextChild];
|
|
267
|
+
}
|
|
268
|
+
}, []);
|
|
269
|
+
return {
|
|
270
|
+
...astFeature,
|
|
271
|
+
children
|
|
272
|
+
};
|
|
273
|
+
};
|
|
274
|
+
this.createTranslationMap = (translateDialect) => {
|
|
275
|
+
const englishDialect = src_1.dialects.en;
|
|
276
|
+
const translationMap = {};
|
|
277
|
+
const props = [
|
|
278
|
+
'and',
|
|
279
|
+
'background',
|
|
280
|
+
'but',
|
|
281
|
+
'examples',
|
|
282
|
+
'feature',
|
|
283
|
+
'given',
|
|
284
|
+
'scenario',
|
|
285
|
+
'scenarioOutline',
|
|
286
|
+
'then',
|
|
287
|
+
'when',
|
|
288
|
+
'rule'
|
|
289
|
+
];
|
|
290
|
+
for (const prop of props) {
|
|
291
|
+
const dialectWords = translateDialect[prop];
|
|
292
|
+
const translationWords = englishDialect[prop];
|
|
293
|
+
let index = 0;
|
|
294
|
+
let defaultWordIndex = null;
|
|
295
|
+
for (const dialectWord of dialectWords) {
|
|
296
|
+
// skip "* " word
|
|
297
|
+
if (dialectWord.indexOf('*') !== 0) {
|
|
298
|
+
if (translationWords[index] !== undefined) {
|
|
299
|
+
translationMap[dialectWord] = translationWords[index];
|
|
300
|
+
if (defaultWordIndex === null) {
|
|
301
|
+
// set default when non is set yet
|
|
302
|
+
defaultWordIndex = index;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
// index has undefined value, translate to default word
|
|
307
|
+
if (defaultWordIndex !== null) {
|
|
308
|
+
translationMap[dialectWord] = translationWords[defaultWordIndex];
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
throw new Error('No translation found for ' + dialectWord);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
index++;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return translationMap;
|
|
319
|
+
};
|
|
320
|
+
this.translateKeywords = (astFeature) => {
|
|
321
|
+
const languageDialect = src_1.dialects[astFeature.language];
|
|
322
|
+
const translationMap = this.createTranslationMap(languageDialect);
|
|
323
|
+
astFeature.language = 'en';
|
|
324
|
+
astFeature.keyword = translationMap[astFeature.keyword] || astFeature.keyword;
|
|
325
|
+
for (const child of astFeature.children) {
|
|
326
|
+
if (child.background) {
|
|
327
|
+
child.background.keyword = translationMap[child.background.keyword] || child.background.keyword;
|
|
328
|
+
}
|
|
329
|
+
if (child.scenario) {
|
|
330
|
+
child.scenario.keyword = translationMap[child.scenario.keyword] || child.scenario.keyword;
|
|
331
|
+
for (const step of child.scenario.steps) {
|
|
332
|
+
step.keyword = translationMap[step.keyword] || step.keyword;
|
|
333
|
+
}
|
|
334
|
+
for (const example of child.scenario.examples) {
|
|
335
|
+
example.keyword = translationMap[example.keyword] || example.keyword;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return astFeature;
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
exports.default = GherkinFeature;
|
|
344
|
+
});
|
|
345
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2hlcmtpbi1mZWF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2doZXJraW4vZ2hlcmtpbi1mZWF0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFBQSwyQkFBa0M7SUFDbEMsK0JBQXdDO0lBQ3hDLDZEQUErQztJQUMvQyxtREFBd0U7SUFDeEUsb0RBQStHO0lBRy9HLE1BQXFCLGNBQWM7UUFBbkM7WUFDUyxRQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBRXJCLGdCQUFXLEdBQUcsQ0FBQyxlQUF1QixFQUFFLE9BQWlCLEVBQUUsRUFBRTtnQkFDbkUsSUFBSTtvQkFDSCxNQUFNLFdBQVcsR0FBVyxJQUFBLGlCQUFZLEVBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUNsRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDaEU7Z0JBQUMsT0FBTyxHQUFRLEVBQUU7b0JBQ2xCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7d0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLGVBQWUsR0FBRyxDQUFDLENBQUM7cUJBQy9EO29CQUVELE1BQU0sR0FBRyxDQUFDO2lCQUNWO1lBQ0YsQ0FBQyxDQUFDO1lBRUssaUJBQVksR0FBRyxDQUFDLFdBQW1CLEVBQUUsT0FBaUIsRUFBRSxFQUFFO2dCQUNoRSxNQUFNLFlBQVksR0FBRyxJQUFBLFdBQVEsRUFBQyxXQUFXLENBQUMsQ0FBQztnQkFFM0MsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN4RixDQUFDLENBQUM7WUFFTSxpQkFBWSxHQUFHLENBQUMsV0FBbUIs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
|