Skip to content

Commit aa3ce7b

Browse files
authored
Remove Runtime and other deprecated exports (#2420)
1 parent dc03f16 commit aa3ce7b

File tree

8 files changed

+16
-305
lines changed

8 files changed

+16
-305
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
88
Please see [CONTRIBUTING.md](./CONTRIBUTING.md) on how to contribute to Cucumber.
99

1010
## [Unreleased]
11+
### Removed
12+
- BREAKING CHANGE: Remove previously-deprecated `parseGherkinMessageStream` ([#2420](https://github.com/cucumber/cucumber-js/pull/2420))
13+
- BREAKING CHANGE: Remove previously-deprecated `PickleFilter` ([#2420](https://github.com/cucumber/cucumber-js/pull/2420))
14+
- BREAKING CHANGE: Remove previously-deprecated `Runtime` ([#2420](https://github.com/cucumber/cucumber-js/pull/2420))
1115

1216
## [10.9.0] - 2024-08-13
1317
### Added

UPGRADING.md

+10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22

33
This document describes breaking changes and how to upgrade. For a complete list of changes including minor and patch releases, please refer to the [changelog](./CHANGELOG.md).
44

5+
## 11.0.0
6+
7+
### `parseGherkinMessageStream` and `PickleFilter`
8+
9+
`parseGherkinMessageStream` was a way to process a stream of envelopes from Gherkin and resolve to an array of filtered, ordered pickle Ids. The `PickleFilter` class was used to provide a filter to the aforementioned function. These interfaces included internal implementation details from Cucumber which were difficult to assemble. To adapt, pivot to the `loadSources` function from the [JavaScript API](./docs/javascript_api.md), or raise an issue if you feel your use case isn't catered for.
10+
11+
### `Runtime`
12+
13+
The `Runtime` class was used internally to represent an instance of the serial test case runner. Its interface included internal implementation details from Cucumber which were difficult to assemble. To adapt, pivot to the `runCucumber` function from the [JavaScript API](./docs/javascript_api.md), or raise an issue if you feel your use case isn't catered for.
14+
515
## 10.0.0
616

717
### Configuration files

docs/deprecations.md

-24
Original file line numberDiff line numberDiff line change
@@ -22,30 +22,6 @@ The `Cli` class is used internally to represent an instance of the command-line
2222

2323
To adapt, pivot to the `runCucumber` function from the [JavaScript API](./javascript_api.md), or raise an issue if you feel your use case isn't catered for.
2424

25-
### `parseGherkinMessageStream`
26-
27-
Deprecated in `8.0.0`, will be removed in `10.0.0` or later.
28-
29-
`parseGherkinMessageStream` is a way to process a stream of envelopes from Gherkin and resolve to an array of filtered, ordered pickle Ids. Its interface includes internal implementation details from Cucumber which are difficult to assemble.
30-
31-
To adapt, pivot to the `loadSources` function from the [JavaScript API](./javascript_api.md), or raise an issue if you feel your use case isn't catered for.
32-
33-
### `PickleFilter`
34-
35-
Deprecated in `8.7.0`, will be removed in `10.0.0` or later.
36-
37-
The `PickleFilter` class is used to provide a filter to the `parseGherkinMessageStream` function above.
38-
39-
To adapt, pivot to the `loadSources` function from the [JavaScript API](./javascript_api.md), or raise an issue if you feel your use case isn't catered for.
40-
41-
### `Runtime`
42-
43-
Deprecated in `8.7.0`, will be removed in `10.0.0` or later.
44-
45-
The `Runtime` class is used internally to represent an instance of the serial test case runner. Its interface includes internal implementation details from Cucumber which are difficult to assemble.
46-
47-
To adapt, pivot to the `runCucumber` function from the [JavaScript API](./javascript_api.md), or raise an issue if you feel your use case isn't catered for.
48-
4925
### publishQuiet
5026

5127
Deprecated in `9.4.0`. Will be removed in `11.0.0` or later.

exports/root/report.api.md

-43
Original file line numberDiff line numberDiff line change
@@ -259,40 +259,6 @@ interface IGetStepKeywordRequest {
259259
pickleStep: messages.PickleStep;
260260
}
261261

262-
// @public (undocumented)
263-
export interface INewRuntimeOptions {
264-
// (undocumented)
265-
eventBroadcaster: EventEmitter;
266-
// (undocumented)
267-
eventDataCollector: EventDataCollector;
268-
// (undocumented)
269-
newId: IdGenerator.NewId;
270-
// (undocumented)
271-
options: IRuntimeOptions;
272-
// (undocumented)
273-
pickleIds: string[];
274-
// (undocumented)
275-
supportCodeLibrary: SupportCodeLibrary;
276-
}
277-
278-
// @public (undocumented)
279-
export interface IRuntimeOptions {
280-
// (undocumented)
281-
dryRun: boolean;
282-
// (undocumented)
283-
failFast: boolean;
284-
// (undocumented)
285-
filterStacktraces: boolean;
286-
// (undocumented)
287-
retry: number;
288-
// (undocumented)
289-
retryTagFilter: string;
290-
// (undocumented)
291-
strict: boolean;
292-
// (undocumented)
293-
worldParameters: JsonObject;
294-
}
295-
296262
// @public (undocumented)
297263
function isFailure(result: messages.TestStepResult, willBeRetried?: boolean): boolean;
298264

@@ -406,15 +372,9 @@ declare namespace parallelCanAssignHelpers {
406372
}
407373
export { parallelCanAssignHelpers }
408374

409-
// @public @deprecated (undocumented)
410-
export const parseGherkinMessageStream: typeof cliHelpers.parseGherkinMessageStream;
411-
412375
// @public (undocumented)
413376
function parseTestCaseAttempt({ testCaseAttempt, snippetBuilder, supportCodeLibrary, }: IParseTestCaseAttemptRequest): IParsedTestCaseAttempt;
414377

415-
// @public @deprecated (undocumented)
416-
export const PickleFilter: typeof PickleFilter_2;
417-
418378
declare namespace PickleParser {
419379
export {
420380
getScenarioDescription,
@@ -451,9 +411,6 @@ export class RerunFormatter extends Formatter {
451411
protected readonly separator: string;
452412
}
453413

454-
// @public @deprecated (undocumented)
455-
export const Runtime: typeof Runtime_2;
456-
457414
// @public (undocumented)
458415
export const setDefaultTimeout: (milliseconds: number) => void;
459416

src/cli/helpers.ts

-52
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
import { EventEmitter } from 'node:events'
2-
import { Readable } from 'node:stream'
32
import os from 'node:os'
43
import shuffle from 'knuth-shuffle-seeded'
54
import * as messages from '@cucumber/messages'
65
import { IdGenerator } from '@cucumber/messages'
76
import detectCiEnvironment from '@cucumber/ci-environment'
8-
import { doesHaveValue } from '../value_checker'
9-
import { EventDataCollector } from '../formatter/helpers'
10-
import PickleFilter from '../pickle_filter'
117
import { SupportCodeLibrary } from '../support_code_library_builder/types'
128
import TestCaseHookDefinition from '../models/test_case_hook_definition'
139
import TestRunHookDefinition from '../models/test_run_hook_definition'
@@ -16,54 +12,6 @@ import { ILogger } from '../logger'
1612
import { ILineAndUri } from '../types'
1713
import { IPickleOrder } from '../filter'
1814

19-
interface IParseGherkinMessageStreamRequest {
20-
cwd?: string
21-
eventBroadcaster: EventEmitter
22-
eventDataCollector: EventDataCollector
23-
gherkinMessageStream: Readable
24-
order: string
25-
pickleFilter: PickleFilter
26-
}
27-
28-
/**
29-
* Process a stream of envelopes from Gherkin and resolve to an array of filtered, ordered pickle Ids
30-
*
31-
* @param eventBroadcaster
32-
* @param eventDataCollector
33-
* @param gherkinMessageStream
34-
* @param order
35-
* @param pickleFilter
36-
*/
37-
export async function parseGherkinMessageStream({
38-
eventBroadcaster,
39-
eventDataCollector,
40-
gherkinMessageStream,
41-
order,
42-
pickleFilter,
43-
}: IParseGherkinMessageStreamRequest): Promise<string[]> {
44-
return await new Promise<string[]>((resolve, reject) => {
45-
const result: string[] = []
46-
gherkinMessageStream.on('data', (envelope: messages.Envelope) => {
47-
eventBroadcaster.emit('envelope', envelope)
48-
if (doesHaveValue(envelope.pickle)) {
49-
const pickle = envelope.pickle
50-
const pickleId = pickle.id
51-
const gherkinDocument = eventDataCollector.getGherkinDocument(
52-
pickle.uri
53-
)
54-
if (pickleFilter.matches({ gherkinDocument, pickle })) {
55-
result.push(pickleId)
56-
}
57-
}
58-
})
59-
gherkinMessageStream.on('end', () => {
60-
orderPickles(result, order as IPickleOrder, console)
61-
resolve(result)
62-
})
63-
gherkinMessageStream.on('error', reject)
64-
})
65-
}
66-
6715
// Orders the pickleIds in place - morphs input
6816
export function orderPickles<T = string>(
6917
pickleIds: T[],

src/cli/helpers_spec.ts

+2-158
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,24 @@
11
import { EventEmitter } from 'node:events'
2-
import { Readable } from 'node:stream'
3-
import { GherkinStreams } from '@cucumber/gherkin-streams'
42
import * as messages from '@cucumber/messages'
5-
import { IdGenerator, SourceMediaType } from '@cucumber/messages'
3+
import { IdGenerator } from '@cucumber/messages'
64
import { expect } from 'chai'
75
import { describe, it } from 'mocha'
86
import {
97
CucumberExpression,
108
ParameterType,
119
RegularExpression,
1210
} from '@cucumber/cucumber-expressions'
13-
import { EventDataCollector } from '../formatter/helpers'
14-
import PickleFilter from '../pickle_filter'
1511
import StepDefinition from '../models/step_definition'
1612
import { SupportCodeLibrary } from '../support_code_library_builder/types'
1713
import TestCaseHookDefinition from '../models/test_case_hook_definition'
1814
import TestRunHookDefinition from '../models/test_run_hook_definition'
1915
import { SourcedParameterTypeRegistry } from '../support_code_library_builder/sourced_parameter_type_registry'
20-
import { IPickleOrder } from '../api'
21-
import {
22-
emitMetaMessage,
23-
emitSupportCodeMessages,
24-
parseGherkinMessageStream,
25-
} from './helpers'
16+
import { emitMetaMessage, emitSupportCodeMessages } from './helpers'
2617

2718
const noopFunction = (): void => {
2819
// no code
2920
}
3021

31-
interface ITestParseGherkinMessageStreamRequest {
32-
gherkinMessageStream: Readable
33-
order: IPickleOrder
34-
pickleFilter: PickleFilter
35-
}
36-
37-
interface ITestParseGherkinMessageStreamResponse {
38-
envelopes: messages.Envelope[]
39-
result: string[]
40-
}
41-
42-
async function testParseGherkinMessageStream(
43-
options: ITestParseGherkinMessageStreamRequest
44-
): Promise<ITestParseGherkinMessageStreamResponse> {
45-
const envelopes: messages.Envelope[] = []
46-
const eventBroadcaster = new EventEmitter()
47-
eventBroadcaster.on('envelope', (e) => envelopes.push(e))
48-
const eventDataCollector = new EventDataCollector(eventBroadcaster)
49-
const result = await parseGherkinMessageStream({
50-
eventBroadcaster,
51-
eventDataCollector,
52-
gherkinMessageStream: options.gherkinMessageStream,
53-
order: options.order,
54-
pickleFilter: options.pickleFilter,
55-
})
56-
return { envelopes, result }
57-
}
58-
5922
function testEmitSupportCodeMessages(
6023
supportCode: Partial<SupportCodeLibrary>
6124
): messages.Envelope[] {
@@ -373,123 +336,4 @@ describe('helpers', () => {
373336
expect(envelopes).to.deep.eq(expectedEnvelopes)
374337
})
375338
})
376-
describe('parseGherkinMessageStream', () => {
377-
describe('empty feature', () => {
378-
it('emits source and gherkinDocument events and returns an empty array', async function () {
379-
// Arrange
380-
const cwd = '/project'
381-
const sourceEnvelope: messages.Envelope = {
382-
source: {
383-
data: '',
384-
mediaType: SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN,
385-
uri: '/project/features/a.feature',
386-
},
387-
}
388-
const gherkinMessageStream = GherkinStreams.fromSources(
389-
[sourceEnvelope],
390-
{}
391-
)
392-
const order = 'defined'
393-
const pickleFilter = new PickleFilter({ cwd })
394-
395-
// Act
396-
const { envelopes, result } = await testParseGherkinMessageStream({
397-
gherkinMessageStream,
398-
order,
399-
pickleFilter,
400-
})
401-
402-
// Assert
403-
expect(result).to.eql([])
404-
expect(envelopes).to.have.lengthOf(2)
405-
expect(envelopes[0]).to.eql(sourceEnvelope)
406-
expect(envelopes[1].gherkinDocument).to.exist()
407-
expect(envelopes[1].gherkinDocument).to.have.keys([
408-
'comments',
409-
'feature',
410-
'uri',
411-
])
412-
})
413-
})
414-
415-
describe('feature with scenario that does not match the filter', () => {
416-
it('emits pickle event and returns an empty array', async function () {
417-
// Arrange
418-
const cwd = '/project'
419-
const sourceEnvelope: messages.Envelope = {
420-
source: {
421-
data: '@tagA\nFeature: a\nScenario: b\nGiven a step',
422-
mediaType: SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN,
423-
uri: '/project/features/a.feature',
424-
},
425-
}
426-
const gherkinMessageStream = GherkinStreams.fromSources(
427-
[sourceEnvelope],
428-
{}
429-
)
430-
const order = 'defined'
431-
const pickleFilter = new PickleFilter({
432-
cwd,
433-
tagExpression: 'not @tagA',
434-
})
435-
436-
// Act
437-
const { envelopes, result } = await testParseGherkinMessageStream({
438-
gherkinMessageStream,
439-
order,
440-
pickleFilter,
441-
})
442-
443-
// Assert
444-
expect(result).to.eql([])
445-
expect(envelopes).to.have.lengthOf(3)
446-
expect(envelopes[0]).to.eql(sourceEnvelope)
447-
expect(envelopes[1].gherkinDocument).to.exist()
448-
expect(envelopes[2].pickle).to.exist()
449-
expect(envelopes[2].pickle).to.have.keys([
450-
'astNodeIds',
451-
'id',
452-
'language',
453-
'name',
454-
'steps',
455-
'tags',
456-
'uri',
457-
])
458-
})
459-
})
460-
461-
describe('feature with scenario that matches the filter', () => {
462-
it('emits pickle and returns the pickleId', async function () {
463-
// Arrange
464-
const cwd = '/project'
465-
const sourceEnvelope: messages.Envelope = {
466-
source: {
467-
data: 'Feature: a\nScenario: b\nGiven a step',
468-
mediaType: SourceMediaType.TEXT_X_CUCUMBER_GHERKIN_PLAIN,
469-
uri: '/project/features/a.feature',
470-
},
471-
}
472-
const gherkinMessageStream = GherkinStreams.fromSources(
473-
[sourceEnvelope],
474-
{}
475-
)
476-
const order = 'defined'
477-
const pickleFilter = new PickleFilter({ cwd })
478-
479-
// Act
480-
const { envelopes, result } = await testParseGherkinMessageStream({
481-
gherkinMessageStream,
482-
order,
483-
pickleFilter,
484-
})
485-
486-
// Assert
487-
expect(result).to.eql([envelopes[2].pickle.id])
488-
expect(envelopes).to.have.lengthOf(3)
489-
expect(envelopes[0]).to.eql(sourceEnvelope)
490-
expect(envelopes[1].gherkinDocument).to.exist()
491-
expect(envelopes[2].pickle).to.exist()
492-
})
493-
})
494-
})
495339
})

0 commit comments

Comments
 (0)