vitest-cucumber-plugin 0.6.0 → 0.6.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/RELEASE_NOTES.md +2 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/generate/example.d.ts +5 -0
- package/dist/generate/example.d.ts.map +1 -0
- package/{src → dist}/generate/example.js +7 -10
- package/dist/generate/example.js.map +1 -0
- package/dist/generate/examples.d.ts +5 -0
- package/dist/generate/examples.d.ts.map +1 -0
- package/dist/generate/examples.js +46 -0
- package/dist/generate/examples.js.map +1 -0
- package/dist/generate/feature.d.ts +10 -0
- package/dist/generate/feature.d.ts.map +1 -0
- package/dist/generate/feature.js +77 -0
- package/dist/generate/feature.js.map +1 -0
- package/dist/generate/index.d.ts +3 -0
- package/dist/generate/index.d.ts.map +1 -0
- package/dist/generate/index.js +3 -0
- package/dist/generate/index.js.map +1 -0
- package/dist/generate/rule.d.ts +5 -0
- package/dist/generate/rule.d.ts.map +1 -0
- package/{src → dist}/generate/rule.js +9 -12
- package/dist/generate/rule.js.map +1 -0
- package/dist/generate/scenario-outline.d.ts +5 -0
- package/dist/generate/scenario-outline.d.ts.map +1 -0
- package/dist/generate/scenario-outline.js +18 -0
- package/dist/generate/scenario-outline.js.map +1 -0
- package/dist/generate/tests.d.ts +4 -0
- package/dist/generate/tests.d.ts.map +1 -0
- package/{src → dist}/generate/tests.js +9 -9
- package/dist/generate/tests.js.map +1 -0
- package/dist/generate/util.d.ts +6 -0
- package/dist/generate/util.d.ts.map +1 -0
- package/{src → dist}/generate/util.js +5 -5
- package/dist/generate/util.js.map +1 -0
- package/dist/gherkin-lexer-shared.d.ts +6 -0
- package/dist/gherkin-lexer-shared.d.ts.map +1 -0
- package/dist/gherkin-lexer-shared.js +4 -0
- package/dist/gherkin-lexer-shared.js.map +1 -0
- package/dist/gherkin-lexer.d.ts +4 -0
- package/dist/gherkin-lexer.d.ts.map +1 -0
- package/dist/gherkin-lexer.js +68 -0
- package/dist/gherkin-lexer.js.map +1 -0
- package/{src → dist}/gherkin.js +1 -1
- package/{src → dist}/gherkin.umd.js +1 -1
- package/dist/hooks.d.ts +25 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +94 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +5 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +8 -0
- package/dist/logger.js.map +1 -0
- package/dist/parameterize.d.ts +3 -0
- package/dist/parameterize.d.ts.map +1 -0
- package/dist/parameterize.js +8 -0
- package/dist/parameterize.js.map +1 -0
- package/dist/parse.d.ts +3 -0
- package/dist/parse.d.ts.map +1 -0
- package/{src → dist}/parse.js +5 -9
- package/dist/parse.js.map +1 -0
- package/dist/state.d.ts +4 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +2 -0
- package/dist/state.js.map +1 -0
- package/dist/statement.d.ts +71 -0
- package/dist/statement.d.ts.map +1 -0
- package/dist/statement.js +10 -0
- package/dist/statement.js.map +1 -0
- package/dist/steps.d.ts +20 -0
- package/dist/steps.d.ts.map +1 -0
- package/{src → dist}/steps.js +16 -23
- package/dist/steps.js.map +1 -0
- package/dist/tags.d.ts +5 -0
- package/dist/tags.d.ts.map +1 -0
- package/{src → dist}/tags.js +15 -28
- package/dist/tags.js.map +1 -0
- package/dist/vitest-cucumber-plugin.d.ts +13 -0
- package/dist/vitest-cucumber-plugin.d.ts.map +1 -0
- package/dist/vitest-cucumber-plugin.js +69 -0
- package/dist/vitest-cucumber-plugin.js.map +1 -0
- package/package.json +64 -34
- package/generate-parsers +0 -6
- package/rollup-gherkin.js +0 -12
- package/rollup-tags-expression.js +0 -11
- package/run-tests +0 -9
- package/src/generate/examples.js +0 -48
- package/src/generate/feature.js +0 -72
- package/src/generate/index.js +0 -15
- package/src/generate/scenario-outline.js +0 -21
- package/src/gherkin-lexer-shared.cjs +0 -4
- package/src/gherkin-lexer.js +0 -63
- package/src/gherkin.ne +0 -211
- package/src/hooks.js +0 -77
- package/src/index.js +0 -95
- package/src/logger.js +0 -14
- package/src/parameterize.js +0 -7
- package/src/tags-expression.ne +0 -43
- package/tests/background/features/background.feature +0 -25
- package/tests/background/features/step_definitions/steps.js +0 -30
- package/tests/background/features/support/hooks.js +0 -3
- package/tests/background/package-lock.json +0 -1204
- package/tests/background/package.json +0 -11
- package/tests/background/vite.config.js +0 -13
- package/tests/comments/features/is-it-friday.feature +0 -10
- package/tests/comments/features/step_definitions/stepdefs.js +0 -15
- package/tests/comments/package-lock.json +0 -1933
- package/tests/comments/package.json +0 -11
- package/tests/comments/vite.config.js +0 -9
- package/tests/data-tables/features/data-tables-escaping.feature +0 -27
- package/tests/data-tables/features/data-tables.feature +0 -44
- package/tests/data-tables/features/step_definitions/data-tables.js +0 -21
- package/tests/data-tables/package-lock.json +0 -1933
- package/tests/data-tables/package.json +0 -11
- package/tests/data-tables/vite.config.js +0 -13
- package/tests/doc-strings/features/doc-strings.feature +0 -21
- package/tests/doc-strings/features/step_definitions/doc-strings.js +0 -15
- package/tests/doc-strings/package-lock.json +0 -1933
- package/tests/doc-strings/package.json +0 -11
- package/tests/doc-strings/vite.config.js +0 -13
- package/tests/hooks/features/after-all.feature +0 -5
- package/tests/hooks/features/after.feature +0 -5
- package/tests/hooks/features/before-all.feature +0 -14
- package/tests/hooks/features/before-step.feature +0 -6
- package/tests/hooks/features/before.feature +0 -14
- package/tests/hooks/features/step_definitions/steps.js +0 -28
- package/tests/hooks/features/support/hooks.js +0 -75
- package/tests/hooks/features/support/tags-hooks.js +0 -11
- package/tests/hooks/features/tags.feature +0 -14
- package/tests/hooks/package-lock.json +0 -1204
- package/tests/hooks/package.json +0 -11
- package/tests/hooks/vite.config.js +0 -13
- package/tests/is-it-friday/features/is-it-friday.feature +0 -7
- package/tests/is-it-friday/features/step_definitions/stepdefs.js +0 -15
- package/tests/is-it-friday/package-lock.json +0 -1933
- package/tests/is-it-friday/package.json +0 -11
- package/tests/is-it-friday/vite.config.js +0 -13
- package/tests/is-it-friday-scenario-outline/features/is-it-friday.feature +0 -13
- package/tests/is-it-friday-scenario-outline/features/step_definitions/stepdefs.js +0 -15
- package/tests/is-it-friday-scenario-outline/package-lock.json +0 -1933
- package/tests/is-it-friday-scenario-outline/package.json +0 -11
- package/tests/is-it-friday-scenario-outline/vite.config.js +0 -9
- package/tests/is-it-friday-two-scenarios/features/is-it-friday.feature +0 -12
- package/tests/is-it-friday-two-scenarios/features/step_definitions/stepdefs.js +0 -19
- package/tests/is-it-friday-two-scenarios/package-lock.json +0 -1933
- package/tests/is-it-friday-two-scenarios/package.json +0 -11
- package/tests/is-it-friday-two-scenarios/vite.config.js +0 -9
- package/tests/is-it-friday-two-scenarios-multiple-feature-files/features/friday.feature +0 -7
- package/tests/is-it-friday-two-scenarios-multiple-feature-files/features/step_definitions/stepdefs.js +0 -19
- package/tests/is-it-friday-two-scenarios-multiple-feature-files/features/sunday.feature +0 -8
- package/tests/is-it-friday-two-scenarios-multiple-feature-files/package-lock.json +0 -1933
- package/tests/is-it-friday-two-scenarios-multiple-feature-files/package.json +0 -11
- package/tests/is-it-friday-two-scenarios-multiple-feature-files/vite.config.js +0 -9
- package/tests/keyword-aliases/features/scenario-outline.feature +0 -20
- package/tests/keyword-aliases/features/scenario.feature +0 -14
- package/tests/keyword-aliases/features/step_definitions/steps.js +0 -30
- package/tests/keyword-aliases/features/steps.feature +0 -28
- package/tests/keyword-aliases/features/support/hooks.js +0 -6
- package/tests/keyword-aliases/package-lock.json +0 -1933
- package/tests/keyword-aliases/package.json +0 -11
- package/tests/keyword-aliases/vite.config.js +0 -9
- package/tests/languages/features/en.feature +0 -8
- package/tests/languages/features/no.feature +0 -10
- package/tests/languages/features/step_definitions/en.js +0 -15
- package/tests/languages/features/step_definitions/no.js +0 -21
- package/tests/languages/package-lock.json +0 -1204
- package/tests/languages/package.json +0 -11
- package/tests/languages/vite.config.js +0 -13
- package/tests/rule/features/rule.feature +0 -14
- package/tests/rule/features/step_definitions/stepdefs.js +0 -19
- package/tests/rule/package-lock.json +0 -1933
- package/tests/rule/package.json +0 -11
- package/tests/rule/vite.config.js +0 -9
- package/tests/tags/features/skip.feature +0 -9
- package/tests/tags/features/step_definitions/steps.js +0 -30
- package/tests/tags/features/support/hooks.js +0 -6
- package/tests/tags/features/tags-scenario-outline.feature +0 -37
- package/tests/tags/features/tags.feature +0 -26
- package/tests/tags/package-lock.json +0 -1204
- package/tests/tags/package.json +0 -11
- package/tests/tags/vite.config.js +0 -12
- package/tests/vue/features/step_definitions/test.js +0 -25
- package/tests/vue/features/support/components.js +0 -19
- package/tests/vue/features/test.feature +0 -10
- package/tests/vue/package-lock.json +0 -2164
- package/tests/vue/package.json +0 -18
- package/tests/vue/src/test.vue +0 -10
- package/tests/vue/vite.config.js +0 -15
- /package/{src → dist}/gherkin-languages.json +0 -0
- /package/{src → dist}/tags-expression.js +0 -0
- /package/{src → dist}/tags-expression.umd.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vitest-cucumber-plugin.js","sourceRoot":"","sources":["../src/vitest-cucumber-plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,35 +1,65 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
"
|
|
35
|
-
|
|
2
|
+
"name": "vitest-cucumber-plugin",
|
|
3
|
+
"version": "0.6.2",
|
|
4
|
+
"description": "Plugin for Vitest which allows for tests to be written in Cucumber format.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"vite",
|
|
7
|
+
"vitest",
|
|
8
|
+
"cucumber"
|
|
9
|
+
],
|
|
10
|
+
"homepage": "https://github.com/samuel-ziegler/vitest-cucumber-plugin#readme",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/samuel-ziegler/vitest-cucumber-plugin/issues"
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"main": "src/index.js",
|
|
16
|
+
"type": "module",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js",
|
|
21
|
+
"default": "./dist/index.js"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"README.md",
|
|
27
|
+
"CONTRIBUTING.md",
|
|
28
|
+
"LICENSE",
|
|
29
|
+
"RELEASE_NOTES.md"
|
|
30
|
+
],
|
|
31
|
+
"scripts": {
|
|
32
|
+
"dev": "tsx src/index.ts",
|
|
33
|
+
"clean": "rm -r dist/ || true",
|
|
34
|
+
"build": "yarn tsc && cpy \"src/**/*.{json,js}\" dist --parents",
|
|
35
|
+
"watch": "yarn tsc --watch",
|
|
36
|
+
"nearley": "./generate-parsers",
|
|
37
|
+
"test": "./run-tests"
|
|
38
|
+
},
|
|
39
|
+
"prettier": {
|
|
40
|
+
"tabWidth": 4,
|
|
41
|
+
"singleQuote": true,
|
|
42
|
+
"printWidth": 120
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"@cucumber/cucumber-expressions": "^16.1.2",
|
|
46
|
+
"glob": "^13.0.6",
|
|
47
|
+
"lodash": "^4.17.23",
|
|
48
|
+
"moo": "^0.5.3",
|
|
49
|
+
"nearley": "^2.20.1",
|
|
50
|
+
"pino": "^10.3.1",
|
|
51
|
+
"vitest": "^4.1.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@rollup/plugin-commonjs": "^24.1.0",
|
|
55
|
+
"@types/lodash": "^4.17.24",
|
|
56
|
+
"@types/nearley": "^2.11.5",
|
|
57
|
+
"@types/node": "^25.5.0",
|
|
58
|
+
"cpy-cli": "^7.0.0",
|
|
59
|
+
"rollup": "^3.20.7",
|
|
60
|
+
"tsx": "^4.21.0",
|
|
61
|
+
"typescript": "^5.9.3"
|
|
62
|
+
},
|
|
63
|
+
"repository": "https://github.com/samuel-ziegler/vitest-cucumber-plugin.git",
|
|
64
|
+
"packageManager": "yarn@4.13.0"
|
|
65
|
+
}
|
package/generate-parsers
DELETED
package/rollup-gherkin.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import commonjs from "@rollup/plugin-commonjs";
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
input: "src/gherkin.umd.js",
|
|
5
|
-
output: {
|
|
6
|
-
file: "src/gherkin.js",
|
|
7
|
-
format: "es",
|
|
8
|
-
},
|
|
9
|
-
external : [ 'moo', 'lodash/fp.js', './gherkin-lexer-shared.cjs' ],
|
|
10
|
-
plugins: [commonjs()],
|
|
11
|
-
makeAbsoluteExternalsRelative : false,
|
|
12
|
-
};
|
package/run-tests
DELETED
package/src/generate/examples.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { escape, shouldSkip } from './util.js';
|
|
2
|
-
import { generateTests } from './tests.js';
|
|
3
|
-
import _ from 'lodash/fp.js';
|
|
4
|
-
import { log } from '../logger.js';
|
|
5
|
-
|
|
6
|
-
const createParameterMap = (parameters,values) => {
|
|
7
|
-
const parameterMap = _.reduce((parameterMap,value) => {
|
|
8
|
-
return {
|
|
9
|
-
map : _.set(parameters[parameterMap.index],value,parameterMap.map),
|
|
10
|
-
index : parameterMap.index + 1
|
|
11
|
-
};
|
|
12
|
-
},{ map : {}, index : 0 })(values);
|
|
13
|
-
|
|
14
|
-
return parameterMap.map;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const generateAllTests = (steps,parameters,parameterValues,tags) => {
|
|
18
|
-
const allTests = _.reduce((allTests,values) => {
|
|
19
|
-
const parameterMap = createParameterMap(parameters,values);
|
|
20
|
-
log.debug(`parameterMap : ${JSON.stringify(parameterMap)}`);
|
|
21
|
-
|
|
22
|
-
const tests = generateTests(steps,parameterMap,tags,' ');
|
|
23
|
-
|
|
24
|
-
return { tests : allTests.tests + `
|
|
25
|
-
describe('${allTests.index}',() => {${tests}
|
|
26
|
-
});`, index : allTests.index + 1 };
|
|
27
|
-
},{ tests : '', index : 0})(parameterValues);
|
|
28
|
-
|
|
29
|
-
return allTests.tests;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export const generateExamples = (config,steps,examplesStatement) => {
|
|
33
|
-
log.debug(`generateExamples steps:${JSON.stringify(steps)} examples: ${JSON.stringify(examplesStatement)}`);
|
|
34
|
-
|
|
35
|
-
const parameters = _.head(examplesStatement.dataTable);
|
|
36
|
-
const parameterValues = _.tail(examplesStatement.dataTable);
|
|
37
|
-
|
|
38
|
-
log.debug(`generateExamples parameters:${JSON.stringify(parameters)} parameterValues: ${JSON.stringify(parameterValues)}`);
|
|
39
|
-
|
|
40
|
-
const skip = shouldSkip(config,examplesStatement.tags) ? '.skip' : '';
|
|
41
|
-
|
|
42
|
-
const allTests = generateAllTests(steps,parameters,parameterValues,examplesStatement.tags);
|
|
43
|
-
const code = `
|
|
44
|
-
// tags : ${JSON.stringify(examplesStatement.tags)}
|
|
45
|
-
describe${skip}('${escape(examplesStatement.type.name)}: ${escape(examplesStatement.name)}', () => {${allTests}
|
|
46
|
-
});`;
|
|
47
|
-
return code;
|
|
48
|
-
}
|
package/src/generate/feature.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import _ from 'lodash/fp.js';
|
|
2
|
-
import { log } from '../logger.js';
|
|
3
|
-
import { generateExample, generateScenarioOutline, generateRule } from './index.js';
|
|
4
|
-
import { escape, shouldSkip } from './util.js';
|
|
5
|
-
import { glob } from 'glob';
|
|
6
|
-
|
|
7
|
-
const findJsFiles = async () => glob('features/**/*.js');
|
|
8
|
-
|
|
9
|
-
export const generateFeature = async (config,feature) => {
|
|
10
|
-
const name = feature.name;
|
|
11
|
-
const statements = feature.statements;
|
|
12
|
-
|
|
13
|
-
const testStatements = _.reduce((testStatements,statement) => {
|
|
14
|
-
if (feature.background) {
|
|
15
|
-
statement = _.set('background',feature.background,statement);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
statement = _.set('tags',_.concat(feature.tags,statement.tags),statement);
|
|
19
|
-
|
|
20
|
-
if (statement.type.type === 'example') {
|
|
21
|
-
return testStatements + generateExample(config,statement);
|
|
22
|
-
} else if (statement.type.type === 'scenarioOutline') {
|
|
23
|
-
return testStatements + generateScenarioOutline(config,statement);
|
|
24
|
-
} else if (statement.type.type === 'rule') {
|
|
25
|
-
return testStatements + generateRule(config,statement);
|
|
26
|
-
}
|
|
27
|
-
},'')(statements);
|
|
28
|
-
|
|
29
|
-
const skip = shouldSkip(config,feature.tags) ? '.skip' : '';
|
|
30
|
-
const configStr = JSON.stringify(config);
|
|
31
|
-
const tagsStr = JSON.stringify(feature.tags);
|
|
32
|
-
|
|
33
|
-
const jsFilesImportReducer = (imports,file) => {
|
|
34
|
-
file = file.slice('features/'.length);
|
|
35
|
-
return imports+`
|
|
36
|
-
import './${file}';`;
|
|
37
|
-
};
|
|
38
|
-
const jsFiles = await findJsFiles();
|
|
39
|
-
const jsFilesImport = _.reduce(jsFilesImportReducer,'',jsFiles);
|
|
40
|
-
|
|
41
|
-
const code = `import { expect, test, describe, beforeAll, afterAll, beforeEach, afterEach } from 'vitest';
|
|
42
|
-
import {
|
|
43
|
-
Test,
|
|
44
|
-
applyBeforeAllHooks,
|
|
45
|
-
applyBeforeHooks,
|
|
46
|
-
applyBeforeStepHooks,
|
|
47
|
-
applyAfterAllHooks,
|
|
48
|
-
applyAfterHooks,
|
|
49
|
-
applyAfterStepHooks,
|
|
50
|
-
} from 'vitest-cucumber-plugin';
|
|
51
|
-
import { readdir } from 'node:fs/promises';
|
|
52
|
-
import { log, logConfig } from 'vitest-cucumber-plugin';${jsFilesImport}
|
|
53
|
-
|
|
54
|
-
logConfig(${JSON.stringify(config.log)});
|
|
55
|
-
|
|
56
|
-
var state = {};
|
|
57
|
-
|
|
58
|
-
beforeAll(async () => {
|
|
59
|
-
state = await applyBeforeAllHooks(state,${tagsStr});
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
afterAll(async () => {
|
|
63
|
-
state = await applyAfterAllHooks(state,${tagsStr});
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
// tags : ${tagsStr}
|
|
67
|
-
describe${skip}('${escape(feature.type.name)}: ${escape(name)}', () => {
|
|
68
|
-
${testStatements}});
|
|
69
|
-
`;
|
|
70
|
-
|
|
71
|
-
return code;
|
|
72
|
-
}
|
package/src/generate/index.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { generateTests } from './tests.js';
|
|
2
|
-
import { generateExample } from './example.js';
|
|
3
|
-
import { generateExamples } from './examples.js';
|
|
4
|
-
import { generateScenarioOutline } from './scenario-outline.js';
|
|
5
|
-
import { generateFeature } from './feature.js';
|
|
6
|
-
import { generateRule } from './rule.js';
|
|
7
|
-
|
|
8
|
-
export {
|
|
9
|
-
generateTests,
|
|
10
|
-
generateExample,
|
|
11
|
-
generateExamples,
|
|
12
|
-
generateScenarioOutline,
|
|
13
|
-
generateFeature,
|
|
14
|
-
generateRule,
|
|
15
|
-
};
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import _ from 'lodash/fp.js';
|
|
2
|
-
import { generateExamples } from './examples.js';
|
|
3
|
-
import { escape, shouldSkip } from './util.js';
|
|
4
|
-
|
|
5
|
-
export const generateScenarioOutline = (config,scenarioOutline) => {
|
|
6
|
-
const examplesStatements = _.reduce((examplesStatements,examplesStatement) => {
|
|
7
|
-
examplesStatement = _.set('tags',_.concat(scenarioOutline.tags,examplesStatement.tags),examplesStatement);
|
|
8
|
-
|
|
9
|
-
return examplesStatements + generateExamples(config,scenarioOutline.steps,examplesStatement);
|
|
10
|
-
},'')(scenarioOutline.examples);
|
|
11
|
-
|
|
12
|
-
const skip = shouldSkip(config,scenarioOutline.tags) ? '.skip' : '';
|
|
13
|
-
|
|
14
|
-
const code = ` // tags : ${JSON.stringify(scenarioOutline.tags)}
|
|
15
|
-
describe${skip}('${escape(scenarioOutline.type.name)}: ${escape(scenarioOutline.name)}', () => {
|
|
16
|
-
${examplesStatements}
|
|
17
|
-
});
|
|
18
|
-
`;
|
|
19
|
-
|
|
20
|
-
return code;
|
|
21
|
-
}
|
package/src/gherkin-lexer.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import _ from 'lodash/fp.js';
|
|
2
|
-
import gherkinLexerShared from './gherkin-lexer-shared.cjs';
|
|
3
|
-
import fs from 'fs';
|
|
4
|
-
|
|
5
|
-
const base = {
|
|
6
|
-
language : { match : /^#[ \t]*language:[ \t]*[a-z\-A-Z]+\n/, lineBreaks : true },
|
|
7
|
-
emptyLine : { match: /^[ \t]*(?:\#[^\n]+)?\n/, lineBreaks : true },
|
|
8
|
-
newline : { match : '\n', lineBreaks : true },
|
|
9
|
-
ws : /[ \t]+/,
|
|
10
|
-
at : '@',
|
|
11
|
-
colon : ':',
|
|
12
|
-
repeatStep : '*',
|
|
13
|
-
pipe : '|',
|
|
14
|
-
escapedPipe : '\\|',
|
|
15
|
-
escapedNewline : '\\n',
|
|
16
|
-
escapedBackSlash : '\\\\',
|
|
17
|
-
scenarioOutline : [],
|
|
18
|
-
docString : ['```','"""'],
|
|
19
|
-
word : {
|
|
20
|
-
match : /[^ \t\n\:\|\@\*]+/,
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const trimKeywords = (keywords) => _.map(_.trim);
|
|
25
|
-
const filterStars = (keywords) => _.filter((v) => (v !== '*'));
|
|
26
|
-
const cleanKeywords = (keywords) => filterStars()(trimKeywords()(keywords));
|
|
27
|
-
|
|
28
|
-
const createState = (languageKeywords) => {
|
|
29
|
-
let state = base;
|
|
30
|
-
|
|
31
|
-
state = _.set('scenarioOutline',cleanKeywords(languageKeywords.scenarioOutline),state);
|
|
32
|
-
|
|
33
|
-
let keywords = {};
|
|
34
|
-
|
|
35
|
-
let repeatStepKeys = ['and','but'];
|
|
36
|
-
const repeatStepReducer = (keywords,repeatStepKey) =>
|
|
37
|
-
_.concat(keywords,cleanKeywords(languageKeywords[repeatStepKey]));
|
|
38
|
-
const repeatStepKeywords = _.reduce(repeatStepReducer,[])(repeatStepKeys);
|
|
39
|
-
|
|
40
|
-
let otherKeys = ['feature','examples','given','when','then','scenario','background','rule'];
|
|
41
|
-
const otherKeyReducer = (acc,key) => _.set(key,cleanKeywords(languageKeywords[key]),acc);
|
|
42
|
-
const otherKeywords = _.reduce(otherKeyReducer,{})(otherKeys);
|
|
43
|
-
|
|
44
|
-
keywords = _.set('repeatStep',repeatStepKeywords,otherKeywords);
|
|
45
|
-
|
|
46
|
-
state = _.set(['word','rawKeywords'],keywords,state);
|
|
47
|
-
|
|
48
|
-
return state;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export const gherkinLexerConfig = (options) => {
|
|
52
|
-
const gherkinLanguagesPath = new URL('./gherkin-languages.json', import.meta.url);
|
|
53
|
-
const gherkinLanguages = JSON.parse(fs.readFileSync(gherkinLanguagesPath));
|
|
54
|
-
const language = _.getOr('en','language',options);
|
|
55
|
-
const languageKeys = _.keys(gherkinLanguages);
|
|
56
|
-
const languageKeyReducer = (acc,languageKey) => _.set(languageKey,createState(gherkinLanguages[languageKey]),acc);
|
|
57
|
-
const states = _.reduce(languageKeyReducer,{},languageKeys);
|
|
58
|
-
if (!_.has(language,states)) {
|
|
59
|
-
throw new Error('unknown language "'+language+'"');
|
|
60
|
-
}
|
|
61
|
-
gherkinLexerShared.states = states;
|
|
62
|
-
gherkinLexerShared.language = language;
|
|
63
|
-
};
|
package/src/gherkin.ne
DELETED
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
@{%
|
|
2
|
-
const fp = require('lodash/fp.js');
|
|
3
|
-
const moo = require('moo');
|
|
4
|
-
|
|
5
|
-
const gherkinLexerShared = require('./gherkin-lexer-shared.cjs');
|
|
6
|
-
|
|
7
|
-
const transformKeywords = (state) => fp.set(['word','type'],moo.keywords(state.word.rawKeywords),state);
|
|
8
|
-
|
|
9
|
-
const transformStates = (states) => fp.mapValues(transformKeywords)(states);
|
|
10
|
-
|
|
11
|
-
gherkinLexerShared.states = transformStates(gherkinLexerShared.states);
|
|
12
|
-
|
|
13
|
-
const lexer = moo.states(gherkinLexerShared.states,gherkinLexerShared.language);
|
|
14
|
-
|
|
15
|
-
const trimWhitespace = (cols,str) => {
|
|
16
|
-
const lines = str.split('\n').slice(0,-1);
|
|
17
|
-
return fp.reduce((s,line) => {
|
|
18
|
-
return s+line.slice(cols)+'\n'
|
|
19
|
-
},'')(lines);
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
const setRepeatStepTypesReducer = (steps,step) => {
|
|
23
|
-
if (!fp.has('type.type',step)) {
|
|
24
|
-
step = fp.set('type.type',fp.last(steps).type.type,step);
|
|
25
|
-
}
|
|
26
|
-
return fp.concat(steps,step);
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
const setRepeatStepTypes = (steps) => fp.reduce(setRepeatStepTypesReducer,[],steps);
|
|
30
|
-
|
|
31
|
-
%}
|
|
32
|
-
|
|
33
|
-
@lexer lexer
|
|
34
|
-
|
|
35
|
-
main -> body {% data => data[0] %}
|
|
36
|
-
| language body {% data => data[1] %}
|
|
37
|
-
|
|
38
|
-
language -> %language {%
|
|
39
|
-
(data) => {
|
|
40
|
-
const languageRegex = /^#[ \t]*language:[ \t]*([a-z\-A-Z]+)\n/;
|
|
41
|
-
const languageMatches = data[0].value.match(languageRegex);
|
|
42
|
-
const newLanguage = languageMatches[1];
|
|
43
|
-
lexer.setState(newLanguage);
|
|
44
|
-
}
|
|
45
|
-
%}
|
|
46
|
-
|
|
47
|
-
body -> emptyLines tags feature {% data => fp.set('tags',data[1],data[2]) %}
|
|
48
|
-
|
|
49
|
-
feature -> featureStatement freeform background statements {%
|
|
50
|
-
(data) => fp.assign(data[0],{ description : data[1].trim(), background : data[2], statements : data[3] })
|
|
51
|
-
%}
|
|
52
|
-
featureStatement -> _ %feature _ %colon text %newline {%
|
|
53
|
-
(data) => { return { type : { type : 'feature', name : data[1].value.trim() }, name : data[4].trim() } }
|
|
54
|
-
%}
|
|
55
|
-
|
|
56
|
-
tags -> null {% data => [] %}
|
|
57
|
-
| _ tag tagList %newline {% data => fp.concat(data[1],data[2]) %}
|
|
58
|
-
|
|
59
|
-
tagList -> null {% data => [] %}
|
|
60
|
-
| tagList %ws tag {% data => fp.concat(data[0],data[2]) %}
|
|
61
|
-
|
|
62
|
-
tag -> %at %word {% data => data[1].value.trim() %}
|
|
63
|
-
|
|
64
|
-
background -> null {% data => null %}
|
|
65
|
-
| backgroundStatement freeform steps {%
|
|
66
|
-
data => fp.assign(data[0],{ description : data[1].trim(), steps : data[2] })
|
|
67
|
-
%}
|
|
68
|
-
|
|
69
|
-
backgroundStatement -> _ %background _ %colon text %newline {%
|
|
70
|
-
(data) => { return { type : { type : 'background', name : data[1].value }, name : data[4].trim() } }
|
|
71
|
-
%}
|
|
72
|
-
|
|
73
|
-
statement -> example {% data => data[0] %}
|
|
74
|
-
| scenarioOutline {% data => data[0] %}
|
|
75
|
-
| rule {% data => data[0] %}
|
|
76
|
-
|
|
77
|
-
statements -> null {% data => [] %}
|
|
78
|
-
| statements statement {% data => fp.concat(data[0],data[1]) %}
|
|
79
|
-
|
|
80
|
-
example -> tags exampleStatement steps {% (data) => fp.assign(data[1],{ tags : data[0], steps : data[2] }) %}
|
|
81
|
-
exampleStatement -> _ exampleKeyword _ %colon text %newline {%
|
|
82
|
-
(data) => { return { type : { type : 'example', name : data[1] }, name : data[4].trim() } }
|
|
83
|
-
%}
|
|
84
|
-
exampleKeyword -> %scenario {% data => data[0].value %}
|
|
85
|
-
|
|
86
|
-
exampleList -> null {% data => [] %}
|
|
87
|
-
| exampleList example {% data => fp.concat(data[0],data[1]) %}
|
|
88
|
-
|
|
89
|
-
scenarioOutline -> tags scenarioOutlineStatement steps examplesList {%
|
|
90
|
-
data => fp.assign(data[1],{ tags : data[0], steps : data[2], examples : data[3] })
|
|
91
|
-
%}
|
|
92
|
-
scenarioOutlineStatement -> _ scenarioOutlineKeyword _ %colon text %newline {%
|
|
93
|
-
(data) => { return { type : { type : 'scenarioOutline', name : data[1] }, name : data[4].trim() } }
|
|
94
|
-
%}
|
|
95
|
-
scenarioOutlineKeyword -> %scenarioOutline {% data => data[0].value %}
|
|
96
|
-
|
|
97
|
-
rule -> tags ruleStatement example exampleList {%
|
|
98
|
-
data => fp.assign(data[1],{ tags : data[0], examples : fp.concat(data[2],data[3]) })
|
|
99
|
-
%}
|
|
100
|
-
ruleStatement -> _ ruleKeyword _ %colon text %newline {%
|
|
101
|
-
(data) => { return { type : { type : 'rule', name : data[1] }, name : data[4].trim() } }
|
|
102
|
-
%}
|
|
103
|
-
ruleKeyword -> %rule {% data => data[0].value %}
|
|
104
|
-
|
|
105
|
-
examplesList -> null {% data => [] %}
|
|
106
|
-
| examplesList examples {% data => fp.concat(data[0],data[1]) %}
|
|
107
|
-
|
|
108
|
-
examples -> tags examplesStatement dataTable emptyLines {%
|
|
109
|
-
data => fp.assign(data[1],{ tags : data[0], dataTable : data[2] })
|
|
110
|
-
%}
|
|
111
|
-
examplesStatement -> _ examplesKeyword _ %colon text %newline {%
|
|
112
|
-
(data) => { return { type : { type : 'examples', name : data[1] }, name : data[4] } }
|
|
113
|
-
%}
|
|
114
|
-
examplesKeyword -> %examples {% data => data[0].value %}
|
|
115
|
-
|
|
116
|
-
dataTable -> dataTableRow {% data => [data[0]] %}
|
|
117
|
-
| dataTable dataTableRow {% data => fp.concat(data[0],[data[1]]) %}
|
|
118
|
-
|
|
119
|
-
dataTableRow -> _ %pipe dataTableColumns %newline {% data => data[2] %}
|
|
120
|
-
|
|
121
|
-
dataTableColumns -> null {% data => [] %}
|
|
122
|
-
| dataTableColumns dataTableColumnText %pipe {% data => fp.concat(data[0],data[1].trim()) %}
|
|
123
|
-
|
|
124
|
-
dataTableColumnText -> null {% data => '' %}
|
|
125
|
-
| dataTableColumnText escapedColumnCharaters {% data => data[0]+data[1] %}
|
|
126
|
-
| dataTableColumnText keywords {% data => data[0]+data[1] %}
|
|
127
|
-
| dataTableColumnText %word {% data => data[0]+data[1].value %}
|
|
128
|
-
| dataTableColumnText %ws {% data => data[0]+data[1].value %}
|
|
129
|
-
| dataTableColumnText %at {% data => data[0]+data[1].value %}
|
|
130
|
-
|
|
131
|
-
escapedColumnCharaters -> %escapedPipe {% data => '|' %}
|
|
132
|
-
| %escapedBackSlash {% data => '\\' %}
|
|
133
|
-
| %escapedNewline {% data => '\n' %}
|
|
134
|
-
|
|
135
|
-
steps -> step moreSteps {% data => setRepeatStepTypes(fp.concat(data[0],data[1])) %}
|
|
136
|
-
|
|
137
|
-
moreSteps -> null {% data => [] %}
|
|
138
|
-
| moreSteps step {% data => fp.concat(data[0],data[1]) %}
|
|
139
|
-
| moreSteps repeatStep {% data => fp.concat(data[0],data[1]) %}
|
|
140
|
-
| moreSteps %emptyLine {% data => data[0] %}
|
|
141
|
-
|
|
142
|
-
step -> stepStatement
|
|
143
|
-
| stepStatement dataTable {% data => fp.set('dataTable',data[1],data[0]) %}
|
|
144
|
-
| stepStatement docString {% data => fp.set('docString',data[1],data[0]) %}
|
|
145
|
-
|
|
146
|
-
stepStatement -> _ stepKeyword text %newline {% data => { return { type : data[1], text : data[2].trim() } } %}
|
|
147
|
-
|
|
148
|
-
stepKeyword -> %given {% (data) => { return { type : 'given', name : data[0].value } } %}
|
|
149
|
-
| %when {% (data) => { return { type : 'when', name : data[0].value } } %}
|
|
150
|
-
| %then {% (data) => { return { type : 'then', name : data[0].value } } %}
|
|
151
|
-
|
|
152
|
-
repeatStep -> repeatStepStatement
|
|
153
|
-
| repeatStepStatement dataTable {% data => fp.set('dataTable',data[1],data[0]) %}
|
|
154
|
-
| repeatStepStatement docString {% data => fp.set('docString',data[1],data[0]) %}
|
|
155
|
-
|
|
156
|
-
repeatStepStatement -> _ repeatStepKeyword text %newline {%
|
|
157
|
-
data => { return { type : data[1], text : data[2].trim() } }
|
|
158
|
-
%}
|
|
159
|
-
|
|
160
|
-
repeatStepKeyword -> %repeatStep {% (data) => { return { name : data[0].value } } %}
|
|
161
|
-
|
|
162
|
-
text -> null {% data => '' %}
|
|
163
|
-
| text %word {% data => data[0]+data[1].value %}
|
|
164
|
-
| text %ws {% data => data[0]+data[1].value %}
|
|
165
|
-
| text keywords {% data => data[0]+data[1] %}
|
|
166
|
-
| text %at {% data => data[0]+data[1].value %}
|
|
167
|
-
| text %pipe {% data => data[0]+data[1].value %}
|
|
168
|
-
| text %escapedPipe {% data => data[0]+data[1].value %}
|
|
169
|
-
| text %escapedNewline {% data => data[0]+data[1].value %}
|
|
170
|
-
| text %escapedBackSlash {% data => data[0]+data[1].value %}
|
|
171
|
-
|
|
172
|
-
keywords -> %given {% data => data[0].value %}
|
|
173
|
-
| %when {% data => data[0].value %}
|
|
174
|
-
| %then {% data => data[0].value %}
|
|
175
|
-
| %repeatStep {% data => data[0].value %}
|
|
176
|
-
| %colon {% data => data[0].value %}
|
|
177
|
-
| %scenario {% data => data[0].value %}
|
|
178
|
-
| %examples {% data => data[0].value %}
|
|
179
|
-
| %scenarioOutline {% data => data[0].value %}
|
|
180
|
-
| %background {% data => data[0].value %}
|
|
181
|
-
|
|
182
|
-
bolText -> %ws %word {% data => data[1].value %}
|
|
183
|
-
| %word {% data => data[0].value %}
|
|
184
|
-
|
|
185
|
-
freeform -> null {% data => '' %}
|
|
186
|
-
| freeform bolText text %newline {% (data) => {
|
|
187
|
-
return data[0]+data[1]+data[2]+'\n'
|
|
188
|
-
}
|
|
189
|
-
%}
|
|
190
|
-
| freeform %emptyLine {% data => data[0]+'\n' %}
|
|
191
|
-
|
|
192
|
-
docString -> docStringStatement docText docStringStatement {%
|
|
193
|
-
data => fp.set('text',trimWhitespace(data[0].ws.length,data[1]),data[0])
|
|
194
|
-
%}
|
|
195
|
-
docStringStatement -> _ %docString contentType %newline {%
|
|
196
|
-
(data) => { return { type : { type : 'docString', name : data[1].value }, ws : data[0], contentType : data[2] } }
|
|
197
|
-
%}
|
|
198
|
-
|
|
199
|
-
contentType -> null {% data => null %}
|
|
200
|
-
| %ws {% data => null %}
|
|
201
|
-
| %word {% data => data[0].value %}
|
|
202
|
-
|
|
203
|
-
docText -> null {% data => '' %}
|
|
204
|
-
| docText text %newline {% data => data[0]+data[1]+data[2].value %}
|
|
205
|
-
| docText %emptyLine {% data => data[0]+data[1].value %}
|
|
206
|
-
|
|
207
|
-
_ -> null {% data => '' %}
|
|
208
|
-
| %ws {% data => data[0].value %}
|
|
209
|
-
|
|
210
|
-
emptyLines -> null {% data => '' %}
|
|
211
|
-
| emptyLines %emptyLine {% data => data[0]+'\n' %}
|
package/src/hooks.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { log } from './logger.js';
|
|
2
|
-
import _ from 'lodash/fp.js';
|
|
3
|
-
import { tagsFunction } from './tags.js';
|
|
4
|
-
|
|
5
|
-
const allHooks = {
|
|
6
|
-
beforeAll : [],
|
|
7
|
-
before : [],
|
|
8
|
-
beforeStep : [],
|
|
9
|
-
afterAll : [],
|
|
10
|
-
after : [],
|
|
11
|
-
afterStep : [],
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const hookNames = {
|
|
15
|
-
beforeAll : 'BeforeAll',
|
|
16
|
-
before : 'Before',
|
|
17
|
-
beforeStep : 'BeforeStep',
|
|
18
|
-
afterAll : 'AfterAll',
|
|
19
|
-
after : 'After',
|
|
20
|
-
afterStep : 'AfterStep',
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const applyHooks = async (hooksName,state,tags) => {
|
|
25
|
-
const hooks = allHooks[hooksName];
|
|
26
|
-
log.debug({ state }, `applyHooks: ${hooksName}`);
|
|
27
|
-
for (let i = 0; i < hooks.length; i++) {
|
|
28
|
-
let hook = hooks[i];
|
|
29
|
-
|
|
30
|
-
log.debug({ state }, `applyHooks name: ${hook.name}`);
|
|
31
|
-
|
|
32
|
-
const result = hook.tagsFunction(tags);
|
|
33
|
-
|
|
34
|
-
log.debug('applyHooks match? '+result+' tags: '+JSON.stringify(tags));
|
|
35
|
-
if (result) {
|
|
36
|
-
const origState = state;
|
|
37
|
-
state = await hook.f(state);
|
|
38
|
-
log.info({ state, origState }, `${hookNames[hooksName]}('${hook.name}')`);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return state;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
const addHook = (hooksName,opts,f) => {
|
|
45
|
-
if (_.isFunction(opts)) {
|
|
46
|
-
opts = { name : '', f : opts };
|
|
47
|
-
} else if (_.isString(opts)) {
|
|
48
|
-
opts = { name : opts, f };
|
|
49
|
-
} else if (_.isObject(opts)) {
|
|
50
|
-
opts.f = f;
|
|
51
|
-
} else {
|
|
52
|
-
throw new Error('Unknown options argument: '+JSON.stringify(opts));
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
opts = _.set('tagsFunction',tagsFunction(opts.tags),opts);
|
|
56
|
-
|
|
57
|
-
log.debug(`addHook hooksName: ${hooksName} name: ${opts.name}`);
|
|
58
|
-
allHooks[hooksName] = _.concat(allHooks[hooksName],opts);
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
export const BeforeAll = (opts,f) => { addHook('beforeAll',opts,f) };
|
|
62
|
-
export const applyBeforeAllHooks = (state,tags) => applyHooks('beforeAll',state,tags);
|
|
63
|
-
|
|
64
|
-
export const Before = (opts,f) => { addHook('before',opts,f) };
|
|
65
|
-
export const applyBeforeHooks = (state,tags) => applyHooks('before',state,tags);
|
|
66
|
-
|
|
67
|
-
export const BeforeStep = (opts,f) => { addHook('beforeStep',opts,f) };
|
|
68
|
-
export const applyBeforeStepHooks = (state,tags) => applyHooks('beforeStep',state,tags);
|
|
69
|
-
|
|
70
|
-
export const AfterAll = (opts,f) => { addHook('afterAll',opts,f) };
|
|
71
|
-
export const applyAfterAllHooks = (state,tags) => applyHooks('afterAll',state,tags);
|
|
72
|
-
|
|
73
|
-
export const After = (opts,f) => { addHook('after',opts,f) };
|
|
74
|
-
export const applyAfterHooks = (state,tags) => applyHooks('after',state,tags);
|
|
75
|
-
|
|
76
|
-
export const AfterStep = (opts,f) => { addHook('afterStep',opts,f) };
|
|
77
|
-
export const applyAfterStepHooks = (state,tags) => applyHooks('afterStep',state,tags);
|