Merge pull request #1425 from spopida/bug/1415_erd_empty_label_not_working

Ensure empty quoted relationship labels are accepted in ER diagrams
This commit is contained in:
Knut Sveidqvist 2020-05-27 19:30:21 +02:00 committed by GitHub
commit 7a7e8fe741
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 5 deletions

View File

@ -88,4 +88,17 @@ describe('Entity Relationship Diagram', () => {
); );
cy.get('svg'); 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');
});
}); });

View File

@ -1,14 +1,11 @@
%lex %lex
%x string
%options case-insensitive %options case-insensitive
%% %%
\s+ /* skip whitespace */ \s+ /* skip whitespace */
[\s]+ return 'SPACE'; [\s]+ return 'SPACE';
["] { this.begin("string");} \"[^"]*\" return 'WORD';
<string>["] { this.popState(); }
<string>[^"]* { return 'STR'; }
"erDiagram" return 'ER_DIAGRAM'; "erDiagram" return 'ER_DIAGRAM';
\|o return 'ZERO_OR_ONE'; \|o return 'ZERO_OR_ONE';
\}o return 'ZERO_OR_MORE'; \}o return 'ZERO_OR_MORE';
@ -73,7 +70,7 @@ relType
; ;
role role
: 'STR' { $$ = $1; } : 'WORD' { $$ = $1.replace(/"/g, ''); }
| 'ALPHANUM' { $$ = $1; } | 'ALPHANUM' { $$ = $1; }
; ;
%% %%

View File

@ -252,4 +252,21 @@ describe('when parsing ER diagram it...', function() {
}).toThrowError(); }).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');
});
}); });