- import os
- import shutil
- import unittest
-
- from diagrams import Cluster, Diagram, Node, Edge
- from diagrams import getcluster, getdiagram, setcluster, setdiagram
-
-
- class DiagramTest(unittest.TestCase):
- def setUp(self):
- self.name = "diagram_test"
-
- def tearDown(self):
- setdiagram(None)
- setcluster(None)
- # Only some tests generate the image file.
- try:
- shutil.rmtree(self.name)
- except OSError:
- # Consider it file
- try:
- os.remove(self.name + ".png")
- except FileNotFoundError:
- pass
-
- def test_validate_direction(self):
- # Normal directions.
- for dir in ("TB", "BT", "LR", "RL"):
- Diagram(direction=dir)
-
- # Invalid directions.
- for dir in ("BR", "TL", "Unknown"):
- with self.assertRaises(ValueError):
- Diagram(direction=dir)
-
- def test_validate_outformat(self):
- # Normal output formats.
- for fmt in ("png", "jpg", "svg", "pdf"):
- Diagram(outformat=fmt)
-
- # Invalid output formats.
- for fmt in ("pnp", "jpe", "unknown"):
- with self.assertRaises(ValueError):
- Diagram(outformat=fmt)
-
- def test_with_global_context(self):
- self.assertIsNone(getdiagram())
- with Diagram(name=os.path.join(self.name, "with_global_context"), show=False):
- self.assertIsNotNone(getdiagram())
- self.assertIsNone(getdiagram())
-
- def test_node_not_in_diagram(self):
- # Node must be belong to a diagrams.
- with self.assertRaises(EnvironmentError):
- Node("node")
-
- def test_node_to_node(self):
- with Diagram(name=os.path.join(self.name, "node_to_node"), show=False):
- node1 = Node("node1")
- node2 = Node("node2")
- self.assertEqual(node1 - node2, node2)
- self.assertEqual(node1 >> node2, node2)
- self.assertEqual(node1 << node2, node2)
-
- def test_node_to_nodes(self):
- with Diagram(name=os.path.join(self.name, "node_to_nodes"), show=False):
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(node1 - nodes, nodes)
- self.assertEqual(node1 >> nodes, nodes)
- self.assertEqual(node1 << nodes, nodes)
-
- def test_nodes_to_node(self):
- with Diagram(name=os.path.join(self.name, "nodes_to_node"), show=False):
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(nodes - node1, node1)
- self.assertEqual(nodes >> node1, node1)
- self.assertEqual(nodes << node1, node1)
-
- def test_default_filename(self):
- self.name = "example_1"
- with Diagram(name="Example 1", show=False):
- Node("node1")
- self.assertTrue(os.path.exists(f"{self.name}.png"))
-
- def test_custom_filename(self):
- self.name = "my_custom_name"
- with Diagram(name="Example 1", filename=self.name, show=False):
- Node("node1")
- self.assertTrue(os.path.exists(f"{self.name}.png"))
-
-
- class ClusterTest(unittest.TestCase):
- def setUp(self):
- self.name = "cluster_test"
-
- def tearDown(self):
- setdiagram(None)
- setcluster(None)
- # Only some tests generate the image file.
- try:
- shutil.rmtree(self.name)
- except OSError:
- pass
-
- def test_validate_direction(self):
- # Normal directions.
- for dir in ("TB", "BT", "LR", "RL"):
- with Diagram(name=os.path.join(self.name, "validate_direction"), show=False):
- Cluster(direction=dir)
-
- # Invalid directions.
- for dir in ("BR", "TL", "Unknown"):
- with self.assertRaises(ValueError):
- with Diagram(name=os.path.join(self.name, "validate_direction"), show=False):
- Cluster(direction=dir)
-
- def test_with_global_context(self):
- with Diagram(name=os.path.join(self.name, "with_global_context"), show=False):
- self.assertIsNone(getcluster())
- with Cluster():
- self.assertIsNotNone(getcluster())
- self.assertIsNone(getcluster())
-
- def test_with_nested_cluster(self):
- with Diagram(name=os.path.join(self.name, "with_nested_cluster"), show=False):
- self.assertIsNone(getcluster())
- with Cluster() as c1:
- self.assertEqual(c1, getcluster())
- with Cluster() as c2:
- self.assertEqual(c2, getcluster())
- self.assertEqual(c1, getcluster())
- self.assertIsNone(getcluster())
-
- def test_node_not_in_diagram(self):
- # Node must be belong to a diagrams.
- with self.assertRaises(EnvironmentError):
- Node("node")
-
- def test_node_to_node(self):
- with Diagram(name=os.path.join(self.name, "node_to_node"), show=False):
- with Cluster():
- node1 = Node("node1")
- node2 = Node("node2")
- self.assertEqual(node1 - node2, node2)
- self.assertEqual(node1 >> node2, node2)
- self.assertEqual(node1 << node2, node2)
-
- def test_node_to_nodes(self):
- with Diagram(name=os.path.join(self.name, "node_to_nodes"), show=False):
- with Cluster():
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(node1 - nodes, nodes)
- self.assertEqual(node1 >> nodes, nodes)
- self.assertEqual(node1 << nodes, nodes)
-
- def test_nodes_to_node(self):
- with Diagram(name=os.path.join(self.name, "nodes_to_node"), show=False):
- with Cluster():
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(nodes - node1, node1)
- self.assertEqual(nodes >> node1, node1)
- self.assertEqual(nodes << node1, node1)
-
-
- class EdgeTest(unittest.TestCase):
- def setUp(self):
- self.name = "edge_test"
-
- def tearDown(self):
- setdiagram(None)
- setcluster(None)
- # Only some tests generate the image file.
- try:
- shutil.rmtree(self.name)
- except OSError:
- pass
-
- def test_node_to_node(self):
- with Diagram(name=os.path.join(self.name, "node_to_node"), show=False):
- node1 = Node("node1")
- node2 = Node("node2")
- self.assertEqual(node1 - Edge(color="red") - node2, node2)
-
- def test_node_to_nodes(self):
- with Diagram(name=os.path.join(self.name, "node_to_nodes"), show=False):
- with Cluster():
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(node1 - Edge(color="red") - nodes, nodes)
-
- def test_nodes_to_node(self):
- with Diagram(name=os.path.join(self.name, "nodes_to_node"), show=False):
- with Cluster():
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(nodes - Edge(color="red") - node1, node1)
-
- def test_nodes_to_node_with_additional_attributes(self):
- with Diagram(name=os.path.join(self.name, "nodes_to_node_with_additional_attributes"), show=False):
- with Cluster():
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(nodes - Edge(color="red") - Edge(color="green") - node1, node1)
-
- def test_node_to_node_with_attributes(self):
- with Diagram(name=os.path.join(self.name, "node_to_node_with_attributes"), show=False):
- with Cluster():
- node1 = Node("node1")
- node2 = Node("node2")
- self.assertEqual(node1 << Edge(color="red", label="1.1") << node2, node2)
- self.assertEqual(node1 >> Edge(color="green", label="1.2") >> node2, node2)
- self.assertEqual(node1 << Edge(color="blue", label="1.3") >> node2, node2)
-
- def test_node_to_node_with_additional_attributes(self):
- with Diagram(name=os.path.join(self.name, "node_to_node_with_additional_attributes"), show=False):
- with Cluster():
- node1 = Node("node1")
- node2 = Node("node2")
- self.assertEqual(node1 << Edge(color="red", label="2.1") << Edge(color="blue") << node2, node2)
- self.assertEqual(node1 >> Edge(color="green", label="2.2") >> Edge(color="red") >> node2, node2)
- self.assertEqual(node1 << Edge(color="blue", label="2.3") >> Edge(color="black") >> node2, node2)
-
- def test_nodes_to_node_with_attributes_loop(self):
- with Diagram(name=os.path.join(self.name, "nodes_to_node_with_attributes_loop"), show=False):
- with Cluster():
- node = Node("node")
- self.assertEqual(node >> Edge(color="red", label="3.1") >> node, node)
- self.assertEqual(node << Edge(color="green", label="3.2") << node, node)
- self.assertEqual(node >> Edge(color="blue", label="3.3") << node, node)
- self.assertEqual(node << Edge(color="pink", label="3.4") >> node, node)
-
- def test_nodes_to_node_with_attributes_bothdirectional(self):
- with Diagram(
- name=os.path.join(self.name, "nodes_to_node_with_attributes_bothdirectional"), show=False
- ) as diagram:
- with Cluster():
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(nodes << Edge(color="green", label="4") >> node1, node1)
-
- def test_nodes_to_node_with_attributes_bidirectional(self):
- with Diagram(name=os.path.join(self.name, "nodes_to_node_with_attributes_bidirectional"), show=False):
- with Cluster():
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(nodes << Edge(color="blue", label="5") >> node1, node1)
-
- def test_nodes_to_node_with_attributes_onedirectional(self):
- with Diagram(name=os.path.join(self.name, "nodes_to_node_with_attributes_onedirectional"), show=False):
- with Cluster():
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(nodes >> Edge(color="red", label="6.1") >> node1, node1)
- self.assertEqual(nodes << Edge(color="green", label="6.2") << node1, node1)
-
- def test_nodes_to_node_with_additional_attributes_directional(self):
- with Diagram(name=os.path.join(self.name, "nodes_to_node_with_additional_attributes_directional"), show=False):
- with Cluster():
- node1 = Node("node1")
- nodes = [Node("node2"), Node("node3")]
- self.assertEqual(
- nodes >> Edge(color="red", label="6.1") >> Edge(color="blue", label="6.2") >> node1, node1
- )
- self.assertEqual(
- nodes << Edge(color="green", label="6.3") << Edge(color="pink", label="6.4") << node1, node1
- )
|