fkl_dot/
lib.rs

1pub mod graph;
2pub mod subgraph;
3pub mod node;
4pub mod edge;
5pub mod helper;
6
7
8#[cfg(test)]
9mod tests {
10  use crate::graph::Graph;
11  use crate::node::Node;
12  use crate::subgraph::Subgraph;
13
14  #[test]
15  fn basic_graph() {
16    let mut graph = Graph::new("empty_graph");
17    graph.add_node(Node::new("a"));
18
19    let subgraph = Subgraph::new("empty_subgraph", "Empty Subgraph");
20    graph.add_subgraph(subgraph);
21
22    assert_eq!(format!("{}", graph), r#"digraph empty_graph {
23  a [label="a"];
24
25  subgraph cluster_empty_subgraph {
26    label="Empty Subgraph";
27  }
28}"#);
29  }
30
31  #[test]
32  fn nested_subgraph() {
33    let mut graph = Graph::new("nested_subgraph");
34    graph.add_node(Node::new("a"));
35
36    let mut subgraph = Subgraph::new("empty_subgraph", "Empty Subgraph");
37    subgraph.set_depth(1);
38    subgraph.add_node(Node::new("b"));
39
40    let mut nested_subgraph = Subgraph::new("nested_subgraph", "Nested Subgraph");
41    nested_subgraph.add_node(Node::new("c"));
42    nested_subgraph.set_depth(2);
43    subgraph.add_subgraph(nested_subgraph);
44
45    graph.add_subgraph(subgraph);
46
47
48    assert_eq!(format!("{}", graph), r#"digraph nested_subgraph {
49  a [label="a"];
50
51  subgraph cluster_empty_subgraph {
52    label="Empty Subgraph";
53    b [label="b"];
54
55    subgraph cluster_nested_subgraph {
56      label="Nested Subgraph";
57      c [label="c"];
58    }
59  }
60}"#);
61  }
62
63  #[test]
64  fn graph_with_edge() {
65    let mut graph = Graph::new("graph_with_edge");
66    graph.add_node(Node::new("a"));
67    graph.add_node(Node::new("b"));
68    graph.add_edge("a", "b");
69
70    assert_eq!(format!("{}", graph), r#"digraph graph_with_edge {
71  a [label="a"];
72  b [label="b"];
73  a -> b;
74}"#);
75  }
76
77  #[test]
78  fn graph_with_edge_and_subgraph() {
79    let mut graph = Graph::new("graph_with_edge_and_subgraph");
80    graph.add_node(Node::new("a"));
81    graph.add_node(Node::new("b"));
82    graph.add_edge("a", "b");
83
84    let mut subgraph = Subgraph::new("empty_subgraph", "Empty Subgraph");
85    subgraph.set_depth(1);
86    subgraph.add_node(Node::new("c"));
87    graph.add_subgraph(subgraph);
88
89    assert_eq!(format!("{}", graph), r#"digraph graph_with_edge_and_subgraph {
90  a [label="a"];
91  b [label="b"];
92  a -> b;
93
94  subgraph cluster_empty_subgraph {
95    label="Empty Subgraph";
96    c [label="c"];
97  }
98}"#);
99  }
100
101  #[test]
102  fn graph_width_rect_shape_style() {
103    let mut graph = Graph::new("graph_width_rect_shape_style");
104    graph.use_default_style();
105
106    graph.add_node(Node::new("a"));
107
108    assert_eq!(format!("{}", graph), r#"digraph graph_width_rect_shape_style {
109  component=true;layout=fdp;
110  node [shape=box style=filled];
111  a [label="a"];
112}"#);
113  }
114}