Skip to content

Commit

Permalink
feat: support layers in the draw.io
Browse files Browse the repository at this point in the history
  • Loading branch information
tsypuk committed Jul 28, 2023
1 parent a700708 commit e210ec9
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 2 deletions.
11 changes: 9 additions & 2 deletions multicloud_diagrams/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,18 @@ def __init__(self, debug_mode=False):
guides="1", tooltips="1", connect="1", arrows="1", fold="1", page="1",
pageScale="1", pageWidth="850", pageHeight="1100", math="0", shadow="0")
self.root = et.SubElement(self.mx_graph_model, 'root')
self.layers = {}
self.mx_cell_id_0 = et.SubElement(self.root, 'mxCell', id="0")
self.mx_cell_id_1 = et.SubElement(self.root, 'mxCell', id="1", parent="0")

self.add_layer()
self.debug_mode = debug_mode

def add_layer(self, layer_name: str = ''):
self.layers[self.get_current_layer_count() + 1] = layer_name
self.mx_cell_id_0 = et.SubElement(self.root, 'mxCell', id=f"{self.get_current_layer_count()}", parent="0")

def get_current_layer_count(self):
return len(self.layers)

prev_coords = {}

supported_vertex = {}
Expand Down
60 changes: 60 additions & 0 deletions tests/test_layers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from multicloud_diagrams import MultiCloudDiagrams
import xml.etree.ElementTree as et

from utils.utils import TestUtilities


class TestMultiCloudDiagramsLayers(TestUtilities):

def test_default_layer(self):
# given-when
mcd = MultiCloudDiagrams(debug_mode=True)

# then
tree = et.ElementTree(mcd.mxfile)
self.verify_mxfile_default(et.ElementTree(tree))

mx_cells = tree.findall("./*/*/*/")

self.verify_layers(mx_cells, 1, mcd)

def test_add_2_layers(self):
# given
mcd = MultiCloudDiagrams(debug_mode=True)

# when
mcd.add_layer('L2')

# then
tree = et.ElementTree(mcd.mxfile)
self.verify_mxfile_default(et.ElementTree(tree))

mx_cells = tree.findall("./*/*/*/")

self.verify_layers(mx_cells, 2, mcd)

def test_add_3_layers(self):
# given
mcd = MultiCloudDiagrams(debug_mode=True)

# when
mcd.add_layer('L2')
mcd.add_layer('L3')

# then
tree = et.ElementTree(mcd.mxfile)
self.verify_mxfile_default(et.ElementTree(tree))

mx_cells = tree.findall("./*/*/*/")

self.verify_layers(mx_cells, 3, mcd)

def verify_layers(self, mx_cells, layers_count, mcd):
self.assertEqual(layers_count + 1, len(mx_cells))
self.verify_mx_cell(mx_cells[0], expected={'id': '0'})
expected_layer = {1: ''}
for id in range(layers_count):
self.verify_mx_cell(mx_cells[id + 1], expected={'id': f'{id + 1}', 'parent': '0'})
if id > 0:
expected_layer[id + 1] = f'L{id + 1}'
self.assertEqual(expected_layer, mcd.layers)

0 comments on commit e210ec9

Please sign in to comment.