mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-30 13:46:43 +02:00
Initial checkin
This commit is contained in:
8
.vscode/settings.json
vendored
8
.vscode/settings.json
vendored
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"typescript.format.enable": false,
|
|
||||||
"typescript.reportStyleChecksAsWarnings": false,
|
|
||||||
"typescript.validate.enable": false,
|
|
||||||
"javascript.validate.enable": false,
|
|
||||||
"editor.formatOnSave": false,
|
|
||||||
"editor.snippetSuggestions": "top"
|
|
||||||
}
|
|
@@ -190,7 +190,7 @@ describe('Flowcart', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('9: should render subgraphs with a title startign with a digit', () => {
|
it('9: should render subgraphs with a title starting with a digit', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
graph TB
|
graph TB
|
||||||
@@ -237,7 +237,7 @@ describe('Flowcart', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('11: should render a flowchart with ling sames and class definitoins', () => {
|
it('11: should render a flowchart with long names and class definitions', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`graph LR
|
`graph LR
|
||||||
sid-B3655226-6C29-4D00-B685-3D5C734DC7E1["
|
sid-B3655226-6C29-4D00-B685-3D5C734DC7E1["
|
||||||
|
@@ -2,13 +2,13 @@
|
|||||||
import { parser } from './parser/classDiagram';
|
import { parser } from './parser/classDiagram';
|
||||||
import classDb from './classDb';
|
import classDb from './classDb';
|
||||||
|
|
||||||
describe('class diagram, ', function() {
|
describe('class diagram, ', function () {
|
||||||
describe('when parsing an info graph it', function() {
|
describe('when parsing an info graph it', function () {
|
||||||
beforeEach(function() {
|
beforeEach(function () {
|
||||||
parser.yy = classDb;
|
parser.yy = classDb;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle relation definitions', function() {
|
it('should handle relation definitions', function () {
|
||||||
const str =
|
const str =
|
||||||
'classDiagram\n' +
|
'classDiagram\n' +
|
||||||
'Class01 <|-- Class02\n' +
|
'Class01 <|-- Class02\n' +
|
||||||
@@ -19,7 +19,7 @@ describe('class diagram, ', function() {
|
|||||||
|
|
||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
});
|
});
|
||||||
it('should handle relation definition of different types and directions', function() {
|
it('should handle relation definition of different types and directions', function () {
|
||||||
const str =
|
const str =
|
||||||
'classDiagram\n' +
|
'classDiagram\n' +
|
||||||
'Class11 <|.. Class12\n' +
|
'Class11 <|.. Class12\n' +
|
||||||
@@ -31,7 +31,7 @@ describe('class diagram, ', function() {
|
|||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle cardinality and labels', function() {
|
it('should handle cardinality and labels', function () {
|
||||||
const str =
|
const str =
|
||||||
'classDiagram\n' +
|
'classDiagram\n' +
|
||||||
'Class01 "1" *-- "many" Class02 : contains\n' +
|
'Class01 "1" *-- "many" Class02 : contains\n' +
|
||||||
@@ -66,7 +66,7 @@ describe('class diagram, ', function() {
|
|||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle method statements', function() {
|
it('should handle method statements', function () {
|
||||||
const str =
|
const str =
|
||||||
'classDiagram\n' +
|
'classDiagram\n' +
|
||||||
'Object <|-- ArrayList\n' +
|
'Object <|-- ArrayList\n' +
|
||||||
@@ -76,7 +76,7 @@ describe('class diagram, ', function() {
|
|||||||
|
|
||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
});
|
});
|
||||||
it('should handle parsing of method statements grouped by brackets', function() {
|
it('should handle parsing of method statements grouped by brackets', function () {
|
||||||
const str =
|
const str =
|
||||||
'classDiagram\n' +
|
'classDiagram\n' +
|
||||||
'class Dummy_Class {\n' +
|
'class Dummy_Class {\n' +
|
||||||
@@ -92,7 +92,7 @@ describe('class diagram, ', function() {
|
|||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle parsing of separators', function() {
|
it('should handle parsing of separators', function () {
|
||||||
const str =
|
const str =
|
||||||
'classDiagram\n' +
|
'classDiagram\n' +
|
||||||
'class Foo1 {\n' +
|
'class Foo1 {\n' +
|
||||||
@@ -126,12 +126,12 @@ describe('class diagram, ', function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('when fetching data from an classDiagram graph it', function() {
|
describe('when fetching data from an classDiagram graph it', function () {
|
||||||
beforeEach(function() {
|
beforeEach(function () {
|
||||||
parser.yy = classDb;
|
parser.yy = classDb;
|
||||||
parser.yy.clear();
|
parser.yy.clear();
|
||||||
});
|
});
|
||||||
it('should handle relation definitions EXTENSION', function() {
|
it('should handle relation definitions EXTENSION', function () {
|
||||||
const str = 'classDiagram\n' + 'Class01 <|-- Class02';
|
const str = 'classDiagram\n' + 'Class01 <|-- Class02';
|
||||||
|
|
||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
@@ -144,7 +144,7 @@ describe('class diagram, ', function() {
|
|||||||
expect(relations[0].relation.type2).toBe('none');
|
expect(relations[0].relation.type2).toBe('none');
|
||||||
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE);
|
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE);
|
||||||
});
|
});
|
||||||
it('should handle relation definitions AGGREGATION and dotted line', function() {
|
it('should handle relation definitions AGGREGATION and dotted line', function () {
|
||||||
const str = 'classDiagram\n' + 'Class01 o.. Class02';
|
const str = 'classDiagram\n' + 'Class01 o.. Class02';
|
||||||
|
|
||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
@@ -157,7 +157,7 @@ describe('class diagram, ', function() {
|
|||||||
expect(relations[0].relation.type2).toBe('none');
|
expect(relations[0].relation.type2).toBe('none');
|
||||||
expect(relations[0].relation.lineType).toBe(classDb.lineType.DOTTED_LINE);
|
expect(relations[0].relation.lineType).toBe(classDb.lineType.DOTTED_LINE);
|
||||||
});
|
});
|
||||||
it('should handle relation definitions COMPOSITION on both sides', function() {
|
it('should handle relation definitions COMPOSITION on both sides', function () {
|
||||||
const str = 'classDiagram\n' + 'Class01 *--* Class02';
|
const str = 'classDiagram\n' + 'Class01 *--* Class02';
|
||||||
|
|
||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
@@ -170,7 +170,7 @@ describe('class diagram, ', function() {
|
|||||||
expect(relations[0].relation.type2).toBe(classDb.relationType.COMPOSITION);
|
expect(relations[0].relation.type2).toBe(classDb.relationType.COMPOSITION);
|
||||||
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE);
|
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE);
|
||||||
});
|
});
|
||||||
it('should handle relation definitions no types', function() {
|
it('should handle relation definitions no types', function () {
|
||||||
const str = 'classDiagram\n' + 'Class01 -- Class02';
|
const str = 'classDiagram\n' + 'Class01 -- Class02';
|
||||||
|
|
||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
@@ -183,7 +183,7 @@ describe('class diagram, ', function() {
|
|||||||
expect(relations[0].relation.type2).toBe('none');
|
expect(relations[0].relation.type2).toBe('none');
|
||||||
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE);
|
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE);
|
||||||
});
|
});
|
||||||
it('should handle relation definitions with type only on right side', function() {
|
it('should handle relation definitions with type only on right side', function () {
|
||||||
const str = 'classDiagram\n' + 'Class01 --|> Class02';
|
const str = 'classDiagram\n' + 'Class01 --|> Class02';
|
||||||
|
|
||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
@@ -197,7 +197,7 @@ describe('class diagram, ', function() {
|
|||||||
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE);
|
expect(relations[0].relation.lineType).toBe(classDb.lineType.LINE);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle multiple classes and relation definitions', function() {
|
it('should handle multiple classes and relation definitions', function () {
|
||||||
const str =
|
const str =
|
||||||
'classDiagram\n' +
|
'classDiagram\n' +
|
||||||
'Class01 <|-- Class02\n' +
|
'Class01 <|-- Class02\n' +
|
||||||
@@ -223,7 +223,7 @@ describe('class diagram, ', function() {
|
|||||||
expect(relations[3].relation.lineType).toBe(classDb.lineType.DOTTED_LINE);
|
expect(relations[3].relation.lineType).toBe(classDb.lineType.DOTTED_LINE);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle class annotations', function() {
|
it('should handle class annotations', function () {
|
||||||
const str = 'classDiagram\n' + 'class Class1\n' + '<<interface>> Class1';
|
const str = 'classDiagram\n' + 'class Class1\n' + '<<interface>> Class1';
|
||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
|
|
||||||
@@ -234,7 +234,7 @@ describe('class diagram, ', function() {
|
|||||||
expect(testClass.annotations[0]).toBe('interface');
|
expect(testClass.annotations[0]).toBe('interface');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle class annotations with members and methods', function() {
|
it('should handle class annotations with members and methods', function () {
|
||||||
const str =
|
const str =
|
||||||
'classDiagram\n' +
|
'classDiagram\n' +
|
||||||
'class Class1\n' +
|
'class Class1\n' +
|
||||||
@@ -250,7 +250,7 @@ describe('class diagram, ', function() {
|
|||||||
expect(testClass.annotations[0]).toBe('interface');
|
expect(testClass.annotations[0]).toBe('interface');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle class annotations in brackets', function() {
|
it('should handle class annotations in brackets', function () {
|
||||||
const str = 'classDiagram\n' + 'class Class1 {\n' + '<<interface>>\n' + '}';
|
const str = 'classDiagram\n' + 'class Class1 {\n' + '<<interface>>\n' + '}';
|
||||||
parser.parse(str);
|
parser.parse(str);
|
||||||
|
|
||||||
@@ -261,7 +261,7 @@ describe('class diagram, ', function() {
|
|||||||
expect(testClass.annotations[0]).toBe('interface');
|
expect(testClass.annotations[0]).toBe('interface');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle class annotations in brackets with members and methods', function() {
|
it('should handle class annotations in brackets with members and methods', function () {
|
||||||
const str =
|
const str =
|
||||||
'classDiagram\n' +
|
'classDiagram\n' +
|
||||||
'class Class1 {\n' +
|
'class Class1 {\n' +
|
||||||
@@ -278,7 +278,7 @@ describe('class diagram, ', function() {
|
|||||||
expect(testClass.annotations[0]).toBe('interface');
|
expect(testClass.annotations[0]).toBe('interface');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should add bracket members in right order', function() {
|
it('should add bracket members in right order', function () {
|
||||||
const str =
|
const str =
|
||||||
'classDiagram\n' +
|
'classDiagram\n' +
|
||||||
'class Class1 {\n' +
|
'class Class1 {\n' +
|
||||||
@@ -297,5 +297,100 @@ describe('class diagram, ', function() {
|
|||||||
expect(testClass.methods[0]).toBe('test()');
|
expect(testClass.methods[0]).toBe('test()');
|
||||||
expect(testClass.methods[1]).toBe('foo()');
|
expect(testClass.methods[1]).toBe('foo()');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should handle a comment', function () {
|
||||||
|
const str =
|
||||||
|
'classDiagram\n' +
|
||||||
|
'%% Comment \n' +
|
||||||
|
'class Class1 {\n' +
|
||||||
|
'int : test\n' +
|
||||||
|
'string : foo\n' +
|
||||||
|
'test()\n' +
|
||||||
|
'foo()\n' +
|
||||||
|
'}';
|
||||||
|
|
||||||
|
parser.parse(str);
|
||||||
|
});
|
||||||
|
|
||||||
|
// it('should handle comments at the start', function () {
|
||||||
|
// const str =
|
||||||
|
// '%% Comment\n' +
|
||||||
|
// 'class Class1 {\n' +
|
||||||
|
// 'int : test\n' +
|
||||||
|
// 'string : foo\n' +
|
||||||
|
// 'test()\n' +
|
||||||
|
// 'foo()\n' +
|
||||||
|
// '}';
|
||||||
|
// parser.parse(str);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('should handle comments at the end', function () {
|
||||||
|
// const str =
|
||||||
|
// 'classDiagram\n' +
|
||||||
|
// 'class Class1 {\n' +
|
||||||
|
// 'int : test\n' +
|
||||||
|
// 'string : foo\n' +
|
||||||
|
// 'test()\n' +
|
||||||
|
// 'foo()\n' +
|
||||||
|
// '\n}' +
|
||||||
|
// '%% Comment\n';
|
||||||
|
|
||||||
|
// parser.parse(str);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('should handle comments at the end no trailing newline', function () {
|
||||||
|
// const str =
|
||||||
|
// 'class Class1 {\n' +
|
||||||
|
// 'int : test\n' +
|
||||||
|
// 'string : foo\n' +
|
||||||
|
// 'test()\n' +
|
||||||
|
// 'foo()\n' +
|
||||||
|
// '}\n' +
|
||||||
|
// '%% Comment';
|
||||||
|
|
||||||
|
// parser.parse(str);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('should handle comments at the end many trailing newlines', function () {
|
||||||
|
// const str =
|
||||||
|
// 'classDiagram\n' +
|
||||||
|
// '%% Comment\n\n\n\n\n' +
|
||||||
|
// 'class Class1 {\n' +
|
||||||
|
// 'int : test\n' +
|
||||||
|
// 'string : foo\n' +
|
||||||
|
// 'test()\n' +
|
||||||
|
// 'foo()\n' +
|
||||||
|
// '}';
|
||||||
|
|
||||||
|
// parser.parse(str);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('should handle a comment with blank rows in-between', function () {
|
||||||
|
// const str =
|
||||||
|
// 'classDiagram\n\n\n' +
|
||||||
|
// '%% Comment\n\n' +
|
||||||
|
// 'class Class1 {\n' +
|
||||||
|
// 'int : test\n' +
|
||||||
|
// 'string : foo\n' +
|
||||||
|
// 'test()\n' +
|
||||||
|
// 'foo()\n' +
|
||||||
|
// '}';
|
||||||
|
|
||||||
|
// parser.parse(str);
|
||||||
|
// });
|
||||||
|
|
||||||
|
// it('should handle a comment with mermaid class diagram code in them', function () {
|
||||||
|
// const str =
|
||||||
|
// 'classDiagram\n' +
|
||||||
|
// '%% Comment Class01 <|-- Class02\n' +
|
||||||
|
// 'class Class1 {\n' +
|
||||||
|
// 'int : test\n' +
|
||||||
|
// 'string : foo\n' +
|
||||||
|
// 'test()\n' +
|
||||||
|
// 'foo()\n' +
|
||||||
|
// '}';
|
||||||
|
|
||||||
|
// parser.parse(str);
|
||||||
|
//});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -27,7 +27,7 @@ describe('[Comments] when parsing', () => {
|
|||||||
expect(edges[0].text).toBe('');
|
expect(edges[0].text).toBe('');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should handle comments a at the start', function() {
|
it('should handle comments at the start', function() {
|
||||||
const res = flow.parser.parse('%% Comment\ngraph TD;\n A-->B;');
|
const res = flow.parser.parse('%% Comment\ngraph TD;\n A-->B;');
|
||||||
|
|
||||||
const vert = flow.parser.yy.getVertices();
|
const vert = flow.parser.yy.getVertices();
|
||||||
|
@@ -460,13 +460,6 @@ text: textToken
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
commentText: commentToken
|
|
||||||
{$$=$1;}
|
|
||||||
| commentText commentToken
|
|
||||||
{$$=$1+''+$2;}
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
keywords
|
keywords
|
||||||
: STYLE | LINKSTYLE | CLASSDEF | CLASS | CLICK | GRAPH | DIR | subgraph | end | DOWN | UP;
|
: STYLE | LINKSTYLE | CLASSDEF | CLASS | CLICK | GRAPH | DIR | subgraph | end | DOWN | UP;
|
||||||
|
|
||||||
@@ -516,8 +509,6 @@ linkStyleStatement
|
|||||||
{$$ = $1;yy.updateLinkInterpolate($3,$7);}
|
{$$ = $1;yy.updateLinkInterpolate($3,$7);}
|
||||||
;
|
;
|
||||||
|
|
||||||
commentStatement: PCT PCT commentText;
|
|
||||||
|
|
||||||
numList: NUM
|
numList: NUM
|
||||||
{$$ = [$1]}
|
{$$ = [$1]}
|
||||||
| numList COMMA NUM
|
| numList COMMA NUM
|
||||||
@@ -539,8 +530,6 @@ styleComponent: ALPHA | COLON | MINUS | NUM | UNIT | SPACE | HEX | BRKT | DOT |
|
|||||||
|
|
||||||
/* Token lists */
|
/* Token lists */
|
||||||
|
|
||||||
commentToken : textToken | graphCodeTokens ;
|
|
||||||
|
|
||||||
textToken : textNoTagsToken | TAGSTART | TAGEND | '==' | '--' | PCT | DEFAULT;
|
textToken : textNoTagsToken | TAGSTART | TAGEND | '==' | '--' | PCT | DEFAULT;
|
||||||
|
|
||||||
textNoTagsToken: alphaNumToken | SPACE | MINUS | keywords ;
|
textNoTagsToken: alphaNumToken | SPACE | MINUS | keywords ;
|
||||||
|
Reference in New Issue
Block a user