mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-19 23:39:50 +02:00
140 lines
3.9 KiB
JavaScript
140 lines
3.9 KiB
JavaScript
import flowDb from '../flowDb';
|
|
import flow from './flow';
|
|
import { setConfig } from '../../../config';
|
|
|
|
setConfig({
|
|
securityLevel: 'strict'
|
|
});
|
|
|
|
describe('when parsing ', function() {
|
|
beforeEach(function() {
|
|
flow.parser.yy = flowDb;
|
|
flow.parser.yy.clear();
|
|
});
|
|
|
|
it('it should handle a trailing whitespaces after statememnts', function() {
|
|
const res = flow.parser.parse('graph TD;\n\n\n %% Comment\n A-->B; \n B-->C;');
|
|
|
|
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].type).toBe('arrow');
|
|
expect(edges[0].text).toBe('');
|
|
});
|
|
|
|
it('should handle node names with "end" substring', function() {
|
|
const res = flow.parser.parse('graph TD\nendpoint --> sender');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['endpoint'].id).toBe('endpoint');
|
|
expect(vert['sender'].id).toBe('sender');
|
|
expect(edges[0].start).toBe('endpoint');
|
|
expect(edges[0].end).toBe('sender');
|
|
});
|
|
|
|
it('should handle node names ending with keywords', function() {
|
|
const res = flow.parser.parse('graph TD\nblend --> monograph');
|
|
|
|
const vert = flow.parser.yy.getVertices();
|
|
const edges = flow.parser.yy.getEdges();
|
|
|
|
expect(vert['blend'].id).toBe('blend');
|
|
expect(vert['monograph'].id).toBe('monograph');
|
|
expect(edges[0].start).toBe('blend');
|
|
expect(edges[0].end).toBe('monograph');
|
|
});
|
|
|
|
describe('special characters should be be handled.', function() {
|
|
const charTest = function(char, result) {
|
|
const res = flow.parser.parse('graph TD;A(' + char + ')-->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');
|
|
if (result) {
|
|
expect(vert['A'].text).toBe(result);
|
|
} else {
|
|
expect(vert['A'].text).toBe(char);
|
|
}
|
|
flow.parser.yy.clear();
|
|
};
|
|
|
|
it("it should be able to parse a '.'", function() {
|
|
charTest('.');
|
|
charTest('Start 103a.a1');
|
|
});
|
|
|
|
// it('it should be able to parse text containing \'_\'', function () {
|
|
// charTest('_')
|
|
// })
|
|
|
|
it("it should be able to parse a ':'", function() {
|
|
charTest(':');
|
|
});
|
|
|
|
it("it should be able to parse a ','", function() {
|
|
charTest(',');
|
|
});
|
|
|
|
it("it should be able to parse text containing '-'", function() {
|
|
charTest('a-b');
|
|
});
|
|
|
|
it("it should be able to parse a '+'", function() {
|
|
charTest('+');
|
|
});
|
|
|
|
it("it should be able to parse a '*'", function() {
|
|
charTest('*');
|
|
});
|
|
|
|
it("it should be able to parse a '<'", function() {
|
|
charTest('<', '<');
|
|
});
|
|
|
|
it("it should be able to parse a '>'", function() {
|
|
charTest('>', '>');
|
|
});
|
|
|
|
it("it should be able to parse a '='", function() {
|
|
charTest('=', '=');
|
|
});
|
|
it("it should be able to parse a '&'", function() {
|
|
charTest('&');
|
|
});
|
|
});
|
|
|
|
it('should be possible to use direction in node ids', function() {
|
|
let statement = '';
|
|
|
|
statement = statement + 'graph TD;' + '\n';
|
|
statement = statement + ' node1TB\n';
|
|
|
|
const res = flow.parser.parse(statement);
|
|
const vertices = flow.parser.yy.getVertices();
|
|
console.log(vertices);
|
|
const classes = flow.parser.yy.getClasses();
|
|
expect(vertices['node1TB'].id).toBe('node1TB');
|
|
});
|
|
|
|
it('should be possible to use direction in node ids', function() {
|
|
let statement = '';
|
|
|
|
statement = statement + 'graph TD;A--x|text including URL space|B;';
|
|
const res = flow.parser.parse(statement);
|
|
const vertices = flow.parser.yy.getVertices();
|
|
console.log(vertices);
|
|
const classes = flow.parser.yy.getClasses();
|
|
expect(vertices['A'].id).toBe('A');
|
|
});
|
|
});
|