Skip to content

Commit afed98d

Browse files
committed
Upgrade to cucumber-expressions 3.0.0, rename addParameter to defineParameterType
1 parent e6d5495 commit afed98d

15 files changed

+87
-75
lines changed

features/custom_parameter.feature

+21-3
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ Feature: Custom Parameter
1717
"""
1818
import assert from 'assert'
1919
import {defineSupportCode} from 'cucumber'
20-
defineSupportCode(({Given, addParameter}) => {
21-
addParameter({
22-
captureGroupRegexps: /passing|failing|undefined|pending/,
20+
defineSupportCode(({Given, defineParameterType}) => {
21+
defineParameterType({
22+
regexp: /passing|failing|undefined|pending/,
2323
transformer: s => s.toUpperCase(),
2424
typeName: 'status'
2525
})
@@ -31,6 +31,24 @@ Feature: Custom Parameter
3131
When I run cucumber.js
3232
Then the step "a passing step" has status "passed"
3333

34+
Scenario: custom parameter without transformer
35+
Given a file named "features/step_definitions/passing_steps.js" with:
36+
"""
37+
import assert from 'assert'
38+
import {defineSupportCode} from 'cucumber'
39+
defineSupportCode(({Given, defineParameterType}) => {
40+
defineParameterType({
41+
regexp: /passing|failing|undefined|pending/,
42+
typeName: 'status'
43+
})
44+
Given('a {status} step', function(status) {
45+
assert.equal(status, 'passing')
46+
})
47+
})
48+
"""
49+
When I run cucumber.js
50+
Then the step "a passing step" has status "passed"
51+
3452
Scenario: custom parameter (legacy API)
3553
Given a file named "features/step_definitions/passing_steps.js" with:
3654
"""

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@
121121
"cli-table": "^0.3.1",
122122
"colors": "^1.1.2",
123123
"commander": "^2.9.0",
124-
"cucumber-expressions": "^2.0.1",
124+
"cucumber-expressions": "^3.0.0",
125125
"cucumber-tag-expressions": "^1.0.0",
126126
"duration": "^0.2.0",
127127
"figures": "2.0.0",

src/formatter/builder.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ export default class FormatterBuilder {
4747
}
4848
return new StepDefinitionSnippetBuilder({
4949
snippetSyntax: new Syntax(snippetInterface),
50-
parameterRegistry: supportCodeLibrary.parameterRegistry
50+
parameterTypeRegistry: supportCodeLibrary.parameterTypeRegistry
5151
})
5252
}
5353

src/formatter/step_definition_snippet_builder/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import DocString from '../../models/step_arguments/doc_string'
55
import KeywordType from '../../keyword_type'
66

