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}