mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-18 06:49:47 +02:00

updated regex in parser to correctly handle comments in class diagrams. Also updated flowchart parser to remove unused elements for comments, as well as modifying the regex to match
152 lines
4.7 KiB
JavaScript
152 lines
4.7 KiB
JavaScript
import flowDb from '../flowDb';
|
|
import flow from './flow';
|
|
import { setConfig } from '../../../config';
|
|
|
|
setConfig({
|
|
securityLevel: 'strict'
|
|
});
|
|
|
|
describe('[Comments] when parsing', () => {
|
|
beforeEach(function() {
|
|
flow.parser.yy = flowDb;
|
|
flow.parser.yy.clear();
|
|
});
|
|
|
|
it('should handle comments', function() {
|
|
const res = flow.parser.parse('graph TD;\n%% Comment\n A-->B;');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['A'].id).toBe('A');
|
|
expect(vert['B'].id).toBe('B');
|
|
expect(edges.length).toBe(1);
|
|
expect(edges[0].start).toBe('A');
|
|
expect(edges[0].end).toBe('B');
|
|
expect(edges[0].type).toBe('arrow');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle comments at the start', function() {
|
|
const res = flow.parser.parse('%% Comment\ngraph TD;\n A-->B;');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['A'].id).toBe('A');
|
|
expect(vert['B'].id).toBe('B');
|
|
expect(edges.length).toBe(1);
|
|
expect(edges[0].start).toBe('A');
|
|
expect(edges[0].end).toBe('B');
|
|
expect(edges[0].type).toBe('arrow');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle comments at the end', function() {
|
|
const res = flow.parser.parse('graph TD;\n A-->B\n %% Comment at the end\n');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['A'].id).toBe('A');
|
|
expect(vert['B'].id).toBe('B');
|
|
expect(edges.length).toBe(1);
|
|
expect(edges[0].start).toBe('A');
|
|
expect(edges[0].end).toBe('B');
|
|
expect(edges[0].type).toBe('arrow');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle comments at the end no trailing newline', function() {
|
|
const res = flow.parser.parse('graph TD;\n A-->B\n%% Commento');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['A'].id).toBe('A');
|
|
expect(vert['B'].id).toBe('B');
|
|
expect(edges.length).toBe(1);
|
|
expect(edges[0].start).toBe('A');
|
|
expect(edges[0].end).toBe('B');
|
|
expect(edges[0].type).toBe('arrow');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle comments at the end many trailing newlines', function() {
|
|
const res = flow.parser.parse('graph TD;\n A-->B\n%% Commento\n\n\n');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['A'].id).toBe('A');
|
|
expect(vert['B'].id).toBe('B');
|
|
expect(edges.length).toBe(1);
|
|
expect(edges[0].start).toBe('A');
|
|
expect(edges[0].end).toBe('B');
|
|
expect(edges[0].type).toBe('arrow');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle no trailing newlines', function() {
|
|
const res = flow.parser.parse('graph TD;\n A-->B');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['A'].id).toBe('A');
|
|
expect(vert['B'].id).toBe('B');
|
|
expect(edges.length).toBe(1);
|
|
expect(edges[0].start).toBe('A');
|
|
expect(edges[0].end).toBe('B');
|
|
expect(edges[0].type).toBe('arrow');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle many trailing newlines', function() {
|
|
const res = flow.parser.parse('graph TD;\n A-->B\n\n');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['A'].id).toBe('A');
|
|
expect(vert['B'].id).toBe('B');
|
|
expect(edges.length).toBe(1);
|
|
expect(edges[0].start).toBe('A');
|
|
expect(edges[0].end).toBe('B');
|
|
expect(edges[0].type).toBe('arrow');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle a comment with blank rows in-between', function() {
|
|
const res = flow.parser.parse('graph TD;\n\n\n %% Comment\n A-->B;');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['A'].id).toBe('A');
|
|
expect(vert['B'].id).toBe('B');
|
|
expect(edges.length).toBe(1);
|
|
expect(edges[0].start).toBe('A');
|
|
expect(edges[0].end).toBe('B');
|
|
expect(edges[0].type).toBe('arrow');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle a comment with mermaid flowchart code in them', function() {
|
|
const res = flow.parser.parse(
|
|
'graph TD;\n\n\n %% Test od>Odd shape]-->|Two line<br>edge comment|ro;\n A-->B;'
|
|
);
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['A'].id).toBe('A');
|
|
expect(vert['B'].id).toBe('B');
|
|
expect(edges.length).toBe(1);
|
|
expect(edges[0].start).toBe('A');
|
|
expect(edges[0].end).toBe('B');
|
|
expect(edges[0].type).toBe('arrow');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
});
|