From 183fc35fea95d9d78bf9b9c1200d6ee33cc4035b Mon Sep 17 00:00:00 2001 From: Elliot Nelson Date: Mon, 19 Sep 2022 00:04:23 -0400 Subject: [PATCH] Support EMPTYSTR in jison parser, add unit tests for git graph parser --- src/diagrams/git/gitGraphParserV2.spec.js | 32 +++++++++++++++++++++++ src/diagrams/git/parser/gitGraph.jison | 3 +++ 2 files changed, 35 insertions(+) diff --git a/src/diagrams/git/gitGraphParserV2.spec.js b/src/diagrams/git/gitGraphParserV2.spec.js index 8db1d6074..7aab8fc7c 100644 --- a/src/diagrams/git/gitGraphParserV2.spec.js +++ b/src/diagrams/git/gitGraphParserV2.spec.js @@ -627,6 +627,38 @@ describe('when parsing a gitGraph', function () { expect(commits[cherryPickCommitID].branch).toBe('main'); }); + it('should support cherry-picking commits with custom tag', function () { + const str = `gitGraph + commit id: "ZERO" + branch develop + commit id:"A" + checkout main + cherry-pick id:"A" tag:"MyTag" + `; + + parser.parse(str); + const commits = parser.yy.getCommits(); + const cherryPickCommitID = Object.keys(commits)[2]; + expect(commits[cherryPickCommitID].tag).toBe('MyTag'); + expect(commits[cherryPickCommitID].branch).toBe('main'); + }); + + it('should support cherry-picking commits with no tag', function () { + const str = `gitGraph + commit id: "ZERO" + branch develop + commit id:"A" + checkout main + cherry-pick id:"A" tag:"" + `; + + parser.parse(str); + const commits = parser.yy.getCommits(); + const cherryPickCommitID = Object.keys(commits)[2]; + expect(commits[cherryPickCommitID].tag).toBe(''); + expect(commits[cherryPickCommitID].branch).toBe('main'); + }); + it('should throw error when try to branch existing branch: main', function () { const str = `gitGraph commit diff --git a/src/diagrams/git/parser/gitGraph.jison b/src/diagrams/git/parser/gitGraph.jison index 74d785f83..dbe220e15 100644 --- a/src/diagrams/git/parser/gitGraph.jison +++ b/src/diagrams/git/parser/gitGraph.jison @@ -57,6 +57,7 @@ checkout(?=\s|$) return 'CHECKOUT'; "options"\r?\n this.begin("options"); // [ \r\n\t]+"end" this.popState(); // not used anymore in the renderer, fixed for backward compatibility [\s\S]+(?=[ \r\n\t]+"end") return 'OPT'; // +["]["] return 'EMPTYSTR'; ["] this.begin("string"); ["] this.popState(); [^"]* return 'STR'; @@ -119,7 +120,9 @@ branchStatement cherryPickStatement : CHERRY_PICK COMMIT_ID STR {yy.cherryPick($3, '', undefined)} | CHERRY_PICK COMMIT_ID STR COMMIT_TAG STR {yy.cherryPick($3, '', $5)} + | CHERRY_PICK COMMIT_ID STR COMMIT_TAG EMPTYSTR {yy.cherryPick($3, '', '')} | CHERRY_PICK COMMIT_TAG STR COMMIT_ID STR {yy.cherryPick($5, '', $3)} + | CHERRY_PICK COMMIT_TAG EMPTYSTR COMMIT_ID STR {yy.cherryPick($3, '', '')} ; mergeStatement