92 lines
3.2 KiB
Python
92 lines
3.2 KiB
Python
from gaphor import UML
|
|
from gaphor.application import distribution
|
|
from gaphor.storage import storage
|
|
from gaphor.tests import TestCase
|
|
from gaphor.UML.actions import ActionItem, FlowItem
|
|
|
|
|
|
class ActionIssueTestCase(TestCase):
|
|
def test_it(self):
|
|
"""Test an issue when loading a freshly created action diagram."""
|
|
ef = self.element_factory
|
|
modeling_language = self.modeling_language
|
|
path = distribution().locate_file("test-models/action-issue.gaphor")
|
|
storage.load(path, ef, modeling_language)
|
|
|
|
actions = ef.lselect(UML.Action)
|
|
flows = ef.lselect(UML.ControlFlow)
|
|
assert 3 == len(actions)
|
|
assert 3 == len(flows)
|
|
|
|
# Actions live in partitions:
|
|
partitions = ef.lselect(UML.ActivityPartition)
|
|
assert 2 == len(partitions)
|
|
|
|
# Okay, so far the data model is saved correctly. Now, how do the
|
|
# handles behave?
|
|
diagrams = ef.lselect(UML.Diagram)
|
|
assert 1 == len(diagrams)
|
|
|
|
diagram = diagrams[0]
|
|
assert 7 == len(list(diagram.get_all_items()))
|
|
# Part, Act, Act, Act, Flow, Flow, Flow
|
|
|
|
for e in actions + flows:
|
|
assert 1 == len(e.presentation), e
|
|
for i in diagram.select(lambda e: isinstance(e, (FlowItem, ActionItem))):
|
|
assert i.subject, i
|
|
|
|
# Loaded as:
|
|
#
|
|
# actions[0] --> flows[0, 1]
|
|
# flows[0, 2] --> actions[1]
|
|
# flows[1] --> actions[2] --> flows[2]
|
|
|
|
# start element:
|
|
assert actions[0].outgoing[0] is flows[0]
|
|
assert actions[0].outgoing[1] is flows[1]
|
|
assert actions[2].outgoing[0] is flows[2]
|
|
assert not actions[0].incoming
|
|
|
|
(cinfo,) = diagram.connections.get_connections(
|
|
handle=flows[0].presentation[0].head
|
|
)
|
|
assert cinfo.connected is actions[0].presentation[0]
|
|
(cinfo,) = diagram.connections.get_connections(
|
|
handle=flows[1].presentation[0].head
|
|
)
|
|
assert cinfo.connected is actions[0].presentation[0]
|
|
|
|
# Intermediate element:
|
|
assert actions[2].incoming[0] is flows[1]
|
|
assert actions[2].outgoing[0] is flows[2]
|
|
|
|
(cinfo,) = diagram.connections.get_connections(
|
|
handle=flows[1].presentation[0].tail
|
|
)
|
|
assert cinfo.connected is actions[2].presentation[0]
|
|
(cinfo,) = diagram.connections.get_connections(
|
|
handle=flows[2].presentation[0].head
|
|
)
|
|
assert cinfo.connected is actions[2].presentation[0]
|
|
|
|
# Final element:
|
|
assert actions[1].incoming[0] is flows[0]
|
|
assert actions[1].incoming[1] is flows[2]
|
|
|
|
(cinfo,) = diagram.connections.get_connections(
|
|
handle=flows[0].presentation[0].tail
|
|
)
|
|
assert cinfo.connected is actions[1].presentation[0]
|
|
(cinfo,) = diagram.connections.get_connections(
|
|
handle=flows[2].presentation[0].tail
|
|
)
|
|
assert cinfo.connected is actions[1].presentation[0]
|
|
|
|
# Test the parent-child connectivity
|
|
for a in actions:
|
|
(p,) = a.inPartition
|
|
assert p
|
|
assert a.presentation[0].parent
|
|
assert a.presentation[0].parent is p.presentation[0]
|