Changeset 2210

Show
Ignore:
Timestamp:
02/11/08 22:28:15 (3 months ago)
Author:
arj..@yirdis.nl
Message:

Added testcase that exposes bug #95

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • gaphor/trunk/gaphor/diagram/diagramitem.py

    r2185 r2210  
    216216        Remove the item from the canvas and set subject to None. 
    217217        """ 
     218        super(DiagramItem, self).unlink() 
     219        self.subject = None 
    218220        if self.canvas: 
    219             try: 
    220                 self.canvas.remove(self) 
    221             except KeyError: 
    222                 # Canvas was already removed 
    223                 pass 
    224         self.subject = None 
    225         super(DiagramItem, self).unlink() 
     221            #try: 
     222            self.canvas.remove(self) 
     223            #except KeyError: 
     224            #    # Canvas was already removed 
     225            #    pass 
    226226 
    227227 
  • gaphor/trunk/gaphor/services/undomanager.py

    r2191 r2210  
    161161        Add an action to undo. An action 
    162162        """ 
    163         #log.debug('add_undo_action: %s %s' % (self._current_transaction, action)) 
    164         if not self._current_transaction: 
    165             return 
    166  
    167         self._current_transaction.add(action) 
    168         self._app.handle(UndoManagerStateChanged(self)) 
    169  
    170         # TODO: should this be placed here? 
    171         self._action_executed() 
     163        if self._current_transaction: 
     164            log.debug('add_undo_action: %s %s' % (self._current_transaction, action)) 
     165            self._current_transaction.add(action) 
     166            self._app.handle(UndoManagerStateChanged(self)) 
     167 
     168            # TODO: should this be placed here? 
     169            self._action_executed() 
    172170 
    173171    @component.adapter(TransactionCommit) 
     
    288286    ## 
    289287 
    290     def _undo_handler(self, event): 
     288    def _gaphas_undo_handler(self, event): 
     289        print 'Gaphas event:', event 
    291290        self.add_undo_action(lambda: state.saveapply(*event)); 
    292291 
     
    303302        state.observers.add(state.revert_handler) 
    304303 
    305         state.subscribers.add(self._undo_handler) 
     304        state.subscribers.add(self._gaphas_undo_handler) 
    306305 
    307306    def _unregister_undo_handlers(self): 
     
    316315        state.observers.discard(state.revert_handler) 
    317316 
    318         state.subscribers.discard(self._undo_handler) 
     317        state.subscribers.discard(self._gaphas_undo_handler) 
    319318 
    320319 
  • gaphor/trunk/tests/test_association_undo.py

    r2207 r2210  
    123123        #assert len(y_cons) == 0, y_cons 
    124124 
     125    def testAssociationDelete(self): 
     126        factory = Application.get_service('element_factory') 
     127        undo_manager = Application.get_service('undo_manager') 
     128 
     129        diagram = factory.create(UML.Diagram) 
     130        solver = diagram.canvas.solver 
     131         
     132        class1 = factory.create(UML.Class) 
     133        class1.name = 'class1' 
     134        classItem1 = diagram.create(items.ClassItem, subject=class1) 
     135 
     136        class2 = factory.create(UML.Class) 
     137        class2.name = 'class2' 
     138        classItem2 = diagram.create(items.ClassItem, subject=class2) 
     139         
     140        assoc = diagram.create(items.AssociationItem) 
     141        assert assoc.subject is None 
     142 
     143        adapter = component.queryMultiAdapter((classItem1, assoc), IConnect) 
     144        assert adapter 
     145        adapter.connect(assoc.handles()[0]) 
     146         
     147        adapter = component.queryMultiAdapter((classItem2, assoc), IConnect) 
     148        assert adapter 
     149        adapter.connect(assoc.handles()[1]) 
     150         
     151        assoc_subject = assoc.subject 
     152        assert assoc.subject 
     153        assert assoc.head_end.subject 
     154        assert assoc.tail_end.subject 
     155        assert assoc.head.connected_to is classItem1 
     156        assert assoc.tail.connected_to is classItem2 
     157 
     158        former = (assoc.subject, assoc.head_end.subject, assoc.tail_end.subject) 
     159 
     160        assert len(solver._constraints) == 14, len(solver._constraints) 
     161 
     162        tx = transaction.Transaction() 
     163 
     164        assoc.unlink() 
     165         
     166        tx.commit() 
     167 
     168        assert assoc.canvas is None 
     169        assert assoc.subject is None 
     170        assert assoc.head_end.subject is None 
     171        assert assoc.tail_end.subject is None 
     172        assert assoc.head.connected_to is None 
     173        assert assoc.tail.connected_to is None 
     174 
     175        assert undo_manager.can_undo() 
     176 
     177        print 
     178        print '-' * 80 
     179        print 
     180 
     181        undo_manager.undo_transaction() 
     182 
     183        print 
     184        print '-' * 80 
     185        print 
     186 
     187        assert not undo_manager.can_undo() 
     188 
     189        assert assoc.canvas 
     190        assert assoc.subject is assoc_subject 
     191        assert assoc.head_end.subject 
     192        assert assoc.tail_end.subject 
     193 
     194        assert len(solver._constraints) == 14, len(solver._constraints) 
     195        assert assoc.head.connected_to is classItem1, assoc.head.connected_to 
     196        assert assoc.tail.connected_to is classItem2, assoc.head.connected_to 
     197 
    125198 
    126199if __name__ == '__main__':