diff --git a/jdl/parsing/jdl-parser.js b/jdl/parsing/jdl-parser.js index ce6e6fabcbc..f4fe10f303a 100644 --- a/jdl/parsing/jdl-parser.js +++ b/jdl/parsing/jdl-parser.js @@ -351,8 +351,11 @@ module.exports = class JDLParser extends CstParser { enumProp() { this.RULE('enumProp', () => { - this.CONSUME(LexerTokens.NAME, { LABEL: 'enumPropKey' }); this.OPTION(() => { + this.CONSUME(LexerTokens.JAVADOC); + }); + this.CONSUME(LexerTokens.NAME, { LABEL: 'enumPropKey' }); + this.OPTION1(() => { this.CONSUME(LexerTokens.LPAREN); this.OR([ { ALT: () => this.CONSUME2(LexerTokens.STRING, { LABEL: 'enumPropValueWithQuotes' }) }, @@ -360,6 +363,9 @@ module.exports = class JDLParser extends CstParser { ]); this.CONSUME(LexerTokens.RPAREN); }); + this.OPTION2(() => { + this.CONSUME1(LexerTokens.JAVADOC); + }); }); } diff --git a/test/jdl/grammar/grammar.spec.js b/test/jdl/grammar/grammar.spec.js index d9c2b42c941..f12980a0e6f 100644 --- a/test/jdl/grammar/grammar.spec.js +++ b/test/jdl/grammar/grammar.spec.js @@ -1060,6 +1060,146 @@ entity A { }); }); }); + + context('without custom values but with comments', () => { + let parsedEnum; + + before(() => { + const content = parseFromContent( + `enum MyEnum { + /** some comment */FRANCE /** some comment */, + /** some comment */ ITALY /** some comment */, + ENGLAND /** some comment */, + ICELAND/** some comment */, + /** some comment */IRELAND, + /** some comment */ CANADA +} +` + ); + parsedEnum = content.enums[0]; + }); + + it('should parse it', () => { + expect(parsedEnum).to.deep.equal({ + name: 'MyEnum', + values: [ + { + key: 'FRANCE', + }, + { + key: 'ITALY', + }, + { + key: 'ENGLAND', + }, + { + key: 'ICELAND', + }, + { + key: 'IRELAND', + }, + { + key: 'CANADA', + }, + ], + }); + }); + }); + + context('with custom values containing spaces and with comments', () => { + let parsedEnum; + + before(() => { + const content = parseFromContent( + `enum MyEnum { + /** some comment */FRANCE ("cheese and wine country") /** some comment */, + /** some comment */ ITALY /** some comment */, + ENGLAND ("not a tea country") /** some comment */, + ICELAND/** some comment */, + /** some comment */IRELAND, + /** some comment */ CANADA +} +` + ); + parsedEnum = content.enums[0]; + }); + + it('should parse it', () => { + expect(parsedEnum).to.deep.equal({ + name: 'MyEnum', + values: [ + { + key: 'FRANCE', + value: 'cheese and wine country', + }, + { + key: 'ITALY', + }, + { + key: 'ENGLAND', + value: 'not a tea country', + }, + { + key: 'ICELAND', + }, + { + key: 'IRELAND', + }, + { + key: 'CANADA', + }, + ], + }); + }); + }); + + context('with custom values containing underscores and with comments', () => { + let parsedEnum; + + before(() => { + const content = parseFromContent( + `enum MyEnum { + /** some comment */FRANCE ("cheese_and_wine_country") /** some comment */, + /** some comment */ ITALY /** some comment */, + ENGLAND ("not_a_tea_country") /** some comment */, + ICELAND/** some comment */, + /** some comment */IRELAND, + /** some comment */ CANADA +} +` + ); + parsedEnum = content.enums[0]; + }); + + it('should parse it', () => { + expect(parsedEnum).to.deep.equal({ + name: 'MyEnum', + values: [ + { + key: 'FRANCE', + value: 'cheese_and_wine_country', + }, + { + key: 'ITALY', + }, + { + key: 'ENGLAND', + value: 'not_a_tea_country', + }, + { + key: 'ICELAND', + }, + { + key: 'IRELAND', + }, + { + key: 'CANADA', + }, + ], + }); + }); + }); + context('without values', () => { context('without spaces', () => { let parsedEnum;