mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-08 18:16:44 +02:00
254 lines
8.5 KiB
JavaScript
254 lines
8.5 KiB
JavaScript
import flowDb from '../flowDb';
|
|
import flow from './flow';
|
|
import { setConfig } from '../../../config';
|
|
|
|
setConfig({
|
|
securityLevel: 'strict'
|
|
});
|
|
|
|
describe('[Edges] when parsing', () => {
|
|
beforeEach(function() {
|
|
flow.parser.yy = flowDb;
|
|
flow.parser.yy.clear();
|
|
});
|
|
|
|
it('should handle open ended edges', function() {
|
|
const res = flow.parser.parse('graph TD;A---B;');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(edges[0].type).toBe('arrow_open');
|
|
});
|
|
|
|
it('should handle cross ended edges', function() {
|
|
const res = flow.parser.parse('graph TD;A--xB;');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(edges[0].type).toBe('arrow_cross');
|
|
});
|
|
|
|
it('should handle open ended edges', function() {
|
|
const res = flow.parser.parse('graph TD;A--oB;');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(edges[0].type).toBe('arrow_circle');
|
|
});
|
|
|
|
describe('cross', function() {
|
|
it('should handle double edged nodes and edges', function() {
|
|
const res = flow.parser.parse('graph TD;\nA x--x 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('double_arrow_cross');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle double edged nodes with text', function() {
|
|
const res = flow.parser.parse('graph TD;\nA x-- text --x 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('double_arrow_cross');
|
|
expect(edges[0].stroke).toBe('normal');
|
|
expect(edges[0].text).toBe('text');
|
|
});
|
|
|
|
it('should handle double edged nodes and edges on thick arrows', function() {
|
|
const res = flow.parser.parse('graph TD;\nA x==x 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('double_arrow_cross');
|
|
expect(edges[0].stroke).toBe('thick');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle double edged nodes with text on thick arrows XYZ1', function() {
|
|
const res = flow.parser.parse('graph TD;\nA x== text ==x 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('double_arrow_cross');
|
|
expect(edges[0].stroke).toBe('thick');
|
|
expect(edges[0].text).toBe('text');
|
|
});
|
|
|
|
it('should handle double edged nodes and edges on dotted arrows', function() {
|
|
const res = flow.parser.parse('graph TD;\nA x-.-x 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('double_arrow_cross');
|
|
expect(edges[0].stroke).toBe('dotted');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle double edged nodes with text on dotted arrows', function() {
|
|
const res = flow.parser.parse('graph TD;\nA x-. text .-x 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('double_arrow_cross');
|
|
expect(edges[0].stroke).toBe('dotted');
|
|
expect(edges[0].text).toBe('text');
|
|
});
|
|
});
|
|
|
|
describe('circle', function() {
|
|
it('should handle double edged nodes and edges', function() {
|
|
const res = flow.parser.parse('graph TD;\nA o--o 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('double_arrow_circle');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle double edged nodes with text', function() {
|
|
const res = flow.parser.parse('graph TD;\nA o-- text --o 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('double_arrow_circle');
|
|
expect(edges[0].stroke).toBe('normal');
|
|
expect(edges[0].text).toBe('text');
|
|
});
|
|
|
|
it('should handle double edged nodes and edges on thick arrows', function() {
|
|
const res = flow.parser.parse('graph TD;\nA o==o 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('double_arrow_circle');
|
|
expect(edges[0].stroke).toBe('thick');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle double edged nodes with text on thick arrows', function() {
|
|
const res = flow.parser.parse('graph TD;\nA o== text ==o 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('double_arrow_circle');
|
|
expect(edges[0].stroke).toBe('thick');
|
|
expect(edges[0].text).toBe('text');
|
|
});
|
|
|
|
it('should handle double edged nodes and edges on dotted arrows', function() {
|
|
const res = flow.parser.parse('graph TD;\nA o-.-o 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('double_arrow_circle');
|
|
expect(edges[0].stroke).toBe('dotted');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle double edged nodes with text on dotted arrows', function() {
|
|
const res = flow.parser.parse('graph TD;\nA o-. text .-o 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('double_arrow_circle');
|
|
expect(edges[0].stroke).toBe('dotted');
|
|
expect(edges[0].text).toBe('text');
|
|
});
|
|
});
|
|
|
|
it('should handle multiple edges', function() {
|
|
const res = flow.parser.parse(
|
|
'graph TD;A---|This is the 123 s text|B;\nA---|This is the second edge|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(2);
|
|
expect(edges[0].start).toBe('A');
|
|
expect(edges[0].end).toBe('B');
|
|
expect(edges[0].text).toBe('This is the 123 s text');
|
|
expect(edges[1].start).toBe('A');
|
|
expect(edges[1].end).toBe('B');
|
|
expect(edges[1].text).toBe('This is the second edge');
|
|
});
|
|
});
|