mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-10 02:49:40 +02:00
fix: relationship label to be optional in ER diagram syntax
on-behalf-of: @Mermaid-Chart <hello@mermaidchart.com>
This commit is contained in:
@@ -322,6 +322,18 @@ ORDER ||--|{ LINE-ITEM : contains
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render an ER diagram without labels also', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
erDiagram
|
||||||
|
BOOK }|..|{ AUTHOR
|
||||||
|
BOOK }|..|{ GENRE
|
||||||
|
AUTHOR }|..|{ GENRE
|
||||||
|
`,
|
||||||
|
{ logLevel: 1 }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it('should render relationship labels with line breaks', () => {
|
it('should render relationship labels with line breaks', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
|
@@ -94,6 +94,22 @@ start
|
|||||||
: 'ER_DIAGRAM' document 'EOF' { /*console.log('finished parsing');*/ }
|
: 'ER_DIAGRAM' document 'EOF' { /*console.log('finished parsing');*/ }
|
||||||
;
|
;
|
||||||
|
|
||||||
|
relationship
|
||||||
|
: ENTITY relationType ENTITY maybeRole
|
||||||
|
{
|
||||||
|
yy.addRelationship($1, $4, $3, $2);
|
||||||
|
};
|
||||||
|
|
||||||
|
maybeRole
|
||||||
|
: COLON role
|
||||||
|
{
|
||||||
|
$$ = $2;
|
||||||
|
}
|
||||||
|
| /* empty */
|
||||||
|
{
|
||||||
|
$$ = '';
|
||||||
|
};
|
||||||
|
|
||||||
document
|
document
|
||||||
: /* empty */ { $$ = [] }
|
: /* empty */ { $$ = [] }
|
||||||
| document line {$1.push($2);$$ = $1}
|
| document line {$1.push($2);$$ = $1}
|
||||||
@@ -108,32 +124,34 @@ line
|
|||||||
|
|
||||||
|
|
||||||
statement
|
statement
|
||||||
: entityName relSpec entityName COLON role
|
: entityName relSpec entityName maybeRole
|
||||||
{
|
{
|
||||||
yy.addEntity($1);
|
yy.addEntity($1);
|
||||||
yy.addEntity($3);
|
yy.addEntity($3);
|
||||||
yy.addRelationship($1, $5, $3, $2);
|
yy.addRelationship($1, $4, $3, $2);
|
||||||
}
|
}
|
||||||
| entityName STYLE_SEPARATOR idList relSpec entityName STYLE_SEPARATOR idList COLON role
|
| entityName STYLE_SEPARATOR idList relSpec entityName STYLE_SEPARATOR idList maybeRole
|
||||||
|
|
||||||
{
|
{
|
||||||
yy.addEntity($1);
|
yy.addEntity($1);
|
||||||
yy.addEntity($5);
|
yy.addEntity($5);
|
||||||
yy.addRelationship($1, $9, $5, $4);
|
yy.addRelationship($1, $8, $5, $4);
|
||||||
yy.setClass([$1], $3);
|
yy.setClass([$1], $3);
|
||||||
yy.setClass([$5], $7);
|
yy.setClass([$5], $7);
|
||||||
}
|
}
|
||||||
| entityName STYLE_SEPARATOR idList relSpec entityName COLON role
|
| entityName STYLE_SEPARATOR idList relSpec entityName maybeRole
|
||||||
|
|
||||||
{
|
{
|
||||||
yy.addEntity($1);
|
yy.addEntity($1);
|
||||||
yy.addEntity($5);
|
yy.addEntity($5);
|
||||||
yy.addRelationship($1, $7, $5, $4);
|
yy.addRelationship($1, $6, $5, $4);
|
||||||
yy.setClass([$1], $3);
|
yy.setClass([$1], $3);
|
||||||
}
|
}
|
||||||
| entityName relSpec entityName STYLE_SEPARATOR idList COLON role
|
| entityName relSpec entityName STYLE_SEPARATOR idList maybeRole
|
||||||
{
|
{
|
||||||
yy.addEntity($1);
|
yy.addEntity($1);
|
||||||
yy.addEntity($3);
|
yy.addEntity($3);
|
||||||
yy.addRelationship($1, $7, $3, $2);
|
yy.addRelationship($1, $6, $3, $2);
|
||||||
yy.setClass([$3], $5);
|
yy.setClass([$3], $5);
|
||||||
}
|
}
|
||||||
| entityName BLOCK_START attributes BLOCK_STOP
|
| entityName BLOCK_START attributes BLOCK_STOP
|
||||||
|
@@ -981,6 +981,12 @@ describe('when parsing ER diagram it...', function () {
|
|||||||
expect(rels[0].roleA).toBe('places');
|
expect(rels[0].roleA).toBe('places');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should allow label as optional', function () {
|
||||||
|
erDiagram.parser.parse('erDiagram\nCUSTOMER ||--|{ ORDER');
|
||||||
|
const rels = erDb.getRelationships();
|
||||||
|
expect(rels[0].roleA).toBe('');
|
||||||
|
});
|
||||||
|
|
||||||
it('should represent parent-child relationship correctly', function () {
|
it('should represent parent-child relationship correctly', function () {
|
||||||
erDiagram.parser.parse('erDiagram\nPROJECT u--o{ TEAM_MEMBER : "parent"');
|
erDiagram.parser.parse('erDiagram\nPROJECT u--o{ TEAM_MEMBER : "parent"');
|
||||||
const rels = erDb.getRelationships();
|
const rels = erDb.getRelationships();
|
||||||
|
Reference in New Issue
Block a user