136 lines
2.7 KiB
TypeScript
136 lines
2.7 KiB
TypeScript
/*
|
|
* Copyright (C) Sapphirecode - All Rights Reserved
|
|
* This file is part of graphviz-builder which is released under MIT.
|
|
* See file 'LICENSE' for full license details.
|
|
* Created by Timo Hocker <timo@scode.ovh>, May 2020
|
|
*/
|
|
|
|
/* eslint-disable max-nested-callbacks */
|
|
import { Graph, Color } from '../../lib';
|
|
|
|
// eslint-disable-next-line max-lines-per-function
|
|
describe ('graph', () => {
|
|
const result = `digraph foo {
|
|
subgraph cluster_foo_baz {
|
|
color = #ff0000
|
|
style = bold
|
|
|
|
subgraph cluster_foo_baz_nested {
|
|
color = #808080
|
|
style = dotted
|
|
|
|
subgraph cluster_foo_baz_nested_unnamed {
|
|
color = #808080
|
|
style = dotted
|
|
}
|
|
}
|
|
|
|
foo_baz_asd [label="asd"]
|
|
foo_baz_test [style="bold", color="#808080"]
|
|
}
|
|
|
|
foo_baz [label="baz"]
|
|
foo_foo [label="foo"]
|
|
|
|
foo_foo -> foo_baz
|
|
}`;
|
|
|
|
const non_directional = `graph foo {
|
|
subgraph cluster_foo_bar {
|
|
foo_bar_baz [label="baz"]
|
|
foo_bar_asd [label="asd"]
|
|
|
|
foo_bar_baz -- foo_bar_asd
|
|
}
|
|
|
|
foo_foo [label="foo"]
|
|
|
|
foo_bar_baz -- foo_foo
|
|
}`;
|
|
|
|
const attributes = `digraph attr {
|
|
color = #000000
|
|
style = bold
|
|
overlap = false
|
|
splines = true
|
|
layout = neato
|
|
}`;
|
|
|
|
it ('should serialize', () => {
|
|
const g = new Graph ('foo');
|
|
|
|
expect (g.full_name)
|
|
.toEqual ('foo');
|
|
g.add_graph ((graph) => {
|
|
graph.name = 'baz';
|
|
graph.add_node ('asd');
|
|
graph.add_node ((n) => {
|
|
n.name = 'test';
|
|
n.style = 'bold';
|
|
n.color = Color.gray;
|
|
});
|
|
|
|
// eslint-disable-next-line no-shadow
|
|
graph.add_graph ((g) => {
|
|
g.style = 'dotted';
|
|
g.color = Color.gray;
|
|
g.name = 'nested';
|
|
|
|
// eslint-disable-next-line no-shadow
|
|
g.add_graph ((g) => {
|
|
g.style = 'dotted';
|
|
g.color = Color.gray;
|
|
});
|
|
});
|
|
graph.style = 'bold';
|
|
graph.color = Color.red;
|
|
});
|
|
|
|
const baz = g.add_node ('baz');
|
|
const foo = g.add_node ('foo');
|
|
|
|
g.add_edge (foo, baz);
|
|
|
|
const serialized = g.toString ();
|
|
|
|
expect (serialized)
|
|
.toEqual (result);
|
|
});
|
|
|
|
it ('non directional', () => {
|
|
const g = new Graph ('foo');
|
|
|
|
g.directional = false;
|
|
|
|
let n = '';
|
|
|
|
g.add_graph ((sub) => {
|
|
sub.name = 'bar';
|
|
n = sub.add_node ('baz');
|
|
const n2 = sub.add_node ('asd');
|
|
|
|
sub.add_edge (n, n2);
|
|
});
|
|
|
|
const f = g.add_node ('foo');
|
|
|
|
g.add_edge (n, f);
|
|
|
|
expect (g.toString ())
|
|
.toEqual (non_directional);
|
|
});
|
|
|
|
it ('attributes', () => {
|
|
const g = new Graph ('attr');
|
|
|
|
g.layout = 'neato';
|
|
g.overlap = false;
|
|
g.splines = true;
|
|
g.color = Color.black;
|
|
g.style = 'bold';
|
|
|
|
expect (g.toString ())
|
|
.toEqual (attributes);
|
|
});
|
|
});
|