mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-19 07:19:41 +02:00
Added logger for dealing with issue #179
Added markdown files for the documentation. parseError exposed from the mermaidAPI
This commit is contained in:
262
src/mermaid.spec.js
Normal file
262
src/mermaid.spec.js
Normal file
@@ -0,0 +1,262 @@
|
||||
/**
|
||||
* Created by knut on 14-11-26.
|
||||
*/
|
||||
/**
|
||||
* Created by knut on 14-11-23.
|
||||
*/
|
||||
var rewire = require("rewire");
|
||||
var utils = require("./utils");
|
||||
var mermaid = require("./mermaid");
|
||||
var log = require('./logger').create();
|
||||
|
||||
describe('when using mermaid and ',function() {
|
||||
describe('when detecting chart type ',function() {
|
||||
//var mermaid;
|
||||
//var document;
|
||||
//var window;
|
||||
beforeEach(function () {
|
||||
var MockBrowser = require('mock-browser').mocks.MockBrowser;
|
||||
var mock = new MockBrowser();
|
||||
|
||||
delete global.mermaid_config;
|
||||
|
||||
// and in the run-code inside some object
|
||||
document = mock.getDocument();
|
||||
window = mock.getWindow();
|
||||
});
|
||||
|
||||
it('should not start rendering with mermaid_config.startOnLoad set to false', function () {
|
||||
mermaid = rewire('./mermaid');
|
||||
mermaid_config ={startOnLoad : false};
|
||||
|
||||
document.body.innerHTML = '<div class="mermaid">graph TD;\na;</div>';
|
||||
spyOn(global.mermaid,'init');
|
||||
//log.debug(mermaid);
|
||||
mermaid.contentLoaded();
|
||||
expect(global.mermaid.init).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should not start rendering with mermaid.startOnLoad set to false', function () {
|
||||
mermaid = rewire('./mermaid');
|
||||
global.mermaid.startOnLoad = false;
|
||||
mermaid_config ={startOnLoad : true};
|
||||
|
||||
document.body.innerHTML = '<div class="mermaid">graph TD;\na;</div>';
|
||||
spyOn(global.mermaid,'init');
|
||||
mermaid.contentLoaded();
|
||||
expect(global.mermaid.init).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should start rendering with both startOnLoad set', function () {
|
||||
mermaid = rewire('./mermaid');
|
||||
global.mermaid.startOnLoad = true;
|
||||
mermaid_config ={startOnLoad : true};
|
||||
document.body.innerHTML = '<div class="mermaid">graph TD;\na;</div>';
|
||||
spyOn(global.mermaid,'init');
|
||||
mermaid.contentLoaded();
|
||||
expect(global.mermaid.init).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should start rendering with mermaid.startOnLoad set and no mermaid_config defined', function () {
|
||||
mermaid = rewire('./mermaid');
|
||||
global.mermaid.startOnLoad = true;
|
||||
document.body.innerHTML = '<div class="mermaid">graph TD;\na;</div>';
|
||||
spyOn(global.mermaid,'init');
|
||||
mermaid.contentLoaded();
|
||||
expect(global.mermaid.init).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('should start rendering as a default with no changes performed', function () {
|
||||
mermaid = rewire('./mermaid');
|
||||
document.body.innerHTML = '<div class="mermaid">graph TD;\na;</div>';
|
||||
spyOn(global.mermaid,'init');
|
||||
mermaid.contentLoaded();
|
||||
expect(global.mermaid.init).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe('when calling addEdges ',function() {
|
||||
var mermaid;
|
||||
var graph = require('./diagrams/flowchart/graphDb');
|
||||
var flow = require('./diagrams/flowchart/parser/flow');
|
||||
var flowRend = require('./diagrams/flowchart/flowRenderer');
|
||||
|
||||
beforeEach(function () {
|
||||
mermaid_config ={startOnLoad : false};
|
||||
var MockBrowser = require('mock-browser').mocks.MockBrowser;
|
||||
var mock = new MockBrowser();
|
||||
flow.parser.yy =graph;
|
||||
graph.clear();
|
||||
document = mock.getDocument();
|
||||
mermaid = rewire('./mermaid');
|
||||
});
|
||||
it('it should handle edges with text', function () {
|
||||
var res = flow.parser.parse('graph TD;A-->|text ex|B;');
|
||||
var vert = flow.parser.yy.getVertices();
|
||||
var edges = flow.parser.yy.getEdges();
|
||||
|
||||
var mockG = {
|
||||
setEdge:function(start, end,options,name){
|
||||
expect(start).toBe('A');
|
||||
expect(end).toBe('B');
|
||||
expect(options.arrowhead).toBe('normal');
|
||||
expect(options.label.match('text ex')).toBeTruthy();
|
||||
}
|
||||
};
|
||||
|
||||
flowRend.addEdges(edges,mockG);
|
||||
});
|
||||
|
||||
it('should handle edges without text', function () {
|
||||
var res = flow.parser.parse('graph TD;A-->B;');
|
||||
var vert = flow.parser.yy.getVertices();
|
||||
var edges = flow.parser.yy.getEdges();
|
||||
|
||||
var mockG = {
|
||||
setEdge:function(start, end,options,name){
|
||||
expect(start).toBe('A');
|
||||
expect(end).toBe('B');
|
||||
expect(options.arrowhead).toBe('normal');
|
||||
}
|
||||
};
|
||||
|
||||
flowRend.addEdges(edges,mockG);
|
||||
});
|
||||
|
||||
|
||||
it('should handle open-ended edges', function () {
|
||||
var res = flow.parser.parse('graph TD;A---B;');
|
||||
var vert = flow.parser.yy.getVertices();
|
||||
var edges = flow.parser.yy.getEdges();
|
||||
|
||||
var mockG = {
|
||||
setEdge:function(start, end,options,name){
|
||||
expect(start).toBe('A');
|
||||
expect(end).toBe('B');
|
||||
expect(options.arrowhead).toBe('none');
|
||||
}
|
||||
};
|
||||
|
||||
flowRend.addEdges(edges,mockG);
|
||||
});
|
||||
|
||||
it('should handle edges with styles defined', function () {
|
||||
var res = flow.parser.parse('graph TD;A---B; linkStyle 0 stroke:val1,stroke-width:val2;');
|
||||
var vert = flow.parser.yy.getVertices();
|
||||
var edges = flow.parser.yy.getEdges();
|
||||
|
||||
var mockG = {
|
||||
setEdge:function(start, end,options,name){
|
||||
expect(start).toBe('A');
|
||||
expect(end).toBe('B');
|
||||
expect(options.arrowhead).toBe('none');
|
||||
expect(options.style).toBe('stroke:val1;stroke-width:val2;');
|
||||
}
|
||||
};
|
||||
|
||||
flowRend.addEdges(edges,mockG);
|
||||
});
|
||||
it('should handle edges with text and styles defined', function () {
|
||||
var res = flow.parser.parse('graph TD;A---|the text|B; linkStyle 0 stroke:val1,stroke-width:val2;');
|
||||
var vert = flow.parser.yy.getVertices();
|
||||
var edges = flow.parser.yy.getEdges();
|
||||
|
||||
var mockG = {
|
||||
setEdge:function(start, end,options,name){
|
||||
expect(start).toBe('A');
|
||||
expect(end).toBe('B');
|
||||
expect(options.arrowhead).toBe('none');
|
||||
expect(options.label.match('the text')).toBeTruthy();
|
||||
expect(options.style).toBe('stroke:val1;stroke-width:val2;');
|
||||
}
|
||||
};
|
||||
|
||||
flowRend.addEdges(edges,mockG);
|
||||
});
|
||||
});
|
||||
|
||||
describe('checking validity of input ', function(){
|
||||
it('it should return false for an invalid definiton',function(){
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var res = mermaid.parse('this is not a mermaid diagram definition');
|
||||
|
||||
expect(res).toBe(false);
|
||||
expect(global.mermaid.parseError).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('it should return true for a valid flow definition',function(){
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var res = mermaid.parse('graph TD;A--x|text including URL space|B;');
|
||||
|
||||
expect(res).toBe(true);
|
||||
expect(global.mermaid.parseError).not.toHaveBeenCalled();
|
||||
});
|
||||
it('it should return false for an invalid flow definition',function(){
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var res = mermaid.parse('graph TQ;A--x|text including URL space|B;');
|
||||
|
||||
expect(res).toBe(false);
|
||||
expect(global.mermaid.parseError).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('it should return true for a valid sequenceDiagram definition',function(){
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var str = 'sequenceDiagram\n' +
|
||||
'Alice->Bob: Hello Bob, how are you?\n\n' +
|
||||
'%% Comment\n' +
|
||||
'Note right of Bob: Bob thinks\n' +
|
||||
'alt isWell\n\n' +
|
||||
'Bob-->Alice: I am good thanks!\n' +
|
||||
'else isSick\n' +
|
||||
'Bob-->Alice: Feel sick...\n' +
|
||||
'end';
|
||||
var res = mermaid.parse(str);
|
||||
|
||||
expect(res).toBe(true);
|
||||
expect(global.mermaid.parseError).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('it should return false for an invalid sequenceDiagram definition',function(){
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var str = 'sequenceDiagram\n' +
|
||||
'Alice:->Bob: Hello Bob, how are you?\n\n' +
|
||||
'%% Comment\n' +
|
||||
'Note right of Bob: Bob thinks\n' +
|
||||
'alt isWell\n\n' +
|
||||
'Bob-->Alice: I am good thanks!\n' +
|
||||
'else isSick\n' +
|
||||
'Bob-->Alice: Feel sick...\n' +
|
||||
'end';
|
||||
var res = mermaid.parse(str);
|
||||
|
||||
expect(res).toBe(false);
|
||||
expect(global.mermaid.parseError).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it('it should return true for a valid dot definition',function(){
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var res = mermaid.parse('digraph\n' +
|
||||
'{\n' +
|
||||
' a -> b -> c -- d -> e;\n' +
|
||||
' a -- e;\n' +
|
||||
'}');
|
||||
|
||||
expect(res).toBe(true);
|
||||
expect(global.mermaid.parseError).not.toHaveBeenCalled();
|
||||
});
|
||||
it('it should return false for an invalid dot definition',function(){
|
||||
spyOn(global.mermaid,'parseError');
|
||||
var res = mermaid.parse('digraph\n' +
|
||||
'{\n' +
|
||||
'a -:> b -> c -- d -> e;\n' +
|
||||
'a -- e;\n' +
|
||||
'}');
|
||||
|
||||
expect(res).toBe(false);
|
||||
expect(global.mermaid.parseError).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
});
|
Reference in New Issue
Block a user