diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f741e9..eadf74a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Changed +- Allow ExpressionsGroup.children to be optional ([#43](https://github.com/cucumber/javascript-core/pull/43)) ## [0.8.2] - 2026-01-12 ### Changed diff --git a/package-lock.json b/package-lock.json index ef1dd8b..faf7240 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.8.2", "license": "MIT", "devDependencies": { - "@cucumber/cucumber-expressions": "^18.0.1", + "@cucumber/cucumber-expressions": "^19.0.0", "@cucumber/gherkin": "^38.0.0", "@cucumber/messages": "^32.0.0", "@cucumber/query": "^15.0.0", @@ -66,9 +66,9 @@ } }, "node_modules/@cucumber/cucumber-expressions": { - "version": "18.0.1", - "resolved": "https://registry.npmjs.org/@cucumber/cucumber-expressions/-/cucumber-expressions-18.0.1.tgz", - "integrity": "sha512-NSid6bI+7UlgMywl5octojY5NXnxR9uq+JisjOrO52VbFsQM6gTWuQFE8syI10KnIBEdPzuEUSVEeZ0VFzRnZA==", + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/@cucumber/cucumber-expressions/-/cucumber-expressions-19.0.0.tgz", + "integrity": "sha512-4FKoOQh2Uf6F6/Ln+1OxuK8LkTg6PyAqekhf2Ix8zqV2M54sH+m7XNJNLhOFOAW/t9nxzRbw2CcvXbCLjcvHZg==", "dev": true, "license": "MIT", "dependencies": { @@ -91,7 +91,6 @@ "integrity": "sha512-1OSoW+GQvFUNAl6tdP2CTBexTXMNJF0094goVUcvugtQeXtJ0K8sCP0xbq7GGoiezs/eJAAOD03+zAPT64orHQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "class-transformer": "0.5.1", "reflect-metadata": "0.2.2" @@ -684,7 +683,6 @@ "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -1090,7 +1088,6 @@ "integrity": "sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.37.0", "@typescript-eslint/types": "8.37.0", @@ -1283,7 +1280,6 @@ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1526,7 +1522,6 @@ "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=18" } @@ -1822,7 +1817,6 @@ "integrity": "sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", @@ -3610,7 +3604,6 @@ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3655,7 +3648,8 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/universalify": { "version": "2.0.1", diff --git a/package.json b/package.json index 1e226b9..591b3eb 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "@cucumber/tag-expressions": "*" }, "devDependencies": { - "@cucumber/cucumber-expressions": "^18.0.1", + "@cucumber/cucumber-expressions": "^19.0.0", "@cucumber/gherkin": "^38.0.0", "@cucumber/messages": "^32.0.0", "@cucumber/query": "^15.0.0", diff --git a/src/makeTestPlan.spec.ts b/src/makeTestPlan.spec.ts index ca396f7..8ee92db 100644 --- a/src/makeTestPlan.spec.ts +++ b/src/makeTestPlan.spec.ts @@ -555,10 +555,21 @@ describe('makeTestPlan', () => { fn: sinon.stub(), sourceReference: { uri: 'hooks.js', location: { line: 2, column: 1 } }, }) + .parameterType({ + name: 'flight', + regexp: /([A-Z]{3})-([A-Z]{3})/, + transformer: sinon.stub(), + sourceReference: { uri: 'hooks.js', location: { line: 1, column: 1 } }, + }) .step({ pattern: 'we scored {int} out of {int}', fn: sinon.stub(), - sourceReference: { uri: 'steps.js', location: { line: 1, column: 1 } }, + sourceReference: { uri: 'steps.js', location: { line: 2, column: 1 } }, + }) + .step({ + pattern: '{flight} has been delayed', + fn: sinon.stub(), + sourceReference: { uri: 'steps.js', location: { line: 3, column: 1 } }, }) .build() @@ -572,23 +583,22 @@ describe('makeTestPlan', () => { expect(result.toEnvelopes()).to.deep.eq([ { testCase: { - id: '7', - pickleId: '3', + id: '11', + pickleId: '5', testSteps: [ { - hookId: '4', - id: '8', + hookId: '6', + id: '12', }, { - id: '9', - pickleStepId: '2', - stepDefinitionIds: ['6'], + id: '13', + pickleStepId: '3', + stepDefinitionIds: ['9'], stepMatchArgumentsLists: [ { stepMatchArguments: [ { group: { - children: [], start: 10, value: '4', }, @@ -596,7 +606,6 @@ describe('makeTestPlan', () => { }, { group: { - children: [], start: 19, value: '5', }, @@ -607,8 +616,36 @@ describe('makeTestPlan', () => { ], }, { - hookId: '5', - id: '10', + id: '14', + pickleStepId: '4', + stepDefinitionIds: ['10'], + stepMatchArgumentsLists: [ + { + stepMatchArguments: [ + { + group: { + children: [ + { + start: 0, + value: 'LHR', + }, + { + start: 4, + value: 'CDG', + }, + ], + start: 0, + value: 'LHR-CDG', + }, + parameterTypeName: 'flight', + }, + ], + }, + ], + }, + { + hookId: '7', + id: '15', }, ], testRunStartedId, diff --git a/src/makeTestPlan.ts b/src/makeTestPlan.ts index eede45b..b8d0125 100644 --- a/src/makeTestPlan.ts +++ b/src/makeTestPlan.ts @@ -221,6 +221,12 @@ function fromPickleSteps( } function mapArgumentGroup(group: ExpressionsGroup): MessagesGroup { + if (!group.children) { + return { + start: group.start, + value: group.value, + } + } return { start: group.start, value: group.value, diff --git a/testdata/parameters.feature b/testdata/parameters.feature index 9289c67..ee3e24d 100644 --- a/testdata/parameters.feature +++ b/testdata/parameters.feature @@ -1,3 +1,4 @@ Feature: a feature Scenario: a scenario - Given we scored 4 out of 5 \ No newline at end of file + Given we scored 4 out of 5 + And LHR-CDG has been delayed \ No newline at end of file