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();
|
|
});
|
|
|
|
});
|