diff --git a/cypress/integration/rendering/gantt.spec.js b/cypress/integration/rendering/gantt.spec.js index 73ff4ee00..4abde9d44 100644 --- a/cypress/integration/rendering/gantt.spec.js +++ b/cypress/integration/rendering/gantt.spec.js @@ -583,4 +583,106 @@ describe('Gantt diagram', () => { {} ); }); + + it("should render when there's a semicolon in the title", () => { + imgSnapshotTest( + ` + gantt + title ;Gantt With a Semicolon in the Title + dateFormat YYYY-MM-DD + section Section + A task :a1, 2014-01-01, 30d + Another task :after a1 , 20d + section Another + Task in sec :2014-01-12 , 12d + another task : 24d + `, + {} + ); + }); + + it("should render when there's a semicolon in a section is true", () => { + imgSnapshotTest( + ` + gantt + title Gantt Digram + dateFormat YYYY-MM-DD + section ;Section With a Semicolon + A task :a1, 2014-01-01, 30d + Another task :after a1 , 20d + section Another + Task in sec :2014-01-12 , 12d + another task : 24d + `, + {} + ); + }); + + it("should render when there's a semicolon in the task data", () => { + imgSnapshotTest( + ` + gantt + title Gantt Digram + dateFormat YYYY-MM-DD + section Section + ;A task with a semiclon :a1, 2014-01-01, 30d + Another task :after a1 , 20d + section Another + Task in sec :2014-01-12 , 12d + another task : 24d + `, + {} + ); + }); + + it("should render when there's a hashtag in the title", () => { + imgSnapshotTest( + ` + gantt + title #Gantt With a Hashtag in the Title + dateFormat YYYY-MM-DD + section Section + A task :a1, 2014-01-01, 30d + Another task :after a1 , 20d + section Another + Task in sec :2014-01-12 , 12d + another task : 24d + `, + {} + ); + }); + + it("should render when there's a hashtag in a section is true", () => { + imgSnapshotTest( + ` + gantt + title Gantt Digram + dateFormat YYYY-MM-DD + section #Section With a Hashtag + A task :a1, 2014-01-01, 30d + Another task :after a1 , 20d + section Another + Task in sec :2014-01-12 , 12d + another task : 24d + `, + {} + ); + }); + + it("should render when there's a hashtag in the task data", () => { + imgSnapshotTest( + ` + gantt + title Gantt Digram + dateFormat YYYY-MM-DD + section Section + #A task with a hashtag :a1, 2014-01-01, 30d + Another task :after a1 , 20d + section Another + Task in sec :2014-01-12 , 12d + another task : 24d + `, + {} + ); + }); }); diff --git a/demos/gantt.html b/demos/gantt.html index 88f52ef5c..9c82371ab 100644 --- a/demos/gantt.html +++ b/demos/gantt.html @@ -30,6 +30,21 @@
+ gantt + title #; Gantt Diagrams Allow Semicolons and Hashtags #;! + accTitle: A simple sample gantt diagram + accDescr: 2 sections with 2 tasks each, from 2014 + dateFormat YYYY-MM-DD + section #;Section + #;A task :a1, 2014-01-01, 30d + #;Another task :after a1 , 20d + section #;Another + Task in sec :2014-01-12 , 12d + another task : 24d ++
gantt title Airworks roadmap diff --git a/packages/mermaid/src/diagrams/gantt/parser/gantt.spec.js b/packages/mermaid/src/diagrams/gantt/parser/gantt.spec.js index e7ce1ffa4..ae5f74249 100644 --- a/packages/mermaid/src/diagrams/gantt/parser/gantt.spec.js +++ b/packages/mermaid/src/diagrams/gantt/parser/gantt.spec.js @@ -28,8 +28,12 @@ describe('when parsing a gantt diagram it', function () { }); it('should handle a title definition', function () { const str = 'gantt\ndateFormat yyyy-mm-dd\ntitle Adding gantt diagram functionality to mermaid'; + const semi = 'gantt\ndateFormat yyyy-mm-dd\ntitle ;Gantt diagram titles support semicolons'; + const hash = 'gantt\ndateFormat yyyy-mm-dd\ntitle #Gantt diagram titles support hashtags'; expect(parserFnConstructor(str)).not.toThrow(); + expect(parserFnConstructor(semi)).not.toThrow(); + expect(parserFnConstructor(hash)).not.toThrow(); }); it('should handle an excludes definition', function () { const str = @@ -53,7 +57,23 @@ describe('when parsing a gantt diagram it', function () { 'excludes weekdays 2019-02-01\n' + 'section Documentation'; + const semi = + 'gantt\n' + + 'dateFormat yyyy-mm-dd\n' + + 'title Adding gantt diagram functionality to mermaid\n' + + 'excludes weekdays 2019-02-01\n' + + 'section ;Documentation'; + + const hash = + 'gantt\n' + + 'dateFormat yyyy-mm-dd\n' + + 'title Adding gantt diagram functionality to mermaid\n' + + 'excludes weekdays 2019-02-01\n' + + 'section #Documentation'; + expect(parserFnConstructor(str)).not.toThrow(); + expect(parserFnConstructor(semi)).not.toThrow(); + expect(parserFnConstructor(hash)).not.toThrow(); }); it('should handle multiline section titles with different line breaks', function () { const str = @@ -73,7 +93,23 @@ describe('when parsing a gantt diagram it', function () { 'section Documentation\n' + 'Design jison grammar:des1, 2014-01-01, 2014-01-04'; + const semi = + 'gantt\n' + + 'dateFormat YYYY-MM-DD\n' + + 'title Adding gantt diagram functionality to mermaid\n' + + 'section Documentation\n' + + ';Design jison grammar:des1, 2014-01-01, 2014-01-04'; + + const hash = + 'gantt\n' + + 'dateFormat YYYY-MM-DD\n' + + 'title Adding gantt diagram functionality to mermaid\n' + + 'section Documentation\n' + + '#Design jison grammar:des1, 2014-01-01, 2014-01-04'; + expect(parserFnConstructor(str)).not.toThrow(); + expect(parserFnConstructor(semi)).not.toThrow(); + expect(parserFnConstructor(hash)).not.toThrow(); const tasks = parser.yy.getTasks();