From f1c05bc9091aba27ecb84a1141a76f542315cf4f Mon Sep 17 00:00:00 2001 From: Adrian Hall Date: Sat, 23 May 2020 13:33:44 +0100 Subject: [PATCH] Ensure empty quoted relationship labels are accepted in ER diagrams --- cypress/integration/rendering/erDiagram.spec.js | 13 +++++++++++++ src/diagrams/er/parser/erDiagram.jison | 7 ++----- src/diagrams/er/parser/erDiagram.spec.js | 17 +++++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/cypress/integration/rendering/erDiagram.spec.js b/cypress/integration/rendering/erDiagram.spec.js index dcfcdc11a..e965ca57d 100644 --- a/cypress/integration/rendering/erDiagram.spec.js +++ b/cypress/integration/rendering/erDiagram.spec.js @@ -88,4 +88,17 @@ describe('Entity Relationship Diagram', () => { ); cy.get('svg'); }); + + it('should render an ER diagram with blank or empty labels', () => { + imgSnapshotTest( + ` + erDiagram + BOOK }|..|{ AUTHOR : "" + BOOK }|..|{ GENRE : " " + AUTHOR }|..|{ GENRE : " " + `, + {logLevel : 1} + ); + cy.get('svg'); + }); }); diff --git a/src/diagrams/er/parser/erDiagram.jison b/src/diagrams/er/parser/erDiagram.jison index 9cacfc9f4..ae93ae239 100644 --- a/src/diagrams/er/parser/erDiagram.jison +++ b/src/diagrams/er/parser/erDiagram.jison @@ -1,14 +1,11 @@ %lex -%x string %options case-insensitive %% \s+ /* skip whitespace */ [\s]+ return 'SPACE'; -["] { this.begin("string");} -["] { this.popState(); } -[^"]* { return 'STR'; } +\"[^"]*\" return 'WORD'; "erDiagram" return 'ER_DIAGRAM'; \|o return 'ZERO_OR_ONE'; \}o return 'ZERO_OR_MORE'; @@ -73,7 +70,7 @@ relType ; role - : 'STR' { $$ = $1; } + : 'WORD' { $$ = $1.replace(/"/g, ''); } | 'ALPHANUM' { $$ = $1; } ; %% diff --git a/src/diagrams/er/parser/erDiagram.spec.js b/src/diagrams/er/parser/erDiagram.spec.js index f650c7184..2dc49415e 100644 --- a/src/diagrams/er/parser/erDiagram.spec.js +++ b/src/diagrams/er/parser/erDiagram.spec.js @@ -252,4 +252,21 @@ describe('when parsing ER diagram it...', function() { }).toThrowError(); }); + it('should allow an empty quoted label', function() { + erDiagram.parser.parse('erDiagram\nCUSTOMER ||--|{ ORDER : ""'); + const rels = erDb.getRelationships(); + expect(rels[0].roleA).toBe(''); + }); + + it('should allow an non-empty quoted label', function() { + erDiagram.parser.parse('erDiagram\nCUSTOMER ||--|{ ORDER : "places"'); + const rels = erDb.getRelationships(); + expect(rels[0].roleA).toBe('places'); + }); + + it('should allow an non-empty unquoted label', function() { + erDiagram.parser.parse('erDiagram\nCUSTOMER ||--|{ ORDER : places'); + const rels = erDb.getRelationships(); + expect(rels[0].roleA).toBe('places'); + }); });