@cucumber/cucumber 8.6.0 → 8.8.0
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/lib/cli/helpers.d.ts +0 -2
- package/lib/cli/helpers.js +0 -2
- package/lib/cli/helpers.js.map +1 -1
- package/lib/filter_stack_trace.d.ts +3 -0
- package/lib/filter_stack_trace.js +38 -0
- package/lib/filter_stack_trace.js.map +1 -0
- package/lib/index.d.ts +25 -8
- package/lib/index.js +27 -13
- package/lib/index.js.map +1 -1
- package/lib/runtime/format_error.d.ts +1 -0
- package/lib/runtime/format_error.js +29 -0
- package/lib/runtime/format_error.js.map +1 -0
- package/lib/runtime/index.d.ts +0 -1
- package/lib/runtime/index.js +1 -8
- package/lib/runtime/index.js.map +1 -1
- package/lib/runtime/parallel/worker.d.ts +0 -1
- package/lib/runtime/parallel/worker.js +6 -11
- package/lib/runtime/parallel/worker.js.map +1 -1
- package/lib/runtime/step_runner.d.ts +2 -1
- package/lib/runtime/step_runner.js +3 -3
- package/lib/runtime/step_runner.js.map +1 -1
- package/lib/runtime/test_case_runner.d.ts +4 -1
- package/lib/runtime/test_case_runner.js +53 -47
- package/lib/runtime/test_case_runner.js.map +1 -1
- package/lib/support_code_library_builder/get_definition_line_and_uri.d.ts +1 -1
- package/lib/support_code_library_builder/get_definition_line_and_uri.js +5 -6
- package/lib/support_code_library_builder/get_definition_line_and_uri.js.map +1 -1
- package/lib/support_code_library_builder/index.js +1 -2
- package/lib/support_code_library_builder/index.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/lib/wrapper.mjs +6 -8
- package/package.json +25 -25
- package/lib/stack_trace_filter.d.ts +0 -11
- package/lib/stack_trace_filter.js +0 -46
- package/lib/stack_trace_filter.js.map +0 -1
|
@@ -33,7 +33,7 @@ const messages = __importStar(require("@cucumber/messages"));
|
|
|
33
33
|
const messages_1 = require("@cucumber/messages");
|
|
34
34
|
const value_checker_1 = require("../value_checker");
|
|
35
35
|
class TestCaseRunner {
|
|
36
|
-
constructor({ eventBroadcaster, stopwatch, gherkinDocument, newId, pickle, testCase, retries = 0, skip, supportCodeLibrary, worldParameters, }) {
|
|
36
|
+
constructor({ eventBroadcaster, stopwatch, gherkinDocument, newId, pickle, testCase, retries = 0, skip, filterStackTraces, supportCodeLibrary, worldParameters, }) {
|
|
37
37
|
this.attachmentManager = new attachment_manager_1.default(({ data, media }) => {
|
|
38
38
|
if ((0, value_checker_1.doesNotHaveValue)(this.currentTestStepId)) {
|
|
39
39
|
throw new Error('Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.');
|
|
@@ -57,6 +57,7 @@ class TestCaseRunner {
|
|
|
57
57
|
this.pickle = pickle;
|
|
58
58
|
this.testCase = testCase;
|
|
59
59
|
this.skip = skip;
|
|
60
|
+
this.filterStackTraces = filterStackTraces;
|
|
60
61
|
this.supportCodeLibrary = supportCodeLibrary;
|
|
61
62
|
this.worldParameters = worldParameters;
|
|
62
63
|
this.resetTestProgressData();
|
|
@@ -92,6 +93,7 @@ class TestCaseRunner {
|
|
|
92
93
|
async invokeStep(step, stepDefinition, hookParameter) {
|
|
93
94
|
return await step_runner_1.default.run({
|
|
94
95
|
defaultTimeout: this.supportCodeLibrary.defaultTimeout,
|
|
96
|
+
filterStackTraces: this.filterStackTraces,
|
|
95
97
|
hookParameter,
|
|
96
98
|
step,
|
|
97
99
|
stepDefinition,
|
|
@@ -130,52 +132,7 @@ class TestCaseRunner {
|
|
|
130
132
|
async run() {
|
|
131
133
|
for (let attempt = 0; attempt < this.maxAttempts; attempt++) {
|
|
132
134
|
const moreAttemptsRemaining = attempt + 1 < this.maxAttempts;
|
|
133
|
-
|
|
134
|
-
const testCaseStarted = {
|
|
135
|
-
testCaseStarted: {
|
|
136
|
-
attempt,
|
|
137
|
-
testCaseId: this.testCase.id,
|
|
138
|
-
id: this.currentTestCaseStartedId,
|
|
139
|
-
timestamp: this.stopwatch.timestamp(),
|
|
140
|
-
},
|
|
141
|
-
};
|
|
142
|
-
this.eventBroadcaster.emit('envelope', testCaseStarted);
|
|
143
|
-
// used to determine whether a hook is a Before or After
|
|
144
|
-
let didWeRunStepsYet = false;
|
|
145
|
-
for (const testStep of this.testCase.testSteps) {
|
|
146
|
-
await this.aroundTestStep(testStep.id, async () => {
|
|
147
|
-
if ((0, value_checker_1.doesHaveValue)(testStep.hookId)) {
|
|
148
|
-
const hookParameter = {
|
|
149
|
-
gherkinDocument: this.gherkinDocument,
|
|
150
|
-
pickle: this.pickle,
|
|
151
|
-
testCaseStartedId: this.currentTestCaseStartedId,
|
|
152
|
-
};
|
|
153
|
-
if (didWeRunStepsYet) {
|
|
154
|
-
hookParameter.result = this.getWorstStepResult();
|
|
155
|
-
hookParameter.willBeRetried =
|
|
156
|
-
this.getWorstStepResult().status ===
|
|
157
|
-
messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;
|
|
158
|
-
}
|
|
159
|
-
return await this.runHook(findHookDefinition(testStep.hookId, this.supportCodeLibrary), hookParameter, !didWeRunStepsYet);
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
const pickleStep = this.pickle.steps.find((pickleStep) => pickleStep.id === testStep.pickleStepId);
|
|
163
|
-
const testStepResult = await this.runStep(pickleStep, testStep);
|
|
164
|
-
didWeRunStepsYet = true;
|
|
165
|
-
return testStepResult;
|
|
166
|
-
}
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
const willBeRetried = this.getWorstStepResult().status ===
|
|
170
|
-
messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;
|
|
171
|
-
const testCaseFinished = {
|
|
172
|
-
testCaseFinished: {
|
|
173
|
-
testCaseStartedId: this.currentTestCaseStartedId,
|
|
174
|
-
timestamp: this.stopwatch.timestamp(),
|
|
175
|
-
willBeRetried,
|
|
176
|
-
},
|
|
177
|
-
};
|
|
178
|
-
this.eventBroadcaster.emit('envelope', testCaseFinished);
|
|
135
|
+
const willBeRetried = await this.runAttempt(attempt, moreAttemptsRemaining);
|
|
179
136
|
if (!willBeRetried) {
|
|
180
137
|
break;
|
|
181
138
|
}
|
|
@@ -183,6 +140,55 @@ class TestCaseRunner {
|
|
|
183
140
|
}
|
|
184
141
|
return this.getWorstStepResult().status;
|
|
185
142
|
}
|
|
143
|
+
async runAttempt(attempt, moreAttemptsRemaining) {
|
|
144
|
+
this.currentTestCaseStartedId = this.newId();
|
|
145
|
+
const testCaseStarted = {
|
|
146
|
+
testCaseStarted: {
|
|
147
|
+
attempt,
|
|
148
|
+
testCaseId: this.testCase.id,
|
|
149
|
+
id: this.currentTestCaseStartedId,
|
|
150
|
+
timestamp: this.stopwatch.timestamp(),
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
this.eventBroadcaster.emit('envelope', testCaseStarted);
|
|
154
|
+
// used to determine whether a hook is a Before or After
|
|
155
|
+
let didWeRunStepsYet = false;
|
|
156
|
+
for (const testStep of this.testCase.testSteps) {
|
|
157
|
+
await this.aroundTestStep(testStep.id, async () => {
|
|
158
|
+
if ((0, value_checker_1.doesHaveValue)(testStep.hookId)) {
|
|
159
|
+
const hookParameter = {
|
|
160
|
+
gherkinDocument: this.gherkinDocument,
|
|
161
|
+
pickle: this.pickle,
|
|
162
|
+
testCaseStartedId: this.currentTestCaseStartedId,
|
|
163
|
+
};
|
|
164
|
+
if (didWeRunStepsYet) {
|
|
165
|
+
hookParameter.result = this.getWorstStepResult();
|
|
166
|
+
hookParameter.willBeRetried =
|
|
167
|
+
this.getWorstStepResult().status ===
|
|
168
|
+
messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;
|
|
169
|
+
}
|
|
170
|
+
return await this.runHook(findHookDefinition(testStep.hookId, this.supportCodeLibrary), hookParameter, !didWeRunStepsYet);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
const pickleStep = this.pickle.steps.find((pickleStep) => pickleStep.id === testStep.pickleStepId);
|
|
174
|
+
const testStepResult = await this.runStep(pickleStep, testStep);
|
|
175
|
+
didWeRunStepsYet = true;
|
|
176
|
+
return testStepResult;
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
const willBeRetried = this.getWorstStepResult().status ===
|
|
181
|
+
messages.TestStepResultStatus.FAILED && moreAttemptsRemaining;
|
|
182
|
+
const testCaseFinished = {
|
|
183
|
+
testCaseFinished: {
|
|
184
|
+
testCaseStartedId: this.currentTestCaseStartedId,
|
|
185
|
+
timestamp: this.stopwatch.timestamp(),
|
|
186
|
+
willBeRetried,
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
this.eventBroadcaster.emit('envelope', testCaseFinished);
|
|
190
|
+
return willBeRetried;
|
|
191
|
+
}
|
|
186
192
|
async runHook(hookDefinition, hookParameter, isBeforeHook) {
|
|
187
193
|
if (this.shouldSkipHook(isBeforeHook)) {
|
|
188
194
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_case_runner.js","sourceRoot":"","sources":["../../src/runtime/test_case_runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAmbiguousStepException } from './helpers'\nimport AttachmentManager from './attachment_manager'\nimport StepRunner from './step_runner'\nimport * as messages from '@cucumber/messages'\nimport { getWorstTestStepResult, IdGenerator } from '@cucumber/messages'\nimport { EventEmitter } from 'events'\nimport {\n ISupportCodeLibrary,\n ITestCaseHookParameter,\n ITestStepHookParameter,\n} from '../support_code_library_builder/types'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestStepHookDefinition from '../models/test_step_hook_definition'\nimport { IDefinition } from '../models/definition'\nimport { doesHaveValue, doesNotHaveValue } from '../value_checker'\nimport { ITestRunStopwatch } from './stopwatch'\nimport StepDefinition from '../models/step_definition'\n\nexport interface INewTestCaseRunnerOptions {\n eventBroadcaster: EventEmitter\n stopwatch: ITestRunStopwatch\n gherkinDocument: messages.GherkinDocument\n newId: IdGenerator.NewId\n pickle: messages.Pickle\n testCase: messages.TestCase\n retries: number\n skip: boolean\n supportCodeLibrary: ISupportCodeLibrary\n worldParameters: any\n}\n\nexport default class TestCaseRunner {\n private readonly attachmentManager: AttachmentManager\n private currentTestCaseStartedId: string\n private currentTestStepId: string\n private readonly eventBroadcaster: EventEmitter\n private readonly stopwatch: ITestRunStopwatch\n private readonly gherkinDocument: messages.GherkinDocument\n private readonly newId: IdGenerator.NewId\n private readonly pickle: messages.Pickle\n private readonly testCase: messages.TestCase\n private readonly maxAttempts: number\n private readonly skip: boolean\n private readonly supportCodeLibrary: ISupportCodeLibrary\n private testStepResults: messages.TestStepResult[]\n private world: any\n private readonly worldParameters: any\n\n constructor({\n eventBroadcaster,\n stopwatch,\n gherkinDocument,\n newId,\n pickle,\n testCase,\n retries = 0,\n skip,\n supportCodeLibrary,\n worldParameters,\n }: INewTestCaseRunnerOptions) {\n this.attachmentManager = new AttachmentManager(({ data, media }) => {\n if (doesNotHaveValue(this.currentTestStepId)) {\n throw new Error(\n 'Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.'\n )\n }\n const attachment: messages.Envelope = {\n attachment: {\n body: data,\n contentEncoding: media.encoding,\n mediaType: media.contentType,\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId: this.currentTestStepId,\n },\n }\n this.eventBroadcaster.emit('envelope', attachment)\n })\n this.eventBroadcaster = eventBroadcaster\n this.stopwatch = stopwatch\n this.gherkinDocument = gherkinDocument\n this.maxAttempts = 1 + (skip ? 0 : retries)\n this.newId = newId\n this.pickle = pickle\n this.testCase = testCase\n this.skip = skip\n this.supportCodeLibrary = supportCodeLibrary\n this.worldParameters = worldParameters\n this.resetTestProgressData()\n }\n\n resetTestProgressData(): void {\n this.world = new this.supportCodeLibrary.World({\n attach: this.attachmentManager.create.bind(this.attachmentManager),\n log: this.attachmentManager.log.bind(this.attachmentManager),\n parameters: this.worldParameters,\n })\n this.testStepResults = []\n }\n\n getBeforeStepHookDefinitions(): TestStepHookDefinition[] {\n return this.supportCodeLibrary.beforeTestStepHookDefinitions.filter(\n (hookDefinition) => hookDefinition.appliesToTestCase(this.pickle)\n )\n }\n\n getAfterStepHookDefinitions(): TestStepHookDefinition[] {\n return this.supportCodeLibrary.afterTestStepHookDefinitions\n .slice(0)\n .reverse()\n .filter((hookDefinition) => hookDefinition.appliesToTestCase(this.pickle))\n }\n\n getWorstStepResult(): messages.TestStepResult {\n if (this.testStepResults.length === 0) {\n return {\n status: this.skip\n ? messages.TestStepResultStatus.SKIPPED\n : messages.TestStepResultStatus.PASSED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n return getWorstTestStepResult(this.testStepResults)\n }\n\n async invokeStep(\n step: messages.PickleStep,\n stepDefinition: IDefinition,\n hookParameter?: any\n ): Promise<messages.TestStepResult> {\n return await StepRunner.run({\n defaultTimeout: this.supportCodeLibrary.defaultTimeout,\n hookParameter,\n step,\n stepDefinition,\n world: this.world,\n })\n }\n\n isSkippingSteps(): boolean {\n return (\n this.getWorstStepResult().status !== messages.TestStepResultStatus.PASSED\n )\n }\n\n shouldSkipHook(isBeforeHook: boolean): boolean {\n return this.skip || (this.isSkippingSteps() && isBeforeHook)\n }\n\n async aroundTestStep(\n testStepId: string,\n runStepFn: () => Promise<messages.TestStepResult>\n ): Promise<void> {\n const testStepStarted: messages.Envelope = {\n testStepStarted: {\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testStepStarted)\n this.currentTestStepId = testStepId\n const testStepResult = await runStepFn()\n this.currentTestStepId = null\n this.testStepResults.push(testStepResult)\n const testStepFinished: messages.Envelope = {\n testStepFinished: {\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId,\n testStepResult,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testStepFinished)\n }\n\n async run(): Promise<messages.TestStepResultStatus> {\n for (let attempt = 0; attempt < this.maxAttempts; attempt++) {\n const moreAttemptsRemaining = attempt + 1 < this.maxAttempts\n this.currentTestCaseStartedId = this.newId()\n const testCaseStarted: messages.Envelope = {\n testCaseStarted: {\n attempt,\n testCaseId: this.testCase.id,\n id: this.currentTestCaseStartedId,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testCaseStarted)\n // used to determine whether a hook is a Before or After\n let didWeRunStepsYet = false\n for (const testStep of this.testCase.testSteps) {\n await this.aroundTestStep(testStep.id, async () => {\n if (doesHaveValue(testStep.hookId)) {\n const hookParameter: ITestCaseHookParameter = {\n gherkinDocument: this.gherkinDocument,\n pickle: this.pickle,\n testCaseStartedId: this.currentTestCaseStartedId,\n }\n if (didWeRunStepsYet) {\n hookParameter.result = this.getWorstStepResult()\n hookParameter.willBeRetried =\n this.getWorstStepResult().status ===\n messages.TestStepResultStatus.FAILED && moreAttemptsRemaining\n }\n return await this.runHook(\n findHookDefinition(testStep.hookId, this.supportCodeLibrary),\n hookParameter,\n !didWeRunStepsYet\n )\n } else {\n const pickleStep = this.pickle.steps.find(\n (pickleStep) => pickleStep.id === testStep.pickleStepId\n )\n const testStepResult = await this.runStep(pickleStep, testStep)\n didWeRunStepsYet = true\n return testStepResult\n }\n })\n }\n\n const willBeRetried =\n this.getWorstStepResult().status ===\n messages.TestStepResultStatus.FAILED && moreAttemptsRemaining\n const testCaseFinished: messages.Envelope = {\n testCaseFinished: {\n testCaseStartedId: this.currentTestCaseStartedId,\n timestamp: this.stopwatch.timestamp(),\n willBeRetried,\n },\n }\n this.eventBroadcaster.emit('envelope', testCaseFinished)\n if (!willBeRetried) {\n break\n }\n this.resetTestProgressData()\n }\n return this.getWorstStepResult().status\n }\n\n async runHook(\n hookDefinition: TestCaseHookDefinition,\n hookParameter: ITestCaseHookParameter,\n isBeforeHook: boolean\n ): Promise<messages.TestStepResult> {\n if (this.shouldSkipHook(isBeforeHook)) {\n return {\n status: messages.TestStepResultStatus.SKIPPED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n return await this.invokeStep(null, hookDefinition, hookParameter)\n }\n\n async runStepHooks(\n stepHooks: TestStepHookDefinition[],\n pickleStep: messages.PickleStep,\n stepResult?: messages.TestStepResult\n ): Promise<messages.TestStepResult[]> {\n const stepHooksResult = []\n const hookParameter: ITestStepHookParameter = {\n gherkinDocument: this.gherkinDocument,\n pickle: this.pickle,\n pickleStep,\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId: this.currentTestStepId,\n result: stepResult,\n }\n for (const stepHookDefinition of stepHooks) {\n stepHooksResult.push(\n await this.invokeStep(null, stepHookDefinition, hookParameter)\n )\n }\n return stepHooksResult\n }\n\n async runStep(\n pickleStep: messages.PickleStep,\n testStep: messages.TestStep\n ): Promise<messages.TestStepResult> {\n const stepDefinitions = testStep.stepDefinitionIds.map(\n (stepDefinitionId) => {\n return findStepDefinition(stepDefinitionId, this.supportCodeLibrary)\n }\n )\n if (stepDefinitions.length === 0) {\n return {\n status: messages.TestStepResultStatus.UNDEFINED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n } else if (stepDefinitions.length > 1) {\n return {\n message: getAmbiguousStepException(stepDefinitions),\n status: messages.TestStepResultStatus.AMBIGUOUS,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n } else if (this.isSkippingSteps()) {\n return {\n status: messages.TestStepResultStatus.SKIPPED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n\n let stepResult\n let stepResults = await this.runStepHooks(\n this.getBeforeStepHookDefinitions(),\n pickleStep\n )\n if (\n getWorstTestStepResult(stepResults).status !==\n messages.TestStepResultStatus.FAILED\n ) {\n stepResult = await this.invokeStep(pickleStep, stepDefinitions[0])\n stepResults.push(stepResult)\n }\n const afterStepHookResults = await this.runStepHooks(\n this.getAfterStepHookDefinitions(),\n pickleStep,\n stepResult\n )\n stepResults = stepResults.concat(afterStepHookResults)\n\n const finalStepResult = getWorstTestStepResult(stepResults)\n let finalDuration = messages.TimeConversion.millisecondsToDuration(0)\n for (const result of stepResults) {\n finalDuration = messages.TimeConversion.addDurations(\n finalDuration,\n result.duration\n )\n }\n finalStepResult.duration = finalDuration\n return finalStepResult\n }\n}\n\nfunction findHookDefinition(\n id: string,\n supportCodeLibrary: ISupportCodeLibrary\n): TestCaseHookDefinition {\n return [\n ...supportCodeLibrary.beforeTestCaseHookDefinitions,\n ...supportCodeLibrary.afterTestCaseHookDefinitions,\n ].find((definition) => definition.id === id)\n}\n\nfunction findStepDefinition(\n id: string,\n supportCodeLibrary: ISupportCodeLibrary\n): StepDefinition {\n return supportCodeLibrary.stepDefinitions.find(\n (definition) => definition.id === id\n )\n}\n"]}
|
|
1
|
+
{"version":3,"file":"test_case_runner.js","sourceRoot":"","sources":["../../src/runtime/test_case_runner.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAmbiguousStepException } from './helpers'\nimport AttachmentManager from './attachment_manager'\nimport StepRunner from './step_runner'\nimport * as messages from '@cucumber/messages'\nimport { getWorstTestStepResult, IdGenerator } from '@cucumber/messages'\nimport { EventEmitter } from 'events'\nimport {\n ISupportCodeLibrary,\n ITestCaseHookParameter,\n ITestStepHookParameter,\n} from '../support_code_library_builder/types'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestStepHookDefinition from '../models/test_step_hook_definition'\nimport { IDefinition } from '../models/definition'\nimport { doesHaveValue, doesNotHaveValue } from '../value_checker'\nimport { ITestRunStopwatch } from './stopwatch'\nimport StepDefinition from '../models/step_definition'\n\nexport interface INewTestCaseRunnerOptions {\n eventBroadcaster: EventEmitter\n stopwatch: ITestRunStopwatch\n gherkinDocument: messages.GherkinDocument\n newId: IdGenerator.NewId\n pickle: messages.Pickle\n testCase: messages.TestCase\n retries: number\n skip: boolean\n filterStackTraces: boolean\n supportCodeLibrary: ISupportCodeLibrary\n worldParameters: any\n}\n\nexport default class TestCaseRunner {\n private readonly attachmentManager: AttachmentManager\n private currentTestCaseStartedId: string\n private currentTestStepId: string\n private readonly eventBroadcaster: EventEmitter\n private readonly stopwatch: ITestRunStopwatch\n private readonly gherkinDocument: messages.GherkinDocument\n private readonly newId: IdGenerator.NewId\n private readonly pickle: messages.Pickle\n private readonly testCase: messages.TestCase\n private readonly maxAttempts: number\n private readonly skip: boolean\n private readonly filterStackTraces: boolean\n private readonly supportCodeLibrary: ISupportCodeLibrary\n private testStepResults: messages.TestStepResult[]\n private world: any\n private readonly worldParameters: any\n\n constructor({\n eventBroadcaster,\n stopwatch,\n gherkinDocument,\n newId,\n pickle,\n testCase,\n retries = 0,\n skip,\n filterStackTraces,\n supportCodeLibrary,\n worldParameters,\n }: INewTestCaseRunnerOptions) {\n this.attachmentManager = new AttachmentManager(({ data, media }) => {\n if (doesNotHaveValue(this.currentTestStepId)) {\n throw new Error(\n 'Cannot attach when a step/hook is not running. Ensure your step/hook waits for the attach to finish.'\n )\n }\n const attachment: messages.Envelope = {\n attachment: {\n body: data,\n contentEncoding: media.encoding,\n mediaType: media.contentType,\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId: this.currentTestStepId,\n },\n }\n this.eventBroadcaster.emit('envelope', attachment)\n })\n this.eventBroadcaster = eventBroadcaster\n this.stopwatch = stopwatch\n this.gherkinDocument = gherkinDocument\n this.maxAttempts = 1 + (skip ? 0 : retries)\n this.newId = newId\n this.pickle = pickle\n this.testCase = testCase\n this.skip = skip\n this.filterStackTraces = filterStackTraces\n this.supportCodeLibrary = supportCodeLibrary\n this.worldParameters = worldParameters\n this.resetTestProgressData()\n }\n\n resetTestProgressData(): void {\n this.world = new this.supportCodeLibrary.World({\n attach: this.attachmentManager.create.bind(this.attachmentManager),\n log: this.attachmentManager.log.bind(this.attachmentManager),\n parameters: this.worldParameters,\n })\n this.testStepResults = []\n }\n\n getBeforeStepHookDefinitions(): TestStepHookDefinition[] {\n return this.supportCodeLibrary.beforeTestStepHookDefinitions.filter(\n (hookDefinition) => hookDefinition.appliesToTestCase(this.pickle)\n )\n }\n\n getAfterStepHookDefinitions(): TestStepHookDefinition[] {\n return this.supportCodeLibrary.afterTestStepHookDefinitions\n .slice(0)\n .reverse()\n .filter((hookDefinition) => hookDefinition.appliesToTestCase(this.pickle))\n }\n\n getWorstStepResult(): messages.TestStepResult {\n if (this.testStepResults.length === 0) {\n return {\n status: this.skip\n ? messages.TestStepResultStatus.SKIPPED\n : messages.TestStepResultStatus.PASSED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n return getWorstTestStepResult(this.testStepResults)\n }\n\n async invokeStep(\n step: messages.PickleStep,\n stepDefinition: IDefinition,\n hookParameter?: any\n ): Promise<messages.TestStepResult> {\n return await StepRunner.run({\n defaultTimeout: this.supportCodeLibrary.defaultTimeout,\n filterStackTraces: this.filterStackTraces,\n hookParameter,\n step,\n stepDefinition,\n world: this.world,\n })\n }\n\n isSkippingSteps(): boolean {\n return (\n this.getWorstStepResult().status !== messages.TestStepResultStatus.PASSED\n )\n }\n\n shouldSkipHook(isBeforeHook: boolean): boolean {\n return this.skip || (this.isSkippingSteps() && isBeforeHook)\n }\n\n async aroundTestStep(\n testStepId: string,\n runStepFn: () => Promise<messages.TestStepResult>\n ): Promise<void> {\n const testStepStarted: messages.Envelope = {\n testStepStarted: {\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testStepStarted)\n this.currentTestStepId = testStepId\n const testStepResult = await runStepFn()\n this.currentTestStepId = null\n this.testStepResults.push(testStepResult)\n const testStepFinished: messages.Envelope = {\n testStepFinished: {\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId,\n testStepResult,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testStepFinished)\n }\n\n async run(): Promise<messages.TestStepResultStatus> {\n for (let attempt = 0; attempt < this.maxAttempts; attempt++) {\n const moreAttemptsRemaining = attempt + 1 < this.maxAttempts\n\n const willBeRetried = await this.runAttempt(\n attempt,\n moreAttemptsRemaining\n )\n\n if (!willBeRetried) {\n break\n }\n this.resetTestProgressData()\n }\n return this.getWorstStepResult().status\n }\n\n async runAttempt(\n attempt: number,\n moreAttemptsRemaining: boolean\n ): Promise<boolean> {\n this.currentTestCaseStartedId = this.newId()\n const testCaseStarted: messages.Envelope = {\n testCaseStarted: {\n attempt,\n testCaseId: this.testCase.id,\n id: this.currentTestCaseStartedId,\n timestamp: this.stopwatch.timestamp(),\n },\n }\n this.eventBroadcaster.emit('envelope', testCaseStarted)\n // used to determine whether a hook is a Before or After\n let didWeRunStepsYet = false\n for (const testStep of this.testCase.testSteps) {\n await this.aroundTestStep(testStep.id, async () => {\n if (doesHaveValue(testStep.hookId)) {\n const hookParameter: ITestCaseHookParameter = {\n gherkinDocument: this.gherkinDocument,\n pickle: this.pickle,\n testCaseStartedId: this.currentTestCaseStartedId,\n }\n if (didWeRunStepsYet) {\n hookParameter.result = this.getWorstStepResult()\n hookParameter.willBeRetried =\n this.getWorstStepResult().status ===\n messages.TestStepResultStatus.FAILED && moreAttemptsRemaining\n }\n return await this.runHook(\n findHookDefinition(testStep.hookId, this.supportCodeLibrary),\n hookParameter,\n !didWeRunStepsYet\n )\n } else {\n const pickleStep = this.pickle.steps.find(\n (pickleStep) => pickleStep.id === testStep.pickleStepId\n )\n const testStepResult = await this.runStep(pickleStep, testStep)\n didWeRunStepsYet = true\n return testStepResult\n }\n })\n }\n\n const willBeRetried =\n this.getWorstStepResult().status ===\n messages.TestStepResultStatus.FAILED && moreAttemptsRemaining\n const testCaseFinished: messages.Envelope = {\n testCaseFinished: {\n testCaseStartedId: this.currentTestCaseStartedId,\n timestamp: this.stopwatch.timestamp(),\n willBeRetried,\n },\n }\n this.eventBroadcaster.emit('envelope', testCaseFinished)\n\n return willBeRetried\n }\n\n async runHook(\n hookDefinition: TestCaseHookDefinition,\n hookParameter: ITestCaseHookParameter,\n isBeforeHook: boolean\n ): Promise<messages.TestStepResult> {\n if (this.shouldSkipHook(isBeforeHook)) {\n return {\n status: messages.TestStepResultStatus.SKIPPED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n return await this.invokeStep(null, hookDefinition, hookParameter)\n }\n\n async runStepHooks(\n stepHooks: TestStepHookDefinition[],\n pickleStep: messages.PickleStep,\n stepResult?: messages.TestStepResult\n ): Promise<messages.TestStepResult[]> {\n const stepHooksResult = []\n const hookParameter: ITestStepHookParameter = {\n gherkinDocument: this.gherkinDocument,\n pickle: this.pickle,\n pickleStep,\n testCaseStartedId: this.currentTestCaseStartedId,\n testStepId: this.currentTestStepId,\n result: stepResult,\n }\n for (const stepHookDefinition of stepHooks) {\n stepHooksResult.push(\n await this.invokeStep(null, stepHookDefinition, hookParameter)\n )\n }\n return stepHooksResult\n }\n\n async runStep(\n pickleStep: messages.PickleStep,\n testStep: messages.TestStep\n ): Promise<messages.TestStepResult> {\n const stepDefinitions = testStep.stepDefinitionIds.map(\n (stepDefinitionId) => {\n return findStepDefinition(stepDefinitionId, this.supportCodeLibrary)\n }\n )\n if (stepDefinitions.length === 0) {\n return {\n status: messages.TestStepResultStatus.UNDEFINED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n } else if (stepDefinitions.length > 1) {\n return {\n message: getAmbiguousStepException(stepDefinitions),\n status: messages.TestStepResultStatus.AMBIGUOUS,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n } else if (this.isSkippingSteps()) {\n return {\n status: messages.TestStepResultStatus.SKIPPED,\n duration: messages.TimeConversion.millisecondsToDuration(0),\n }\n }\n\n let stepResult\n let stepResults = await this.runStepHooks(\n this.getBeforeStepHookDefinitions(),\n pickleStep\n )\n if (\n getWorstTestStepResult(stepResults).status !==\n messages.TestStepResultStatus.FAILED\n ) {\n stepResult = await this.invokeStep(pickleStep, stepDefinitions[0])\n stepResults.push(stepResult)\n }\n const afterStepHookResults = await this.runStepHooks(\n this.getAfterStepHookDefinitions(),\n pickleStep,\n stepResult\n )\n stepResults = stepResults.concat(afterStepHookResults)\n\n const finalStepResult = getWorstTestStepResult(stepResults)\n let finalDuration = messages.TimeConversion.millisecondsToDuration(0)\n for (const result of stepResults) {\n finalDuration = messages.TimeConversion.addDurations(\n finalDuration,\n result.duration\n )\n }\n finalStepResult.duration = finalDuration\n return finalStepResult\n }\n}\n\nfunction findHookDefinition(\n id: string,\n supportCodeLibrary: ISupportCodeLibrary\n): TestCaseHookDefinition {\n return [\n ...supportCodeLibrary.beforeTestCaseHookDefinitions,\n ...supportCodeLibrary.afterTestCaseHookDefinitions,\n ].find((definition) => definition.id === id)\n}\n\nfunction findStepDefinition(\n id: string,\n supportCodeLibrary: ISupportCodeLibrary\n): StepDefinition {\n return supportCodeLibrary.stepDefinitions.find(\n (definition) => definition.id === id\n )\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { isFileNameInCucumber } from '../
|
|
1
|
+
import { isFileNameInCucumber } from '../filter_stack_trace';
|
|
2
2
|
import { ILineAndUri } from '../types';
|
|
3
3
|
export declare function getDefinitionLineAndUri(cwd: string, isExcluded?: typeof isFileNameInCucumber): ILineAndUri;
|
|
@@ -5,15 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getDefinitionLineAndUri = void 0;
|
|
7
7
|
const path_1 = __importDefault(require("path"));
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const stack_trace_filter_1 = require("../stack_trace_filter");
|
|
8
|
+
const error_stack_parser_1 = __importDefault(require("error-stack-parser"));
|
|
9
|
+
const filter_stack_trace_1 = require("../filter_stack_trace");
|
|
11
10
|
const value_checker_1 = require("../value_checker");
|
|
12
|
-
function getDefinitionLineAndUri(cwd, isExcluded =
|
|
11
|
+
function getDefinitionLineAndUri(cwd, isExcluded = filter_stack_trace_1.isFileNameInCucumber) {
|
|
13
12
|
let line;
|
|
14
13
|
let uri;
|
|
15
|
-
const stackframes =
|
|
16
|
-
const stackframe = stackframes.find((frame) => frame.
|
|
14
|
+
const stackframes = error_stack_parser_1.default.parse(new Error());
|
|
15
|
+
const stackframe = stackframes.find((frame) => frame.fileName !== __filename && !isExcluded(frame.fileName));
|
|
17
16
|
if (stackframe != null) {
|
|
18
17
|
line = stackframe.getLineNumber();
|
|
19
18
|
uri = stackframe.getFileName();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get_definition_line_and_uri.js","sourceRoot":"","sources":["../../src/support_code_library_builder/get_definition_line_and_uri.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,
|
|
1
|
+
{"version":3,"file":"get_definition_line_and_uri.js","sourceRoot":"","sources":["../../src/support_code_library_builder/get_definition_line_and_uri.ts"],"names":[],"mappings":";;;;;;AAAA,gDAAuB;AACvB,4EAAiE;AACjE,8DAA4D;AAC5D,oDAAgE;AAGhE,SAAgB,uBAAuB,CACrC,GAAW,EACX,UAAU,GAAG,yCAAoB;IAEjC,IAAI,IAAY,CAAA;IAChB,IAAI,GAAW,CAAA;IACf,MAAM,WAAW,GAAiB,4BAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;IACrE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CACjC,CAAC,KAAiB,EAAE,EAAE,CACpB,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC/D,CAAA;IACD,IAAI,UAAU,IAAI,IAAI,EAAE;QACtB,IAAI,GAAG,UAAU,CAAC,aAAa,EAAE,CAAA;QACjC,GAAG,GAAG,UAAU,CAAC,WAAW,EAAE,CAAA;QAC9B,IAAI,IAAA,6BAAa,EAAC,GAAG,CAAC,EAAE;YACtB,GAAG,GAAG,cAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;SAC9B;KACF;IAED,OAAO;QACL,IAAI,EAAE,IAAA,8BAAc,EAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,GAAG,EAAE,IAAA,8BAAc,EAAC,GAAG,EAAE,SAAS,CAAC;KACpC,CAAA;AACH,CAAC;AAvBD,0DAuBC","sourcesContent":["import path from 'path'\nimport errorStackParser, { StackFrame } from 'error-stack-parser'\nimport { isFileNameInCucumber } from '../filter_stack_trace'\nimport { doesHaveValue, valueOrDefault } from '../value_checker'\nimport { ILineAndUri } from '../types'\n\nexport function getDefinitionLineAndUri(\n cwd: string,\n isExcluded = isFileNameInCucumber\n): ILineAndUri {\n let line: number\n let uri: string\n const stackframes: StackFrame[] = errorStackParser.parse(new Error())\n const stackframe = stackframes.find(\n (frame: StackFrame) =>\n frame.fileName !== __filename && !isExcluded(frame.fileName)\n )\n if (stackframe != null) {\n line = stackframe.getLineNumber()\n uri = stackframe.getFileName()\n if (doesHaveValue(uri)) {\n uri = path.relative(cwd, uri)\n }\n }\n\n return {\n line: valueOrDefault(line, 0),\n uri: valueOrDefault(uri, 'unknown'),\n }\n}\n"]}
|
|
@@ -12,7 +12,6 @@ const test_run_hook_definition_1 = __importDefault(require("../models/test_run_h
|
|
|
12
12
|
const step_definition_1 = __importDefault(require("../models/step_definition"));
|
|
13
13
|
const helpers_1 = require("../formatter/helpers");
|
|
14
14
|
const validate_arguments_1 = __importDefault(require("./validate_arguments"));
|
|
15
|
-
const util_1 = require("util");
|
|
16
15
|
const util_arity_1 = __importDefault(require("util-arity"));
|
|
17
16
|
const cucumber_expressions_1 = require("@cucumber/cucumber-expressions");
|
|
18
17
|
const value_checker_1 = require("../value_checker");
|
|
@@ -40,7 +39,7 @@ class SupportCodeLibraryBuilder {
|
|
|
40
39
|
BeforeAll: this.defineTestRunHook(() => this.beforeTestRunHookDefinitionConfigs),
|
|
41
40
|
BeforeStep: this.defineTestStepHook(() => this.beforeTestStepHookDefinitionConfigs),
|
|
42
41
|
defineParameterType: this.defineParameterType.bind(this),
|
|
43
|
-
defineStep:
|
|
42
|
+
defineStep: this.defineStep('Unknown', () => this.stepDefinitionConfigs),
|
|
44
43
|
Given: this.defineStep('Given', () => this.stepDefinitionConfigs),
|
|
45
44
|
setDefaultTimeout: (milliseconds) => {
|
|
46
45
|
this.defaultTimeout = milliseconds;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/support_code_library_builder/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { buildParameterType } from './build_parameter_type'\nimport { getDefinitionLineAndUri } from './get_definition_line_and_uri'\nimport { IdGenerator } from '@cucumber/messages'\nimport * as messages from '@cucumber/messages'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestStepHookDefinition from '../models/test_step_hook_definition'\nimport TestRunHookDefinition from '../models/test_run_hook_definition'\nimport StepDefinition from '../models/step_definition'\nimport { formatLocation } from '../formatter/helpers'\nimport validateArguments from './validate_arguments'\nimport { deprecate } from 'util'\nimport arity from 'util-arity'\n\nimport {\n CucumberExpression,\n ParameterTypeRegistry,\n RegularExpression,\n} from '@cucumber/cucumber-expressions'\nimport { doesHaveValue, doesNotHaveValue } from '../value_checker'\nimport {\n DefineStepPattern,\n IDefineStepOptions,\n IDefineSupportCodeMethods,\n IDefineTestCaseHookOptions,\n IDefineTestStepHookOptions,\n IDefineTestRunHookOptions,\n IParameterTypeDefinition,\n ISupportCodeLibrary,\n TestCaseHookFunction,\n TestStepHookFunction,\n ParallelAssignmentValidator,\n ISupportCodeCoordinates,\n IDefineStep,\n} from './types'\nimport World from './world'\nimport { ICanonicalSupportCodeIds } from '../runtime/parallel/command_types'\nimport { GherkinStepKeyword } from '../models/gherkin_step_keyword'\n\ninterface IStepDefinitionConfig {\n code: any\n line: number\n options: any\n keyword: GherkinStepKeyword\n pattern: string | RegExp\n uri: string\n}\n\ninterface ITestCaseHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\ninterface ITestStepHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\ninterface ITestRunHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\nexport const builtinParameterTypes = [\n 'bigdecimal',\n 'biginteger',\n 'byte',\n 'double',\n 'float',\n 'int',\n 'long',\n 'short',\n 'string',\n 'word',\n '',\n]\n\nexport class SupportCodeLibraryBuilder {\n public readonly methods: IDefineSupportCodeMethods\n\n private originalCoordinates: ISupportCodeCoordinates\n private afterTestCaseHookDefinitionConfigs: ITestCaseHookDefinitionConfig[]\n private afterTestRunHookDefinitionConfigs: ITestRunHookDefinitionConfig[]\n private afterTestStepHookDefinitionConfigs: ITestStepHookDefinitionConfig[]\n private beforeTestCaseHookDefinitionConfigs: ITestCaseHookDefinitionConfig[]\n private beforeTestRunHookDefinitionConfigs: ITestRunHookDefinitionConfig[]\n private beforeTestStepHookDefinitionConfigs: ITestStepHookDefinitionConfig[]\n private cwd: string\n private defaultTimeout: number\n private definitionFunctionWrapper: any\n private newId: IdGenerator.NewId\n private parameterTypeRegistry: ParameterTypeRegistry\n private stepDefinitionConfigs: IStepDefinitionConfig[]\n private World: any\n private parallelCanAssign: ParallelAssignmentValidator\n\n constructor() {\n const methods: IDefineSupportCodeMethods = {\n After: this.defineTestCaseHook(\n () => this.afterTestCaseHookDefinitionConfigs\n ),\n AfterAll: this.defineTestRunHook(\n () => this.afterTestRunHookDefinitionConfigs\n ),\n AfterStep: this.defineTestStepHook(\n () => this.afterTestStepHookDefinitionConfigs\n ),\n Before: this.defineTestCaseHook(\n () => this.beforeTestCaseHookDefinitionConfigs\n ),\n BeforeAll: this.defineTestRunHook(\n () => this.beforeTestRunHookDefinitionConfigs\n ),\n BeforeStep: this.defineTestStepHook(\n () => this.beforeTestStepHookDefinitionConfigs\n ),\n defineParameterType: this.defineParameterType.bind(this),\n defineStep: deprecate(\n this.defineStep('Unknown', () => this.stepDefinitionConfigs),\n '`defineStep` is deprecated, use `Given`, `When` or `Then` instead; see https://github.com/cucumber/cucumber-js/issues/2043'\n ),\n Given: this.defineStep('Given', () => this.stepDefinitionConfigs),\n setDefaultTimeout: (milliseconds) => {\n this.defaultTimeout = milliseconds\n },\n setDefinitionFunctionWrapper: (fn) => {\n this.definitionFunctionWrapper = fn\n },\n setWorldConstructor: (fn) => {\n this.World = fn\n },\n setParallelCanAssign: (fn: ParallelAssignmentValidator): void => {\n this.parallelCanAssign = fn\n },\n Then: this.defineStep('Then', () => this.stepDefinitionConfigs),\n When: this.defineStep('When', () => this.stepDefinitionConfigs),\n }\n const checkInstall = (method: string) => {\n if (doesNotHaveValue(this.cwd)) {\n throw new Error(\n `\n You're calling functions (e.g. \"${method}\") on an instance of Cucumber that isn't running.\n This means you have an invalid installation, mostly likely due to:\n - Cucumber being installed globally\n - A project structure where your support code is depending on a different instance of Cucumber\n Either way, you'll need to address this in order for Cucumber to work.\n See https://github.com/cucumber/cucumber-js/blob/main/docs/installation.md#invalid-installations\n `\n )\n }\n }\n this.methods = new Proxy(methods, {\n get(\n target: IDefineSupportCodeMethods,\n method: keyof IDefineSupportCodeMethods\n ): any {\n return (...args: any[]) => {\n checkInstall(method)\n // @ts-expect-error difficult to type this correctly\n return target[method](...args)\n }\n },\n })\n }\n\n defineParameterType(options: IParameterTypeDefinition<any>): void {\n const parameterType = buildParameterType(options)\n this.parameterTypeRegistry.defineParameterType(parameterType)\n }\n\n defineStep(\n keyword: GherkinStepKeyword,\n getCollection: () => IStepDefinitionConfig[]\n ): IDefineStep {\n return (\n pattern: DefineStepPattern,\n options: IDefineStepOptions | Function,\n code?: Function\n ) => {\n if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, pattern, options },\n fnName: 'defineStep',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n keyword,\n pattern,\n uri,\n })\n }\n }\n\n defineTestCaseHook(\n getCollection: () => ITestCaseHookDefinitionConfig[]\n ): <WorldType>(\n options:\n | string\n | IDefineTestCaseHookOptions\n | TestCaseHookFunction<WorldType>,\n code?: TestCaseHookFunction<WorldType>\n ) => void {\n return <WorldType>(\n options:\n | string\n | IDefineTestCaseHookOptions\n | TestCaseHookFunction<WorldType>,\n code?: TestCaseHookFunction<WorldType>\n ) => {\n if (typeof options === 'string') {\n options = { tags: options }\n } else if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestCaseHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n defineTestStepHook(\n getCollection: () => ITestStepHookDefinitionConfig[]\n ): <WorldType>(\n options:\n | string\n | IDefineTestStepHookOptions\n | TestStepHookFunction<WorldType>,\n code?: TestStepHookFunction<WorldType>\n ) => void {\n return <WorldType>(\n options:\n | string\n | IDefineTestStepHookOptions\n | TestStepHookFunction<WorldType>,\n code?: TestStepHookFunction<WorldType>\n ) => {\n if (typeof options === 'string') {\n options = { tags: options }\n } else if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestStepHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n defineTestRunHook(\n getCollection: () => ITestRunHookDefinitionConfig[]\n ): (options: IDefineTestRunHookOptions | Function, code?: Function) => void {\n return (options: IDefineTestRunHookOptions | Function, code?: Function) => {\n if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestRunHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n wrapCode({\n code,\n wrapperOptions,\n }: {\n code: Function\n wrapperOptions: any\n }): Function {\n if (doesHaveValue(this.definitionFunctionWrapper)) {\n const codeLength = code.length\n const wrappedCode = this.definitionFunctionWrapper(code, wrapperOptions)\n if (wrappedCode !== code) {\n return arity(codeLength, wrappedCode)\n }\n return wrappedCode\n }\n return code\n }\n\n buildTestCaseHookDefinitions(\n configs: ITestCaseHookDefinitionConfig[],\n canonicalIds?: string[]\n ): TestCaseHookDefinition[] {\n return configs.map(({ code, line, options, uri }, index) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestCaseHookDefinition({\n code: wrappedCode,\n id: canonicalIds ? canonicalIds[index] : this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildTestStepHookDefinitions(\n configs: ITestStepHookDefinitionConfig[]\n ): TestStepHookDefinition[] {\n return configs.map(({ code, line, options, uri }) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestStepHookDefinition({\n code: wrappedCode,\n id: this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildTestRunHookDefinitions(\n configs: ITestRunHookDefinitionConfig[]\n ): TestRunHookDefinition[] {\n return configs.map(({ code, line, options, uri }) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestRunHookDefinition({\n code: wrappedCode,\n id: this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildStepDefinitions(canonicalIds?: string[]): {\n stepDefinitions: StepDefinition[]\n undefinedParameterTypes: messages.UndefinedParameterType[]\n } {\n const stepDefinitions: StepDefinition[] = []\n const undefinedParameterTypes: messages.UndefinedParameterType[] = []\n this.stepDefinitionConfigs.forEach(\n ({ code, line, options, keyword, pattern, uri }, index) => {\n let expression\n if (typeof pattern === 'string') {\n try {\n expression = new CucumberExpression(\n pattern,\n this.parameterTypeRegistry\n )\n } catch (e) {\n if (doesHaveValue(e.undefinedParameterTypeName)) {\n undefinedParameterTypes.push({\n name: e.undefinedParameterTypeName,\n expression: pattern,\n })\n return\n }\n throw e\n }\n } else {\n expression = new RegularExpression(\n pattern,\n this.parameterTypeRegistry\n )\n }\n\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n stepDefinitions.push(\n new StepDefinition({\n code: wrappedCode,\n expression,\n id: canonicalIds ? canonicalIds[index] : this.newId(),\n line,\n options,\n keyword,\n pattern,\n unwrappedCode: code,\n uri,\n })\n )\n }\n )\n return { stepDefinitions, undefinedParameterTypes }\n }\n\n finalize(canonicalIds?: ICanonicalSupportCodeIds): ISupportCodeLibrary {\n const stepDefinitionsResult = this.buildStepDefinitions(\n canonicalIds?.stepDefinitionIds\n )\n return {\n originalCoordinates: this.originalCoordinates,\n afterTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(\n this.afterTestCaseHookDefinitionConfigs,\n canonicalIds?.afterTestCaseHookDefinitionIds\n ),\n afterTestRunHookDefinitions: this.buildTestRunHookDefinitions(\n this.afterTestRunHookDefinitionConfigs\n ),\n afterTestStepHookDefinitions: this.buildTestStepHookDefinitions(\n this.afterTestStepHookDefinitionConfigs\n ),\n beforeTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(\n this.beforeTestCaseHookDefinitionConfigs,\n canonicalIds?.beforeTestCaseHookDefinitionIds\n ),\n beforeTestRunHookDefinitions: this.buildTestRunHookDefinitions(\n this.beforeTestRunHookDefinitionConfigs\n ),\n beforeTestStepHookDefinitions: this.buildTestStepHookDefinitions(\n this.beforeTestStepHookDefinitionConfigs\n ),\n defaultTimeout: this.defaultTimeout,\n parameterTypeRegistry: this.parameterTypeRegistry,\n undefinedParameterTypes: stepDefinitionsResult.undefinedParameterTypes,\n stepDefinitions: stepDefinitionsResult.stepDefinitions,\n World: this.World,\n parallelCanAssign: this.parallelCanAssign,\n }\n }\n\n reset(\n cwd: string,\n newId: IdGenerator.NewId,\n originalCoordinates: ISupportCodeCoordinates = {\n requireModules: [],\n requirePaths: [],\n importPaths: [],\n }\n ): void {\n this.cwd = cwd\n this.newId = newId\n this.originalCoordinates = originalCoordinates\n this.afterTestCaseHookDefinitionConfigs = []\n this.afterTestRunHookDefinitionConfigs = []\n this.afterTestStepHookDefinitionConfigs = []\n this.beforeTestCaseHookDefinitionConfigs = []\n this.beforeTestRunHookDefinitionConfigs = []\n this.beforeTestStepHookDefinitionConfigs = []\n this.definitionFunctionWrapper = null\n this.defaultTimeout = 5000\n this.parameterTypeRegistry = new ParameterTypeRegistry()\n this.stepDefinitionConfigs = []\n this.parallelCanAssign = () => true\n this.World = World\n }\n}\n\nexport default new SupportCodeLibraryBuilder()\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/support_code_library_builder/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { buildParameterType } from './build_parameter_type'\nimport { getDefinitionLineAndUri } from './get_definition_line_and_uri'\nimport { IdGenerator } from '@cucumber/messages'\nimport * as messages from '@cucumber/messages'\nimport TestCaseHookDefinition from '../models/test_case_hook_definition'\nimport TestStepHookDefinition from '../models/test_step_hook_definition'\nimport TestRunHookDefinition from '../models/test_run_hook_definition'\nimport StepDefinition from '../models/step_definition'\nimport { formatLocation } from '../formatter/helpers'\nimport validateArguments from './validate_arguments'\nimport arity from 'util-arity'\n\nimport {\n CucumberExpression,\n ParameterTypeRegistry,\n RegularExpression,\n} from '@cucumber/cucumber-expressions'\nimport { doesHaveValue, doesNotHaveValue } from '../value_checker'\nimport {\n DefineStepPattern,\n IDefineStepOptions,\n IDefineSupportCodeMethods,\n IDefineTestCaseHookOptions,\n IDefineTestStepHookOptions,\n IDefineTestRunHookOptions,\n IParameterTypeDefinition,\n ISupportCodeLibrary,\n TestCaseHookFunction,\n TestStepHookFunction,\n ParallelAssignmentValidator,\n ISupportCodeCoordinates,\n IDefineStep,\n} from './types'\nimport World from './world'\nimport { ICanonicalSupportCodeIds } from '../runtime/parallel/command_types'\nimport { GherkinStepKeyword } from '../models/gherkin_step_keyword'\n\ninterface IStepDefinitionConfig {\n code: any\n line: number\n options: any\n keyword: GherkinStepKeyword\n pattern: string | RegExp\n uri: string\n}\n\ninterface ITestCaseHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\ninterface ITestStepHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\ninterface ITestRunHookDefinitionConfig {\n code: any\n line: number\n options: any\n uri: string\n}\n\nexport const builtinParameterTypes = [\n 'bigdecimal',\n 'biginteger',\n 'byte',\n 'double',\n 'float',\n 'int',\n 'long',\n 'short',\n 'string',\n 'word',\n '',\n]\n\nexport class SupportCodeLibraryBuilder {\n public readonly methods: IDefineSupportCodeMethods\n\n private originalCoordinates: ISupportCodeCoordinates\n private afterTestCaseHookDefinitionConfigs: ITestCaseHookDefinitionConfig[]\n private afterTestRunHookDefinitionConfigs: ITestRunHookDefinitionConfig[]\n private afterTestStepHookDefinitionConfigs: ITestStepHookDefinitionConfig[]\n private beforeTestCaseHookDefinitionConfigs: ITestCaseHookDefinitionConfig[]\n private beforeTestRunHookDefinitionConfigs: ITestRunHookDefinitionConfig[]\n private beforeTestStepHookDefinitionConfigs: ITestStepHookDefinitionConfig[]\n private cwd: string\n private defaultTimeout: number\n private definitionFunctionWrapper: any\n private newId: IdGenerator.NewId\n private parameterTypeRegistry: ParameterTypeRegistry\n private stepDefinitionConfigs: IStepDefinitionConfig[]\n private World: any\n private parallelCanAssign: ParallelAssignmentValidator\n\n constructor() {\n const methods: IDefineSupportCodeMethods = {\n After: this.defineTestCaseHook(\n () => this.afterTestCaseHookDefinitionConfigs\n ),\n AfterAll: this.defineTestRunHook(\n () => this.afterTestRunHookDefinitionConfigs\n ),\n AfterStep: this.defineTestStepHook(\n () => this.afterTestStepHookDefinitionConfigs\n ),\n Before: this.defineTestCaseHook(\n () => this.beforeTestCaseHookDefinitionConfigs\n ),\n BeforeAll: this.defineTestRunHook(\n () => this.beforeTestRunHookDefinitionConfigs\n ),\n BeforeStep: this.defineTestStepHook(\n () => this.beforeTestStepHookDefinitionConfigs\n ),\n defineParameterType: this.defineParameterType.bind(this),\n defineStep: this.defineStep('Unknown', () => this.stepDefinitionConfigs),\n Given: this.defineStep('Given', () => this.stepDefinitionConfigs),\n setDefaultTimeout: (milliseconds) => {\n this.defaultTimeout = milliseconds\n },\n setDefinitionFunctionWrapper: (fn) => {\n this.definitionFunctionWrapper = fn\n },\n setWorldConstructor: (fn) => {\n this.World = fn\n },\n setParallelCanAssign: (fn: ParallelAssignmentValidator): void => {\n this.parallelCanAssign = fn\n },\n Then: this.defineStep('Then', () => this.stepDefinitionConfigs),\n When: this.defineStep('When', () => this.stepDefinitionConfigs),\n }\n const checkInstall = (method: string) => {\n if (doesNotHaveValue(this.cwd)) {\n throw new Error(\n `\n You're calling functions (e.g. \"${method}\") on an instance of Cucumber that isn't running.\n This means you have an invalid installation, mostly likely due to:\n - Cucumber being installed globally\n - A project structure where your support code is depending on a different instance of Cucumber\n Either way, you'll need to address this in order for Cucumber to work.\n See https://github.com/cucumber/cucumber-js/blob/main/docs/installation.md#invalid-installations\n `\n )\n }\n }\n this.methods = new Proxy(methods, {\n get(\n target: IDefineSupportCodeMethods,\n method: keyof IDefineSupportCodeMethods\n ): any {\n return (...args: any[]) => {\n checkInstall(method)\n // @ts-expect-error difficult to type this correctly\n return target[method](...args)\n }\n },\n })\n }\n\n defineParameterType(options: IParameterTypeDefinition<any>): void {\n const parameterType = buildParameterType(options)\n this.parameterTypeRegistry.defineParameterType(parameterType)\n }\n\n defineStep(\n keyword: GherkinStepKeyword,\n getCollection: () => IStepDefinitionConfig[]\n ): IDefineStep {\n return (\n pattern: DefineStepPattern,\n options: IDefineStepOptions | Function,\n code?: Function\n ) => {\n if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, pattern, options },\n fnName: 'defineStep',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n keyword,\n pattern,\n uri,\n })\n }\n }\n\n defineTestCaseHook(\n getCollection: () => ITestCaseHookDefinitionConfig[]\n ): <WorldType>(\n options:\n | string\n | IDefineTestCaseHookOptions\n | TestCaseHookFunction<WorldType>,\n code?: TestCaseHookFunction<WorldType>\n ) => void {\n return <WorldType>(\n options:\n | string\n | IDefineTestCaseHookOptions\n | TestCaseHookFunction<WorldType>,\n code?: TestCaseHookFunction<WorldType>\n ) => {\n if (typeof options === 'string') {\n options = { tags: options }\n } else if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestCaseHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n defineTestStepHook(\n getCollection: () => ITestStepHookDefinitionConfig[]\n ): <WorldType>(\n options:\n | string\n | IDefineTestStepHookOptions\n | TestStepHookFunction<WorldType>,\n code?: TestStepHookFunction<WorldType>\n ) => void {\n return <WorldType>(\n options:\n | string\n | IDefineTestStepHookOptions\n | TestStepHookFunction<WorldType>,\n code?: TestStepHookFunction<WorldType>\n ) => {\n if (typeof options === 'string') {\n options = { tags: options }\n } else if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestStepHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n defineTestRunHook(\n getCollection: () => ITestRunHookDefinitionConfig[]\n ): (options: IDefineTestRunHookOptions | Function, code?: Function) => void {\n return (options: IDefineTestRunHookOptions | Function, code?: Function) => {\n if (typeof options === 'function') {\n code = options\n options = {}\n }\n const { line, uri } = getDefinitionLineAndUri(this.cwd)\n validateArguments({\n args: { code, options },\n fnName: 'defineTestRunHook',\n location: formatLocation({ line, uri }),\n })\n getCollection().push({\n code,\n line,\n options,\n uri,\n })\n }\n }\n\n wrapCode({\n code,\n wrapperOptions,\n }: {\n code: Function\n wrapperOptions: any\n }): Function {\n if (doesHaveValue(this.definitionFunctionWrapper)) {\n const codeLength = code.length\n const wrappedCode = this.definitionFunctionWrapper(code, wrapperOptions)\n if (wrappedCode !== code) {\n return arity(codeLength, wrappedCode)\n }\n return wrappedCode\n }\n return code\n }\n\n buildTestCaseHookDefinitions(\n configs: ITestCaseHookDefinitionConfig[],\n canonicalIds?: string[]\n ): TestCaseHookDefinition[] {\n return configs.map(({ code, line, options, uri }, index) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestCaseHookDefinition({\n code: wrappedCode,\n id: canonicalIds ? canonicalIds[index] : this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildTestStepHookDefinitions(\n configs: ITestStepHookDefinitionConfig[]\n ): TestStepHookDefinition[] {\n return configs.map(({ code, line, options, uri }) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestStepHookDefinition({\n code: wrappedCode,\n id: this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildTestRunHookDefinitions(\n configs: ITestRunHookDefinitionConfig[]\n ): TestRunHookDefinition[] {\n return configs.map(({ code, line, options, uri }) => {\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n return new TestRunHookDefinition({\n code: wrappedCode,\n id: this.newId(),\n line,\n options,\n unwrappedCode: code,\n uri,\n })\n })\n }\n\n buildStepDefinitions(canonicalIds?: string[]): {\n stepDefinitions: StepDefinition[]\n undefinedParameterTypes: messages.UndefinedParameterType[]\n } {\n const stepDefinitions: StepDefinition[] = []\n const undefinedParameterTypes: messages.UndefinedParameterType[] = []\n this.stepDefinitionConfigs.forEach(\n ({ code, line, options, keyword, pattern, uri }, index) => {\n let expression\n if (typeof pattern === 'string') {\n try {\n expression = new CucumberExpression(\n pattern,\n this.parameterTypeRegistry\n )\n } catch (e) {\n if (doesHaveValue(e.undefinedParameterTypeName)) {\n undefinedParameterTypes.push({\n name: e.undefinedParameterTypeName,\n expression: pattern,\n })\n return\n }\n throw e\n }\n } else {\n expression = new RegularExpression(\n pattern,\n this.parameterTypeRegistry\n )\n }\n\n const wrappedCode = this.wrapCode({\n code,\n wrapperOptions: options.wrapperOptions,\n })\n stepDefinitions.push(\n new StepDefinition({\n code: wrappedCode,\n expression,\n id: canonicalIds ? canonicalIds[index] : this.newId(),\n line,\n options,\n keyword,\n pattern,\n unwrappedCode: code,\n uri,\n })\n )\n }\n )\n return { stepDefinitions, undefinedParameterTypes }\n }\n\n finalize(canonicalIds?: ICanonicalSupportCodeIds): ISupportCodeLibrary {\n const stepDefinitionsResult = this.buildStepDefinitions(\n canonicalIds?.stepDefinitionIds\n )\n return {\n originalCoordinates: this.originalCoordinates,\n afterTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(\n this.afterTestCaseHookDefinitionConfigs,\n canonicalIds?.afterTestCaseHookDefinitionIds\n ),\n afterTestRunHookDefinitions: this.buildTestRunHookDefinitions(\n this.afterTestRunHookDefinitionConfigs\n ),\n afterTestStepHookDefinitions: this.buildTestStepHookDefinitions(\n this.afterTestStepHookDefinitionConfigs\n ),\n beforeTestCaseHookDefinitions: this.buildTestCaseHookDefinitions(\n this.beforeTestCaseHookDefinitionConfigs,\n canonicalIds?.beforeTestCaseHookDefinitionIds\n ),\n beforeTestRunHookDefinitions: this.buildTestRunHookDefinitions(\n this.beforeTestRunHookDefinitionConfigs\n ),\n beforeTestStepHookDefinitions: this.buildTestStepHookDefinitions(\n this.beforeTestStepHookDefinitionConfigs\n ),\n defaultTimeout: this.defaultTimeout,\n parameterTypeRegistry: this.parameterTypeRegistry,\n undefinedParameterTypes: stepDefinitionsResult.undefinedParameterTypes,\n stepDefinitions: stepDefinitionsResult.stepDefinitions,\n World: this.World,\n parallelCanAssign: this.parallelCanAssign,\n }\n }\n\n reset(\n cwd: string,\n newId: IdGenerator.NewId,\n originalCoordinates: ISupportCodeCoordinates = {\n requireModules: [],\n requirePaths: [],\n importPaths: [],\n }\n ): void {\n this.cwd = cwd\n this.newId = newId\n this.originalCoordinates = originalCoordinates\n this.afterTestCaseHookDefinitionConfigs = []\n this.afterTestRunHookDefinitionConfigs = []\n this.afterTestStepHookDefinitionConfigs = []\n this.beforeTestCaseHookDefinitionConfigs = []\n this.beforeTestRunHookDefinitionConfigs = []\n this.beforeTestStepHookDefinitionConfigs = []\n this.definitionFunctionWrapper = null\n this.defaultTimeout = 5000\n this.parameterTypeRegistry = new ParameterTypeRegistry()\n this.stepDefinitionConfigs = []\n this.parallelCanAssign = () => true\n this.World = World\n }\n}\n\nexport default new SupportCodeLibraryBuilder()\n"]}
|
package/lib/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "8.
|
|
1
|
+
export declare const version = "8.8.0";
|
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 = '8.
|
|
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 = '8.8.0'\n"]}
|
package/lib/wrapper.mjs
CHANGED
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import cucumber from './index.js'
|
|
2
2
|
|
|
3
|
-
export const Cli = cucumber.Cli
|
|
4
|
-
export const parseGherkinMessageStream = cucumber.parseGherkinMessageStream
|
|
5
|
-
export const PickleFilter = cucumber.PickleFilter
|
|
6
|
-
export const Runtime = cucumber.Runtime
|
|
7
3
|
export const supportCodeLibraryBuilder = cucumber.supportCodeLibraryBuilder
|
|
8
4
|
export const Status = cucumber.Status
|
|
9
5
|
export const DataTable = cucumber.DataTable
|
|
@@ -28,10 +24,6 @@ export const Before = cucumber.Before
|
|
|
28
24
|
export const BeforeAll = cucumber.BeforeAll
|
|
29
25
|
export const BeforeStep = cucumber.BeforeStep
|
|
30
26
|
export const defineParameterType = cucumber.defineParameterType
|
|
31
|
-
/**
|
|
32
|
-
* @deprecated use `Given`, `When` or `Then` instead; see <https://github.com/cucumber/cucumber-js/issues/2043>
|
|
33
|
-
*/
|
|
34
|
-
export const defineStep = cucumber.defineStep
|
|
35
27
|
export const Given = cucumber.Given
|
|
36
28
|
export const setDefaultTimeout = cucumber.setDefaultTimeout
|
|
37
29
|
export const setDefinitionFunctionWrapper = cucumber.setDefinitionFunctionWrapper
|
|
@@ -43,3 +35,9 @@ export const parallelCanAssignHelpers = cucumber.parallelCanAssignHelpers
|
|
|
43
35
|
|
|
44
36
|
export const wrapPromiseWithTimeout = cucumber.wrapPromiseWithTimeout
|
|
45
37
|
|
|
38
|
+
// Deprecated
|
|
39
|
+
export const Cli = cucumber.Cli
|
|
40
|
+
export const defineStep = cucumber.defineStep
|
|
41
|
+
export const parseGherkinMessageStream = cucumber.parseGherkinMessageStream
|
|
42
|
+
export const PickleFilter = cucumber.PickleFilter
|
|
43
|
+
export const Runtime = cucumber.Runtime
|
package/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"gherkin",
|
|
9
9
|
"tests"
|
|
10
10
|
],
|
|
11
|
-
"version": "8.
|
|
11
|
+
"version": "8.8.0",
|
|
12
12
|
"homepage": "https://github.com/cucumber/cucumber-js",
|
|
13
13
|
"author": "Julien Biezemans <jb@jbpros.com>",
|
|
14
14
|
"contributors": [
|
|
@@ -88,6 +88,7 @@
|
|
|
88
88
|
"Kevin Goslar <kevin.goslar@gmail.com>",
|
|
89
89
|
"Kevin Kirsche <Kev.Kirsche+GitHub@gmail.com>",
|
|
90
90
|
"Kim, Jang-hwan <janghwan@gmail.com>",
|
|
91
|
+
"Konstantin Epishev <konstantin@epishev.me>",
|
|
91
92
|
"kostya.misura <kostya.misura@gmail.com>",
|
|
92
93
|
"Krispin Schulz <krispin.schulz@blackbridge.com>",
|
|
93
94
|
"Kushal Pisavadia",
|
|
@@ -195,24 +196,24 @@
|
|
|
195
196
|
"node": "12 || 14 || 16 || 17 || 18"
|
|
196
197
|
},
|
|
197
198
|
"dependencies": {
|
|
198
|
-
"@cspotcode/source-map-support": "^0.8.0",
|
|
199
199
|
"@cucumber/ci-environment": "9.1.0",
|
|
200
200
|
"@cucumber/cucumber-expressions": "16.0.0",
|
|
201
|
-
"@cucumber/gherkin": "24.
|
|
201
|
+
"@cucumber/gherkin": "24.1.0",
|
|
202
202
|
"@cucumber/gherkin-streams": "5.0.1",
|
|
203
|
-
"@cucumber/gherkin-utils": "8.0.
|
|
204
|
-
"@cucumber/html-formatter": "20.
|
|
203
|
+
"@cucumber/gherkin-utils": "8.0.1",
|
|
204
|
+
"@cucumber/html-formatter": "20.1.0",
|
|
205
205
|
"@cucumber/message-streams": "4.0.1",
|
|
206
|
-
"@cucumber/messages": "
|
|
206
|
+
"@cucumber/messages": "20.0.0",
|
|
207
207
|
"@cucumber/tag-expressions": "4.1.0",
|
|
208
208
|
"assertion-error-formatter": "^3.0.0",
|
|
209
209
|
"capital-case": "^1.0.4",
|
|
210
210
|
"chalk": "^4.1.2",
|
|
211
|
-
"cli-table3": "0.6.
|
|
211
|
+
"cli-table3": "0.6.3",
|
|
212
212
|
"commander": "^9.0.0",
|
|
213
213
|
"debug": "^4.3.4",
|
|
214
214
|
"duration": "^0.2.2",
|
|
215
215
|
"durations": "^3.4.2",
|
|
216
|
+
"error-stack-parser": "^2.1.4",
|
|
216
217
|
"figures": "^3.2.0",
|
|
217
218
|
"glob": "^7.1.6",
|
|
218
219
|
"has-ansi": "^4.0.1",
|
|
@@ -225,8 +226,7 @@
|
|
|
225
226
|
"mz": "^2.7.0",
|
|
226
227
|
"progress": "^2.0.3",
|
|
227
228
|
"resolve-pkg": "^2.0.0",
|
|
228
|
-
"semver": "7.3.
|
|
229
|
-
"stack-chain": "^2.0.0",
|
|
229
|
+
"semver": "7.3.8",
|
|
230
230
|
"string-argv": "^0.3.1",
|
|
231
231
|
"strip-ansi": "6.0.1",
|
|
232
232
|
"supports-color": "^8.1.1",
|
|
@@ -238,58 +238,58 @@
|
|
|
238
238
|
"devDependencies": {
|
|
239
239
|
"@cucumber/compatibility-kit": "11.0.1",
|
|
240
240
|
"@cucumber/query": "12.0.0",
|
|
241
|
-
"@microsoft/api-documenter": "7.19.
|
|
242
|
-
"@microsoft/api-extractor": "7.
|
|
241
|
+
"@microsoft/api-documenter": "7.19.23",
|
|
242
|
+
"@microsoft/api-extractor": "7.33.5",
|
|
243
243
|
"@sinonjs/fake-timers": "9.1.2",
|
|
244
244
|
"@types/chai": "4.3.3",
|
|
245
|
-
"@types/debug": "
|
|
245
|
+
"@types/debug": "4.1.7",
|
|
246
246
|
"@types/dirty-chai": "2.0.2",
|
|
247
|
-
"@types/express": "4.17.
|
|
247
|
+
"@types/express": "4.17.14",
|
|
248
248
|
"@types/fs-extra": "9.0.13",
|
|
249
249
|
"@types/glob": "7.2.0",
|
|
250
250
|
"@types/has-ansi": "5.0.0",
|
|
251
251
|
"@types/lodash.merge": "4.6.7",
|
|
252
252
|
"@types/lodash.mergewith": "4.6.7",
|
|
253
|
-
"@types/mocha": "
|
|
253
|
+
"@types/mocha": "10.0.0",
|
|
254
254
|
"@types/mustache": "4.2.1",
|
|
255
255
|
"@types/mz": "2.7.4",
|
|
256
|
-
"@types/node": "
|
|
256
|
+
"@types/node": "18.11.9",
|
|
257
257
|
"@types/progress": "2.0.5",
|
|
258
|
-
"@types/semver": "7.3.
|
|
258
|
+
"@types/semver": "7.3.13",
|
|
259
259
|
"@types/sinon-chai": "3.2.8",
|
|
260
260
|
"@types/sinonjs__fake-timers": "8.1.2",
|
|
261
261
|
"@types/stream-buffers": "3.0.4",
|
|
262
262
|
"@types/tmp": "0.2.3",
|
|
263
263
|
"@types/verror": "1.10.6",
|
|
264
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
265
|
-
"@typescript-eslint/parser": "5.
|
|
264
|
+
"@typescript-eslint/eslint-plugin": "5.42.0",
|
|
265
|
+
"@typescript-eslint/parser": "5.42.0",
|
|
266
266
|
"chai": "4.3.6",
|
|
267
267
|
"chai-exclude": "2.1.0",
|
|
268
268
|
"coffeescript": "2.7.0",
|
|
269
269
|
"dependency-lint": "7.1.0",
|
|
270
270
|
"dirty-chai": "2.0.1",
|
|
271
|
-
"eslint": "8.
|
|
271
|
+
"eslint": "8.26.0",
|
|
272
272
|
"eslint-config-prettier": "8.5.0",
|
|
273
273
|
"eslint-plugin-import": "2.26.0",
|
|
274
274
|
"eslint-plugin-node": "11.1.0",
|
|
275
275
|
"eslint-plugin-prettier": "4.2.1",
|
|
276
276
|
"eslint-plugin-standard": "4.1.0",
|
|
277
|
-
"express": "4.18.
|
|
277
|
+
"express": "4.18.2",
|
|
278
278
|
"fs-extra": "10.1.0",
|
|
279
279
|
"genversion": "3.1.1",
|
|
280
|
-
"mocha": "10.
|
|
280
|
+
"mocha": "10.1.0",
|
|
281
281
|
"mustache": "4.2.0",
|
|
282
282
|
"nyc": "15.1.0",
|
|
283
283
|
"prettier": "2.7.1",
|
|
284
284
|
"reindent-template-literals": "1.1.0",
|
|
285
285
|
"shx": "0.3.4",
|
|
286
|
-
"sinon": "14.0.
|
|
286
|
+
"sinon": "14.0.1",
|
|
287
287
|
"sinon-chai": "3.7.0",
|
|
288
288
|
"stream-buffers": "3.0.2",
|
|
289
289
|
"stream-to-string": "1.2.0",
|
|
290
290
|
"ts-node": "10.9.1",
|
|
291
|
-
"tsd": "0.
|
|
292
|
-
"typescript": "4.8.
|
|
291
|
+
"tsd": "0.24.1",
|
|
292
|
+
"typescript": "4.8.4"
|
|
293
293
|
},
|
|
294
294
|
"overrides": {
|
|
295
295
|
"ansi-regex": "^5.0.1"
|
|
@@ -311,7 +311,7 @@
|
|
|
311
311
|
"prepublishOnly": "rm -rf lib && npm run build-local",
|
|
312
312
|
"pretest-coverage": "npm run build-local",
|
|
313
313
|
"pretypes-test": "npm run build-local",
|
|
314
|
-
"test-coverage": "nyc --silent mocha 'src/**/*_spec.ts' 'compatibility/**/*_spec.ts' && nyc --silent --no-clean node bin/cucumber.js && nyc report --reporter=lcov",
|
|
314
|
+
"test-coverage": "nyc --silent mocha 'src/**/*_spec.ts' 'compatibility/**/*_spec.ts' && nyc --silent --no-clean node bin/cucumber.js --tags \"not @source-mapping\" && nyc report --reporter=lcov",
|
|
315
315
|
"test": "npm run lint && npm run types-test && npm run unit-test && npm run cck-test && npm run feature-test",
|
|
316
316
|
"types-test": "tsd",
|
|
317
317
|
"unit-test": "mocha 'src/**/*_spec.ts'",
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import CallSite = NodeJS.CallSite;
|
|
3
|
-
export declare function isFileNameInCucumber(fileName: string): boolean;
|
|
4
|
-
export default class StackTraceFilter {
|
|
5
|
-
private currentFilter;
|
|
6
|
-
filter(): void;
|
|
7
|
-
isErrorInCucumber(frames: CallSite[]): boolean;
|
|
8
|
-
isFrameInCucumber(frame: CallSite): boolean;
|
|
9
|
-
isFrameInNode(frame: CallSite): boolean;
|
|
10
|
-
unfilter(): void;
|
|
11
|
-
}
|