/** * 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(); console.log('here'); 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 global.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 = '
graph TD;\na;
'; 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 = '
graph TD;\na;
'; 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 = '
graph TD;\na;
'; 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 = '
graph TD;\na;
'; 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 = '
graph TD;\na;
'; 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(); global.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(); }); }); });