var assert = require('assert'), fs = require('fs'), dot = require('../lib/network/dotparser.js'); describe('dotparser', function () { it('should parse a DOT file into JSON', function (done) { fs.readFile('test/dot.txt', function (err, data) { data = String(data); var graph = dot.parseDOT(data); assert.deepEqual(graph, { "type": "digraph", "id": "test_graph", "rankdir": "LR", "size": "8,5", "font": "arial", "nodes": [ { "id": "node1", "attr": { "shape": "doublecircle" } }, { "id": "node2", "attr": { "shape": "doublecircle" } }, { "id": "node3", "attr": { "shape": "doublecircle" } }, { "id": "node4", "attr": { "shape": "diamond", "color": "red" } }, { "id": "node5", "attr": { "shape": "square", "color": "blue", "width": 3 } }, { "id": 6, "attr": { "shape": "circle" } }, { "id": "A", "attr": { "shape": "circle" } }, { "id": "B", "attr": { "shape": "circle" } }, { "id": "C", "attr": { "shape": "circle" } } ], "edges": [ { "from": "node1", "to": "node1", "type": "->", "attr": { "length": 170, "fontSize": 12, "label": "a" } }, { "from": "node2", "to": "node3", "type": "->", "attr": { "length": 170, "fontSize": 12, "label": "b" } }, { "from": "node1", "to": "node4", "type": "--", "attr": { "length": 170, "fontSize": 12, "label": "c" } }, { "from": "node3", "to": "node4", "type": "->", "attr": { "length": 170, "fontSize": 12, "label": "d" } }, { "from": "node4", "to": "node5", "type": "->", "attr": { "length": 170, "fontSize": 12 } }, { "from": "node5", "to": 6, "type": "->", "attr": { "length": 170, "fontSize": 12 } }, { "from": "A", "to": { "nodes": [ { "id": "B", "attr": { "shape": "circle" } }, { "id": "C", "attr": { "shape": "circle" } } ] }, "type": "->", "attr": { "length": 170, "fontSize": 12 } } ], "subgraphs": [ { "nodes": [ { "id": "B", "attr": { "shape": "circle" } }, { "id": "C", "attr": { "shape": "circle" } } ] } ] }); done(); }); }); /** * DOT-format examples taken from #3015 */ it('properly handles newline escape sequences in strings', function (done) { var data = 'dinetwork {1 [label="new\\nline"];}'; data = String(data); var graph = dot.parseDOT(data); assert.deepEqual(graph, { "id": "dinetwork", "nodes": [ { "id": 1, "attr": { "label": "new\nline", // And not "new\\nline" } } ] }); // Note the double backslashes var data2 = 'digraph {' + "\n" + ' 3 [color="#0d2b7c", label="query:1230:add_q\\n0.005283\\n6.83%\\n(0.0001)\\n(0.13%)\\n17×"];' + "\n" + ' 3 -> 7 [color="#0d2a7b", fontcolor="#0d2a7b", label="0.005128\\n6.63%\\n17×"];' + "\n" + ' 5 [color="#0d1976", label="urlresolvers:537:reverse\\n0.00219\\n2.83%\\n(0.000193)\\n(0.25%)\\n29×"];' + "\n" + "}" data2 = String(data2); var graph2 = dot.parseDOT(data2); //console.log(JSON.stringify(graph, null, 2)); assert.deepEqual(graph2, { "type": "digraph", "nodes": [ { "id": 3, "attr": { "color": "#0d2b7c", "label": "query:1230:add_q\n0.005283\n6.83%\n(0.0001)\n(0.13%)\n17×" } }, { "id": 7 }, { "id": 5, "attr": { "color": "#0d1976", "label": "urlresolvers:537:reverse\n0.00219\n2.83%\n(0.000193)\n(0.25%)\n29×" } } ], "edges": [ { "from": 3, "to": 7, "type": "->", "attr": { "color": "#0d2a7b", "fontcolor": "#0d2a7b", "label": "0.005128\n6.63%\n17×" } } ] }); done(); }); });