Fix undo of attributes and enumerations

By setting the default value on unlink.

Fixes #643.
This commit is contained in:
Arjan Molenaar 2021-02-11 21:46:40 +01:00
parent ec284579c4
commit 555de03749
No known key found for this signature in database
GPG Key ID: BF977B918996CB13
2 changed files with 10 additions and 8 deletions

View File

@ -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:

View File

@ -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