diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 7c452b7..59fd0d3 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -5,13 +5,12 @@ name: Node.js CI on: push: - branches: [ "main" ] + branches: ['main'] pull_request: - branches: [ "main" ] + branches: ['main'] jobs: build: - runs-on: ubuntu-latest strategy: @@ -27,5 +26,4 @@ jobs: node-version: ${{ matrix.node-version }} cache: 'yarn' - run: yarn install --frozen-lockfile - - run: yarn run build - run: yarn test diff --git a/README.md b/README.md index a4259df..93632c4 100644 --- a/README.md +++ b/README.md @@ -177,4 +177,5 @@ yarn lint # the plugin is writter in TypeScript, this command will help you dete ### Test datas -Test datas can be found here : https://github.com/cucumber/gherkin-utils/tree/main/testdata +Test datas can be found here : https://github.com/cucumber/gherkin-utils/tree/c35857189c2da3a9b84796ad585d25e70f7bf3b8/testdata + diff --git a/package.json b/package.json index 63491c9..1be4f1f 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "build": "tsc", "lint": "tsc --noEmit", "example": "yarn build && prettier --plugin=dist/index.js tests/plugin/example.feature", - "test": "NODE_OPTIONS=--experimental-vm-modules jest", + "test": "yarn build && NODE_OPTIONS=--experimental-vm-modules jest", "prepublishOnly": "yarn build" }, "keywords": [ diff --git a/src/index.ts b/src/index.ts index a227af2..6f436f5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -41,8 +41,6 @@ import { TypedRuleChild, isHasChildren, isHasChild, - HasChild, - HasChildren, GherkinNodeWithLocation, isWithLocation, } from './GherkinAST/index.js'; @@ -52,7 +50,7 @@ const DEFAULT_ESCAPE_BACKSLASH = false; // taken from https://github.com/cucumber/gherkin-javascript/blob/e25a1be3b21133c7a92eb7735997c6e774406226/src/GherkinClassicTokenMatcher.ts#L11 const LANGUAGE_PATTERN = /^\s*#\s*language\s*:\s*([a-zA-Z\-_]+)\s*$/; -const { hardline, join, indent } = doc.builders; +const { hardline, join, indent, line, fill } = doc.builders; const languages: SupportLanguage[] = [ { @@ -205,9 +203,9 @@ const gherkinParser: Parser = { return gherkinParser.locStart(node) + node.text.trim().length; } - if (!(node instanceof TypedComment)) { - console.log({ method: 'locEnd', nodeName: node.constructor.name }); - } + // if (!(node instanceof TypedComment)) { + // console.log({ method: 'locEnd', nodeName: node.constructor.name }); + // } if (node instanceof TypedFeature) { return ( @@ -238,8 +236,6 @@ function printTags( path: AstPath>, node: GherkinNode & { tags: readonly TypedTag[] } ) { - // console.log(node); - return [ // @ts-expect-error TODO path should be recognized as an AstPath> join(printHardline(), path.map(gherkinAstPrinter.print, 'tags')), @@ -247,25 +243,21 @@ function printTags( ]; } -function printDescription( - path: AstPath>, - node: GherkinNode & { description: string }, - hardlineIfDescription: boolean -) { - // console.log(node); +function printNodeHeading( + node: GherkinNode & { keyword: string; name: string } +): Doc { + return `${node.keyword}: ${node.name}`; +} +function printDescription( + node: GherkinNode & { description: string; location: Location }, + hardlineIfNoDescription: boolean +): Doc { if (!node.description) { - return hardlineIfDescription ? printHardline() : ''; + return hardlineIfNoDescription ? printHardline() : ''; } - return [ - join( - printHardline(), - node.description.split('\n').map((s) => s.trim()) - ), - printHardline(), - printHardline(), - ]; + return [printTextBloc(node.description), printHardline()]; } /** @@ -306,8 +298,6 @@ function findNodeForCommentInAST( } return null; - - return null; } function stepNeedsHardline( @@ -344,6 +334,35 @@ function stepNeedsHardline( ); } +function printTextBloc(text: string, doIndent: boolean = false) { + const filledHeading = fill( + text + // replace all line break by a hardline + .split('\n') + .map( + ( + l: string + ): Array => { + const splittedLine: Array = l + .trim() + // replace all spaces by a line, that will break only if it overflow thanks to the `fill` method + .split(' ') + .map((l): Array => [l, line]) + .flat(); + + return [...splittedLine, hardline]; + } + ) + .flat() + ); + + if (!doIndent) { + return filledHeading; + } + + return indent(filledHeading); +} + const gherkinAstPrinter: Printer> = { printComment: (path, options) => { const node = path.getValue(); @@ -457,7 +476,7 @@ const gherkinAstPrinter: Printer> = { print: (path, options, print) => { const node = path.getValue(); - // console.log({ node, isDocument: node instanceof TypedGherkinDocument }); + // console.log(node); if (node instanceof TypedGherkinDocument) { // console.log(node) @@ -478,11 +497,11 @@ const gherkinAstPrinter: Printer> = { ? ['# language: ' + node.language, printHardline()] : '', printTags(path, node), - `${node.keyword}: ${node.name}`, + printNodeHeading(node), indent([ printHardline(), - printDescription(path, node, true), + printDescription(node, true), // @ts-expect-error TODO path should be recognized as an AstPath join(printTwoHardlines(), path.map(print, 'children')), @@ -502,7 +521,6 @@ const gherkinAstPrinter: Printer> = { // @ts-expect-error TODO path should be recognized as an AstPath return path.call(print, 'rule'); } else { - console.log(node); throw new Error( `unhandled case where ${ node instanceof TypedFeatureChild @@ -516,13 +534,13 @@ const gherkinAstPrinter: Printer> = { } else if (node instanceof TypedBackground) { // console.log(node.steps); return [ - `${node.keyword}: ${node.name}`, + printNodeHeading(node), node.description || node.steps.length > 0 ? indent([ printHardline(), - printDescription(path, node, false), + printDescription(node, false), // @ts-expect-error TODO path should be recognized as an AstPath - join(printHardline(), path.map(print, 'steps')), + path.map(print, 'steps'), ]) : '', ]; @@ -530,10 +548,10 @@ const gherkinAstPrinter: Printer> = { // console.log(node); return [ printTags(path, node), - `${node.keyword}: ${node.name}`, + printNodeHeading(node), indent([ printHardline(), - printDescription(path, node, false), + printDescription(node, false), // @ts-expect-error TODO path should be recognized as an AstPath join(printHardline(), path.map(print, 'steps')), @@ -591,11 +609,11 @@ const gherkinAstPrinter: Printer> = { return [ printTags(path, node), - `${node.keyword}: ${node.name}`, + printNodeHeading(node), indent([ printHardline(), - printDescription(path, node, false), + printDescription(node, false), join( printHardline(), [ @@ -636,22 +654,30 @@ const gherkinAstPrinter: Printer> = { if (node instanceof TypedDocString) { const { content, mediaType } = node; - return async (textToDoc): Promise => { - let doc : doc.builders.Doc | null = null; + return async (textToDoc): Promise => { + let doc: doc.builders.Doc | null = null; if (mediaType) { // try applying the prettier parser for the media type - doc = await textToDoc(content, { ...options, parser: mediaType }).catch(() => null); + doc = await textToDoc(content, { + ...options, + parser: mediaType, + }).catch(() => null); // if the parser failed for xml, try with the html parser if (!doc && mediaType === 'xml') { - doc = await textToDoc(content, { ...options, parser: 'html' }).catch(() => null); + doc = await textToDoc(content, { + ...options, + parser: 'html', + }).catch(() => null); } } // try applying the json parser if (!doc) { - doc = await textToDoc(content, { ...options, parser: 'json' }).catch(() => null); + doc = await textToDoc(content, { ...options, parser: 'json' }).catch( + () => null + ); } if (doc) { diff --git a/tests/plugin/__snapshots__/jsfmt.spec.mjs.snap b/tests/plugin/__snapshots__/jsfmt.spec.mjs.snap index ebe39c6..52a5dc1 100644 --- a/tests/plugin/__snapshots__/jsfmt.spec.mjs.snap +++ b/tests/plugin/__snapshots__/jsfmt.spec.mjs.snap @@ -20,7 +20,8 @@ Feature: A comment before a "Given" should stay before the "Given". options: {} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Feature: A comment before a "Given" should stay before the "Given". - The blankline should be before the comment and not between the comment and the "Given". + The blankline should be before the comment and not between the comment and + the "Given". Scenario: Given I have a feature file @@ -38,7 +39,8 @@ options: { } ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Feature: A comment before a "Given" should stay before the "Given". - The blankline should be before the comment and not between the comment and the "Given". + The blankline should be before the comment and not between the comment and + the "Given". Scenario: Given I have a feature file @@ -776,3 +778,130 @@ Feature: Escaped pipes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ `; + +exports[`very_long_comments.feature 1`] = ` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +source +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Feature: A very long feature name should be broken after printWidth Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vestibulum eu urna ac placerat. Nulla vehicula id mi vitae tristique. Donec imperdiet tincidunt tellus, ac imperdiet metus venenatis sed. Cras quis est tempor justo luctus rutrum. Praesent accumsan, leo in commodo eleifend, lorem ex accumsan dui, nec rutrum lorem leo vitae neque. Fusce nec magna in arcu imperdiet tincidunt. In auctor velit ante, et interdum tellus commodo a. Donec in euismod tellus. Donec in nibh sit amet magna sagittis mollis accumsan ac felis. Proin suscipit turpis id ornare maximus. + Phasellus ultrices mattis erat vitae consectetur. Mauris nec volutpat tortor. Duis maximus ipsum ac felis ultricies scelerisque. Sed vehicula ex vitae iaculis rhoncus. Etiam tortor quam, scelerisque non interdum imperdiet, euismod id dui. Etiam tristique fringilla bibendum. Vivamus efficitur elit sed augue lacinia blandit. In bibendum eget lorem quis pretium. Quisque sapien est, feugiat ornare dictum nec, rutrum sed quam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Pellentesque tincidunt vehicula leo in tristique. Sed ut gravida urna, pulvinar aliquam eros. Suspendisse sed leo sed mi consequat fringilla. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. + + Scenario: Morbi ligula lorem, mollis quis porttitor non, hendrerit in purus. Aenean a dui malesuada, euismod lacus sit amet, mollis ante. Vestibulum purus diam, malesuada a pulvinar a, ullamcorper nec odio. Nam volutpat faucibus pulvinar. Mauris maximus enim nec quam rhoncus, at semper nunc sagittis. In finibus, libero quis tristique viverra, magna erat mattis tortor, eu accumsan felis risus vitae diam. Praesent eleifend hendrerit tempor. Quisque nec posuere justo. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo vehicula sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in ipsum in quam viverra convallis. Sed et tellus nec neque luctus bibendum ac et augue. Nunc tincidunt interdum ex in mollis. Donec faucibus interdum massa, vel congue lectus molestie at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fringilla justo vitae ultricies pretium. Nam pulvinar sem risus, a sagittis mi fermentum ac. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pretium eget leo ac luctus. Etiam tristique commodo libero, at egestas lacus pharetra id. Curabitur nec sapien id mauris viverra tempus. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo vehicula sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in ipsum in quam viverra convallis. Sed et tellus nec neque luctus bibendum ac et augue. Nunc tincidunt interdum ex in mollis. Donec faucibus interdum massa, vel congue lectus molestie at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fringilla justo vitae ultricies pretium. Nam pulvinar sem risus, a sagittis mi fermentum ac. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pretium eget leo ac luctus. Etiam tristique commodo libero, at egestas lacus pharetra id. Curabitur nec sapien id mauris viverra tempus. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo vehicula sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in ipsum in quam viverra convallis. Sed et tellus nec neque luctus bibendum ac et augue. Nunc tincidunt interdum ex in mollis. Donec faucibus interdum massa, vel congue lectus molestie at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fringilla justo vitae ultricies pretium. Nam pulvinar sem risus, a sagittis mi fermentum ac. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pretium eget leo ac luctus. Etiam tristique commodo libero, at egestas lacus pharetra id. Curabitur nec sapien id mauris viverra tempus. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +options: {} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Feature: A very long feature name should be broken after printWidth Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vestibulum eu urna ac placerat. Nulla vehicula id mi vitae tristique. Donec imperdiet tincidunt tellus, ac imperdiet metus venenatis sed. Cras quis est tempor justo luctus rutrum. Praesent accumsan, leo in commodo eleifend, lorem ex accumsan dui, nec rutrum lorem leo vitae neque. Fusce nec magna in arcu imperdiet tincidunt. In auctor velit ante, et interdum tellus commodo a. Donec in euismod tellus. Donec in nibh sit amet magna sagittis mollis accumsan ac felis. Proin suscipit turpis id ornare maximus. + Phasellus ultrices mattis erat vitae consectetur. Mauris nec volutpat + tortor. Duis maximus ipsum ac felis ultricies scelerisque. Sed vehicula ex + vitae iaculis rhoncus. Etiam tortor quam, scelerisque non interdum + imperdiet, euismod id dui. Etiam tristique fringilla bibendum. Vivamus + efficitur elit sed augue lacinia blandit. In bibendum eget lorem quis + pretium. Quisque sapien est, feugiat ornare dictum nec, rutrum sed quam. + Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere + cubilia curae; Pellentesque tincidunt vehicula leo in tristique. Sed ut + gravida urna, pulvinar aliquam eros. Suspendisse sed leo sed mi consequat + fringilla. Pellentesque habitant morbi tristique senectus et netus et + malesuada fames ac turpis egestas. + + Scenario: Morbi ligula lorem, mollis quis porttitor non, hendrerit in purus. Aenean a dui malesuada, euismod lacus sit amet, mollis ante. Vestibulum purus diam, malesuada a pulvinar a, ullamcorper nec odio. Nam volutpat faucibus pulvinar. Mauris maximus enim nec quam rhoncus, at semper nunc sagittis. In finibus, libero quis tristique viverra, magna erat mattis tortor, eu accumsan felis risus vitae diam. Praesent eleifend hendrerit tempor. Quisque nec posuere justo. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis + erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo + vehicula sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in + ipsum in quam viverra convallis. Sed et tellus nec neque luctus bibendum + ac et augue. Nunc tincidunt interdum ex in mollis. Donec faucibus + interdum massa, vel congue lectus molestie at. Lorem ipsum dolor sit + amet, consectetur adipiscing elit. Sed fringilla justo vitae ultricies + pretium. Nam pulvinar sem risus, a sagittis mi fermentum ac. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Sed pretium eget leo ac luctus. Etiam tristique commodo libero, at + egestas lacus pharetra id. Curabitur nec sapien id mauris viverra + tempus. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis + erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo vehicula + sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in ipsum in quam + viverra convallis. Sed et tellus nec neque luctus bibendum ac et augue. Nunc + tincidunt interdum ex in mollis. Donec faucibus interdum massa, vel congue + lectus molestie at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Sed fringilla justo vitae ultricies pretium. Nam pulvinar sem risus, a sagittis + mi fermentum ac. Orci varius natoque penatibus et magnis dis parturient montes, + nascetur ridiculus mus. Sed pretium eget leo ac luctus. Etiam tristique commodo + libero, at egestas lacus pharetra id. Curabitur nec sapien id mauris viverra + tempus. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis + erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo + vehicula sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in + ipsum in quam viverra convallis. Sed et tellus nec neque luctus bibendum + ac et augue. Nunc tincidunt interdum ex in mollis. Donec faucibus + interdum massa, vel congue lectus molestie at. Lorem ipsum dolor sit + amet, consectetur adipiscing elit. Sed fringilla justo vitae ultricies + pretium. Nam pulvinar sem risus, a sagittis mi fermentum ac. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Sed pretium eget leo ac luctus. Etiam tristique commodo libero, at + egestas lacus pharetra id. Curabitur nec sapien id mauris viverra + tempus. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +options: { + "forceNewlineBetweenStepBlocks": true +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Feature: A very long feature name should be broken after printWidth Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vestibulum eu urna ac placerat. Nulla vehicula id mi vitae tristique. Donec imperdiet tincidunt tellus, ac imperdiet metus venenatis sed. Cras quis est tempor justo luctus rutrum. Praesent accumsan, leo in commodo eleifend, lorem ex accumsan dui, nec rutrum lorem leo vitae neque. Fusce nec magna in arcu imperdiet tincidunt. In auctor velit ante, et interdum tellus commodo a. Donec in euismod tellus. Donec in nibh sit amet magna sagittis mollis accumsan ac felis. Proin suscipit turpis id ornare maximus. + Phasellus ultrices mattis erat vitae consectetur. Mauris nec volutpat + tortor. Duis maximus ipsum ac felis ultricies scelerisque. Sed vehicula ex + vitae iaculis rhoncus. Etiam tortor quam, scelerisque non interdum + imperdiet, euismod id dui. Etiam tristique fringilla bibendum. Vivamus + efficitur elit sed augue lacinia blandit. In bibendum eget lorem quis + pretium. Quisque sapien est, feugiat ornare dictum nec, rutrum sed quam. + Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere + cubilia curae; Pellentesque tincidunt vehicula leo in tristique. Sed ut + gravida urna, pulvinar aliquam eros. Suspendisse sed leo sed mi consequat + fringilla. Pellentesque habitant morbi tristique senectus et netus et + malesuada fames ac turpis egestas. + + Scenario: Morbi ligula lorem, mollis quis porttitor non, hendrerit in purus. Aenean a dui malesuada, euismod lacus sit amet, mollis ante. Vestibulum purus diam, malesuada a pulvinar a, ullamcorper nec odio. Nam volutpat faucibus pulvinar. Mauris maximus enim nec quam rhoncus, at semper nunc sagittis. In finibus, libero quis tristique viverra, magna erat mattis tortor, eu accumsan felis risus vitae diam. Praesent eleifend hendrerit tempor. Quisque nec posuere justo. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis + erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo + vehicula sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in + ipsum in quam viverra convallis. Sed et tellus nec neque luctus bibendum + ac et augue. Nunc tincidunt interdum ex in mollis. Donec faucibus + interdum massa, vel congue lectus molestie at. Lorem ipsum dolor sit + amet, consectetur adipiscing elit. Sed fringilla justo vitae ultricies + pretium. Nam pulvinar sem risus, a sagittis mi fermentum ac. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Sed pretium eget leo ac luctus. Etiam tristique commodo libero, at + egestas lacus pharetra id. Curabitur nec sapien id mauris viverra + tempus. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis + erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo vehicula + sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in ipsum in quam + viverra convallis. Sed et tellus nec neque luctus bibendum ac et augue. Nunc + tincidunt interdum ex in mollis. Donec faucibus interdum massa, vel congue + lectus molestie at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Sed fringilla justo vitae ultricies pretium. Nam pulvinar sem risus, a sagittis + mi fermentum ac. Orci varius natoque penatibus et magnis dis parturient montes, + nascetur ridiculus mus. Sed pretium eget leo ac luctus. Etiam tristique commodo + libero, at egestas lacus pharetra id. Curabitur nec sapien id mauris viverra + tempus. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis + erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo + vehicula sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in + ipsum in quam viverra convallis. Sed et tellus nec neque luctus bibendum + ac et augue. Nunc tincidunt interdum ex in mollis. Donec faucibus + interdum massa, vel congue lectus molestie at. Lorem ipsum dolor sit + amet, consectetur adipiscing elit. Sed fringilla justo vitae ultricies + pretium. Nam pulvinar sem risus, a sagittis mi fermentum ac. Orci varius + natoque penatibus et magnis dis parturient montes, nascetur ridiculus + mus. Sed pretium eget leo ac luctus. Etiam tristique commodo libero, at + egestas lacus pharetra id. Curabitur nec sapien id mauris viverra + tempus. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +`; diff --git a/tests/plugin/very_long_comments.feature b/tests/plugin/very_long_comments.feature new file mode 100644 index 0000000..b109931 --- /dev/null +++ b/tests/plugin/very_long_comments.feature @@ -0,0 +1,7 @@ +Feature: A very long feature name should be broken after printWidth Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris vestibulum eu urna ac placerat. Nulla vehicula id mi vitae tristique. Donec imperdiet tincidunt tellus, ac imperdiet metus venenatis sed. Cras quis est tempor justo luctus rutrum. Praesent accumsan, leo in commodo eleifend, lorem ex accumsan dui, nec rutrum lorem leo vitae neque. Fusce nec magna in arcu imperdiet tincidunt. In auctor velit ante, et interdum tellus commodo a. Donec in euismod tellus. Donec in nibh sit amet magna sagittis mollis accumsan ac felis. Proin suscipit turpis id ornare maximus. + Phasellus ultrices mattis erat vitae consectetur. Mauris nec volutpat tortor. Duis maximus ipsum ac felis ultricies scelerisque. Sed vehicula ex vitae iaculis rhoncus. Etiam tortor quam, scelerisque non interdum imperdiet, euismod id dui. Etiam tristique fringilla bibendum. Vivamus efficitur elit sed augue lacinia blandit. In bibendum eget lorem quis pretium. Quisque sapien est, feugiat ornare dictum nec, rutrum sed quam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Pellentesque tincidunt vehicula leo in tristique. Sed ut gravida urna, pulvinar aliquam eros. Suspendisse sed leo sed mi consequat fringilla. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. + + Scenario: Morbi ligula lorem, mollis quis porttitor non, hendrerit in purus. Aenean a dui malesuada, euismod lacus sit amet, mollis ante. Vestibulum purus diam, malesuada a pulvinar a, ullamcorper nec odio. Nam volutpat faucibus pulvinar. Mauris maximus enim nec quam rhoncus, at semper nunc sagittis. In finibus, libero quis tristique viverra, magna erat mattis tortor, eu accumsan felis risus vitae diam. Praesent eleifend hendrerit tempor. Quisque nec posuere justo. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo vehicula sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in ipsum in quam viverra convallis. Sed et tellus nec neque luctus bibendum ac et augue. Nunc tincidunt interdum ex in mollis. Donec faucibus interdum massa, vel congue lectus molestie at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fringilla justo vitae ultricies pretium. Nam pulvinar sem risus, a sagittis mi fermentum ac. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pretium eget leo ac luctus. Etiam tristique commodo libero, at egestas lacus pharetra id. Curabitur nec sapien id mauris viverra tempus. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo vehicula sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in ipsum in quam viverra convallis. Sed et tellus nec neque luctus bibendum ac et augue. Nunc tincidunt interdum ex in mollis. Donec faucibus interdum massa, vel congue lectus molestie at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fringilla justo vitae ultricies pretium. Nam pulvinar sem risus, a sagittis mi fermentum ac. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pretium eget leo ac luctus. Etiam tristique commodo libero, at egestas lacus pharetra id. Curabitur nec sapien id mauris viverra tempus. + Maecenas ullamcorper porta sapien. Vestibulum id ex fermentum, convallis erat ut, egestas sem. Mauris tristique massa velit, id feugiat justo vehicula sodales. Morbi mattis ipsum vel leo varius venenatis. Etiam in ipsum in quam viverra convallis. Sed et tellus nec neque luctus bibendum ac et augue. Nunc tincidunt interdum ex in mollis. Donec faucibus interdum massa, vel congue lectus molestie at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed fringilla justo vitae ultricies pretium. Nam pulvinar sem risus, a sagittis mi fermentum ac. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed pretium eget leo ac luctus. Etiam tristique commodo libero, at egestas lacus pharetra id. Curabitur nec sapien id mauris viverra tempus.