Fix undo of attributes and enumerations
By setting the default value on unlink. Fixes #643.
This commit is contained in:
parent
ec284579c4
commit
555de03749
@ -204,9 +204,7 @@ class attribute(umlproperty, Generic[T]):
|
||||
raise TypeError(error_msg)
|
||||
|
||||
def unlink(self, obj):
|
||||
old = self._get(obj)
|
||||
log.debug("Unlink attribute %s.%s", obj, self.name)
|
||||
self.handle(AttributeUpdated(obj, self, old, old))
|
||||
self._set(obj, self.default)
|
||||
|
||||
def __str__(self):
|
||||
return f"<attribute {self.name}: {self.type} = {self.default}>"
|
||||
@ -282,8 +280,7 @@ class enumeration(umlproperty):
|
||||
setattr(obj, self._name, value)
|
||||
|
||||
def unlink(self, obj):
|
||||
old = self._get(obj)
|
||||
self.handle(AttributeUpdated(obj, self, old, old))
|
||||
self._set(obj, self.default)
|
||||
|
||||
def _set(self, obj, value):
|
||||
if value not in self.values:
|
||||
|
@ -92,19 +92,24 @@ def test_class_association_undo_redo(event_manager, element_factory, undo_manage
|
||||
undo_manager.redo_transaction()
|
||||
|
||||
|
||||
def test_diagram_item_can_undo_(event_manager, element_factory, undo_manager, caplog):
|
||||
def test_diagram_item_can_undo_and_redo(
|
||||
event_manager, element_factory, undo_manager, caplog
|
||||
):
|
||||
caplog.set_level(logging.INFO)
|
||||
with Transaction(event_manager):
|
||||
diagram = element_factory.create(Diagram)
|
||||
|
||||
with Transaction(event_manager):
|
||||
cls = diagram.create(ClassItem, subject=element_factory.create(UML.Class))
|
||||
cls.subject.name = "name"
|
||||
cls.matrix.translate(10, 10)
|
||||
|
||||
undo_manager.undo_transaction()
|
||||
undo_manager.redo_transaction()
|
||||
|
||||
assert diagram.ownedPresentation[0].matrix.tuple() == (1, 0, 0, 1, 10, 10)
|
||||
new_cls = diagram.ownedPresentation[0]
|
||||
assert new_cls.matrix.tuple() == (1, 0, 0, 1, 10, 10)
|
||||
assert new_cls.subject, element_factory.select()
|
||||
assert new_cls.subject.name == "name"
|
||||
assert not caplog.records
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user