77
export default class StepDefinitionSnippetBuilder {
8-
constructor({snippetSyntax, parameterRegistry}) {
8+
constructor({snippetSyntax, parameterTypeRegistry}) {
99
this.snippetSyntax = snippetSyntax
10-
this.cucumberExpressionGenerator = new CucumberExpressionGenerator(parameterRegistry)
10+
this.cucumberExpressionGenerator = new CucumberExpressionGenerator(parameterTypeRegistry)
1111
}
1212

1313
build(step) {

src/formatter/step_definition_snippet_builder/index_spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ import DataTable from '../../models/step_arguments/data_table'
22
import DocString from '../../models/step_arguments/doc_string'
33
import KeywordType from '../../keyword_type'
44
import StepDefinitionSnippetBuilder from './'
5-
import TransformLookupBuilder from '../../support_code_library/transform_lookup_builder'
5+
import TransformLookupBuilder from '../../support_code_library/parameter_type_registry_builder'
66

77
describe('StepDefinitionSnippetBuilder', function () {
88
beforeEach(function () {
99
this.snippetSyntax = createMock(['build'])
1010
this.transformsLookup = TransformLookupBuilder.build()
1111
this.snippetBuilder = new StepDefinitionSnippetBuilder({
1212
snippetSyntax: this.snippetSyntax,
13-
parameterRegistry: this.transformsLookup
13+
parameterTypeRegistry: this.transformsLookup
1414
})
1515
})
1616

src/models/step_definition.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ export default class StepDefinition {
2222
return this.buildInvalidCodeLengthMessage(parameters.length, parameters.length + 1)
2323
}
2424

25-
getInvocationParameters({step, parameterRegistry}) {
26-
const cucumberExpression = this.getCucumberExpression(parameterRegistry)
25+
getInvocationParameters({step, parameterTypeRegistry}) {
26+
const cucumberExpression = this.getCucumberExpression(parameterTypeRegistry)
2727
const stepNameParameters = _.map(cucumberExpression.match(step.name), 'transformedValue')
2828
const stepArgumentParameters = step.arguments.map(function(arg) {
2929
if (arg instanceof DataTable) {
@@ -37,20 +37,20 @@ export default class StepDefinition {
3737
return stepNameParameters.concat(stepArgumentParameters)
3838
}
3939

40-
getCucumberExpression(parameterRegistry) {
40+
getCucumberExpression(parameterTypeRegistry) {
4141
if (typeof(this.pattern) === 'string') {
42-
return new CucumberExpression(this.pattern, [], parameterRegistry)
42+
return new CucumberExpression(this.pattern, [], parameterTypeRegistry)
4343
} else {
44-
return new RegularExpression(this.pattern, [], parameterRegistry)
44+
return new RegularExpression(this.pattern, [], parameterTypeRegistry)
4545
}
4646
}
4747

4848
getValidCodeLengths(parameters) {
4949
return [parameters.length, parameters.length + 1]
5050
}
5151

52-
matchesStepName({stepName, parameterRegistry}) {
53-
const cucumberExpression = this.getCucumberExpression(parameterRegistry)
52+
matchesStepName({stepName, parameterTypeRegistry}) {
53+
const cucumberExpression = this.getCucumberExpression(parameterTypeRegistry)
5454
return Boolean(cucumberExpression.match(stepName))
5555
}
5656
}

src/runtime/scenario_runner.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export default class ScenarioRunner {
3939
scenarioResult: this.scenarioResult,
4040
step,
4141
stepDefinition,
42-
parameterRegistry: this.supportCodeLibrary.parameterRegistry,
42+
parameterTypeRegistry: this.supportCodeLibrary.parameterTypeRegistry,
4343
world: this.world
4444
})
4545
}
@@ -103,7 +103,7 @@ export default class ScenarioRunner {
103103
const stepDefinitions = this.supportCodeLibrary.stepDefinitions.filter((stepDefinition) => {
104104
return stepDefinition.matchesStepName({
105105
stepName: step.name,
106-
parameterRegistry: this.supportCodeLibrary.parameterRegistry
106+
parameterTypeRegistry: this.supportCodeLibrary.parameterTypeRegistry
107107
})
108108
})
109109
if (stepDefinitions.length === 0) {

src/runtime/scenario_runner_spec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ describe('ScenarioRunner', function () {
2626
beforeHookDefinitions: [],
2727
defaultTimeout: 5000,
2828
stepDefinitions: [],
29-
parameterRegistry: {},
29+
parameterTypeRegistry: {},
3030
World() {}
3131
}
3232
this.options = {}

src/runtime/step_runner.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import UserCodeRunner from '../user_code_runner'
66

77
const {beginTiming, endTiming} = Time
88

9-
async function run({attachmentManager, defaultTimeout, scenarioResult, step, stepDefinition, parameterRegistry, world}) {
9+
async function run({attachmentManager, defaultTimeout, scenarioResult, step, stepDefinition, parameterTypeRegistry, world}) {
1010
beginTiming()
11-
const parameters = stepDefinition.getInvocationParameters({scenarioResult, step, parameterRegistry})
11+
const parameters = stepDefinition.getInvocationParameters({scenarioResult, step, parameterTypeRegistry})
1212
const timeoutInMilliseconds = stepDefinition.options.timeout || defaultTimeout
1313

1414
let error, result

src/support_code_library/builder.js

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import util from 'util'
21
import _ from 'lodash'
32
import arity from 'util-arity'
43
import isGenerator from 'is-generator'
54
import path from 'path'
6-
import TransformLookupBuilder from './transform_lookup_builder'
5+
import TransformLookupBuilder from './parameter_type_registry_builder'
76
import * as helpers from './helpers'
87
function build({cwd, fns}) {
98
const options = {
@@ -12,16 +11,16 @@ function build({cwd, fns}) {
1211
defaultTimeout: 5000,
1312
listeners: [],
1413
stepDefinitions: [],
15-
parameterRegistry: TransformLookupBuilder.build(),
14+
parameterTypeRegistry: TransformLookupBuilder.build(),
1615
World({attach, parameters}) {
1716
this.attach = attach
1817
this.parameters = parameters
1918
}
2019
}
2120
let definitionFunctionWrapper = null
2221
const fnArgument = {
23-
addParameter: helpers.addParameter(options.parameterRegistry),
24-
addTransform: util.deprecate(helpers.addParameter(options.parameterRegistry), 'addTransform is deprecated and will be removed in a future version. Please use addParameter instead.'),
22+
addTransform: helpers.addTransform(options.parameterTypeRegistry),
23+
defineParameterType: helpers.defineParameterType(options.parameterTypeRegistry),
2524
After: helpers.defineHook(cwd, options.afterHookDefinitions),
2625
Before: helpers.defineHook(cwd, options.beforeHookDefinitions),
2726
defineStep: helpers.defineStep(cwd, options.stepDefinitions),

src/support_code_library/builder_spec.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {ParameterRegistry} from 'cucumber-expressions'
1+
import {ParameterTypeRegistry} from 'cucumber-expressions'
22
import SupportCodeLibraryBuilder from './builder'
33

44
describe('SupportCodeLibraryBuilder', function () {
@@ -14,7 +14,7 @@ describe('SupportCodeLibraryBuilder', function () {
1414
expect(this.options.defaultTimeout).to.eql(5000)
1515
expect(this.options.listeners).to.eql([])
1616
expect(this.options.stepDefinitions).to.eql([])
17-
expect(this.options.parameterRegistry).to.be.instanceOf(ParameterRegistry)
17+
expect(this.options.parameterTypeRegistry).to.be.instanceOf(ParameterTypeRegistry)
1818
const worldInstance = new this.options.World({
1919
attach: this.attachFn,
2020
parameters: {some: 'data'}

src/support_code_library/helpers.js

+19-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
import util from 'util'
12
import _ from 'lodash'
2-
import {Parameter} from 'cucumber-expressions'
3+
import {ParameterType} from 'cucumber-expressions'
34
import {formatLocation} from '../formatter/utils'
45
import HookDefinition from '../models/hook_definition'
56
import path from 'path'
@@ -72,14 +73,26 @@ export function registerHandler(cwd, collection) {
7273
}
7374
}
7475

75-
export function addParameter(parameterRegistry) {
76-
return ({captureGroupRegexps, transformer, typeName}) => {
77-
const parameter = new Parameter(
76+
export function addTransform(parameterTypeRegistry) {
77+
return util.deprecate(({captureGroupRegexps, transformer, typeName}) => {
78+
const parameter = new ParameterType(
7879
typeName,
79-
function() {},
80+
null,
8081
captureGroupRegexps,
8182
transformer
8283
)
83-
parameterRegistry.addParameter(parameter)
84+
parameterTypeRegistry.defineParameterType(parameter)
85+
}, 'addTransform is deprecated and will be removed in a future version. Please use defineParameterType instead.')
86+
}
87+
88+
export function defineParameterType(parameterTypeRegistry) {
89+
return ({regexp, transformer, typeName}) => {
90+
const parameter = new ParameterType(
91+
typeName,
92+
null,
93+
regexp,
94+
transformer
95+
)
96+
parameterTypeRegistry.defineParameterType(parameter)
8497
}
8598
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import {ParameterType, ParameterTypeRegistry} from 'cucumber-expressions'
2+
3+
function build() {
4+
const parameterTypeRegistry = new ParameterTypeRegistry()
5+
const stringInDoubleQuotesParameterType = new ParameterType(
6+
'stringInDoubleQuotes',
7+
function() {},
8+
'"[^"]*"',
9+
JSON.parse
10+
)
11+
parameterTypeRegistry.defineParameterType(stringInDoubleQuotesParameterType)
12+
return parameterTypeRegistry
13+
}
14+
15+
export default {build}

src/support_code_library/transform_lookup_builder.js

-15
This file was deleted.

yarn.lock

+8-26
Original file line numberDiff line numberDiff line change
@@ -1097,15 +1097,7 @@ [email protected]:
10971097
version "0.0.1"
10981098
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
10991099

1100-
concat-stream@^1.4.6:
1101-
version "1.6.0"
1102-
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
1103-
dependencies:
1104-
inherits "^2.0.3"
1105-
readable-stream "^2.2.2"
1106-
typedarray "^0.0.6"
1107-
1108-
concat-stream@~1.5.0, concat-stream@~1.5.1:
1100+
concat-stream@^1.4.6, concat-stream@~1.5.0, concat-stream@~1.5.1:
11091101
version "1.5.2"
11101102
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266"
11111103
dependencies:
@@ -1203,9 +1195,9 @@ crypto-browserify@^3.0.0:
12031195
public-encrypt "^4.0.0"
12041196
randombytes "^2.0.0"
12051197

1206-
cucumber-expressions@^1.0.3:
1207-
version "1.0.3"
1208-
resolved "https://registry.yarnpkg.com/cucumber-expressions/-/cucumber-expressions-1.0.3.tgz#ea96ab5600f441f192f1c90540555baa1ae83580"
1198+
cucumber-expressions@^3.0.0:
1199+
version "3.0.0"
1200+
resolved "https://registry.yarnpkg.com/cucumber-expressions/-/cucumber-expressions-3.0.0.tgz#4cf424813dae396cc9dab714b8104b459befc32c"
12091201

12101202
cucumber-tag-expressions@^1.0.0:
12111203
version "1.0.0"
@@ -1231,18 +1223,12 @@ debug-log@^1.0.1:
12311223
version "1.0.1"
12321224
resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
12331225

1234-
[email protected], debug@~2.2.0:
1226+
[email protected], debug@^2.1.1, debug@^2.2.0, debug@~2.2.0:
12351227
version "2.2.0"
12361228
resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
12371229
dependencies:
12381230
ms "0.7.1"
12391231

1240-
debug@^2.1.1, debug@^2.2.0:
1241-
version "2.6.0"
1242-
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.0.tgz#bc596bcabe7617f11d9fa15361eded5608b8499b"
1243-
dependencies:
1244-
ms "0.7.2"
1245-
12461232
decamelize@^1.0.0, decamelize@^1.1.1:
12471233
version "1.2.0"
12481234
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
@@ -2009,7 +1995,7 @@ inflight@^1.0.4:
20091995
once "^1.3.0"
20101996
wrappy "1"
20111997

2012-
inherits@2, [email protected], inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1:
1998+
inherits@2, [email protected], inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1:
20131999
version "2.0.3"
20142000
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
20152001

@@ -2606,10 +2592,6 @@ [email protected]:
26062592
version "0.7.1"
26072593
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
26082594

2609-
2610-
version "0.7.2"
2611-
resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
2612-
26132595
26142596
version "0.0.5"
26152597
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
@@ -3007,7 +2989,7 @@ read-pkg@^1.0.0:
30072989
normalize-package-data "^2.3.2"
30082990
path-type "^1.0.0"
30092991

3010-
"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.1.0, readable-stream@^2.1.5, readable-stream@^2.2.2:
2992+
"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.1.0, readable-stream@^2.1.5:
30112993
version "2.2.2"
30122994
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e"
30132995
dependencies:
@@ -3663,7 +3645,7 @@ type-detect@^1.0.0:
36633645
version "1.0.0"
36643646
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-1.0.0.tgz#762217cc06db258ec48908a1298e8b95121e8ea2"
36653647

3666-
typedarray@^0.0.6, typedarray@~0.0.5:
3648+
typedarray@~0.0.5:
36673649
version "0.0.6"
36683650
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
36693651

0 commit comments

Comments
 (0)