Пример #1
0
    def test_add_middle_mergeable(self):
        history = UndoHistory()
        example = SimpleExample(str_value='foo', value=10)
        undo_item = UndoItem(
            object=example,
            name='str_value',
            old_value='bar',
            new_value='baz',
        )

        history.add(
            UndoItem(
                object=example,
                name='str_value',
                old_value='foo',
                new_value='bar',
            ))
        history.add(
            UndoItem(
                object=example,
                name='str_value',
                old_value='bar',
                new_value='wombat',
            ), )
        history.undo()

        with self.assertTraitDoesNotChange(history, 'undoable'):
            with self.assertTraitChanges(history, 'redoable', count=1):
                history.add(undo_item)

        self.assertEqual(history.now, 1)
        self.assertTrue(history.can_undo)
        self.assertFalse(history.can_redo)
Пример #2
0
    def test_add_end_extend(self):
        history = UndoHistory()
        example = SimpleExample(str_value='foo', value=10)
        undo_item = UndoItem(
            object=example,
            name='value',
            old_value=0,
            new_value=10,
        )

        history.add(
            UndoItem(
                object=example,
                name='str_value',
                old_value='foo',
                new_value='bar',
            ))

        with self.assertTraitDoesNotChange(history, 'undoable'):
            with self.assertTraitDoesNotChange(history, 'redoable'):
                history.add(undo_item, extend=True)

        self.assertEqual(history.now, 1)
        self.assertTrue(history.can_undo)
        self.assertFalse(history.can_redo)
Пример #3
0
    def test_add_end_extend_merge(self):
        history = UndoHistory()
        example = SimpleExample(str_value='foo', value=10)
        undo_item = UndoItem(
            object=example,
            name='str_value',
            old_value='foo',
            new_value='baz',
        )

        history.add(
            UndoItem(
                object=example,
                name='str_value',
                old_value='foo',
                new_value='bar',
            ))

        with self.assertTraitDoesNotChange(history, 'undoable'):
            with self.assertTraitDoesNotChange(history, 'redoable'):
                history.add(undo_item, extend=True)

        self.assertEqual(history.now, 1)
        self.assertTrue(history.can_undo)
        self.assertFalse(history.can_redo)
        # XXX this is testing private state to ensure merge happened
        self.assertEqual(len(history.stack._stack), 1)
Пример #4
0
 def _populate_history(self, history):
     """Add some simple hostory items."""
     self._example = SimpleExample()
     history.add(
         UndoItem(
             object=self._example,
             name='str_value',
             old_value='foo',
             new_value='bar',
         )
     )
     history.add(
         UndoItem(
             object=self._example,
             name='str_value',
             old_value='bar',
             new_value='wombat',
         ),
     )
     history.add(
         UndoItem(
             object=self._example,
             name='str_value',
             old_value='wombat',
             new_value='baz',
         ),
     )
Пример #5
0
    def test_redo(self):
        example = SimpleExample(value=10)

        undo_item = UndoItem(
            object=example,
            name='value',
            old_value=10,
            new_value=11,
        )

        with self.assertTraitChanges(example, 'value', count=1):
            undo_item.redo()

        self.assertEqual(example.value, 11)
Пример #6
0
    def test_merge_different_undo_item_type(self):
        example_1 = SimpleExample()
        example_2 = SimpleExample()

        undo_item = UndoItem(
            object=example_1,
            name='any_value',
        )
        next_undo_item = ListUndoItem(
            object=example_2,
            name='any_value',
        )

        result = undo_item.merge(next_undo_item)

        self.assertFalse(result)
Пример #7
0
    def test_merge_unhandled_type(self):
        example = SimpleExample()

        undo_item = UndoItem(
            object=example,
            name='any_value',
            old_value={'foo', 'bar', 'baz'},
            new_value={'foo', 'wombat', 'baz'},
        )
        next_undo_item = UndoItem(
            object=example,
            name='any_value',
            old_value={'foo', 'wombat', 'baz'},
            new_value={'foo', 'fizz', 'baz'},
        )

        result = undo_item.merge(next_undo_item)

        self.assertFalse(result)
Пример #8
0
    def test_merge_sequence_change_length(self):
        example = SimpleExample()

        undo_item = UndoItem(
            object=example,
            name='tuple_value',
            old_value=('foo', 'bar', 'baz'),
            new_value=('foo', 'wombat', 'baz'),
        )
        next_undo_item = UndoItem(
            object=example,
            name='tuple_value',
            old_value=('foo', 'wombat', 'baz'),
            new_value=('foo', 'wombat', 'baz', 'fizz'),
        )

        result = undo_item.merge(next_undo_item)

        self.assertFalse(result)
Пример #9
0
    def test_merge_str_different(self):
        example = SimpleExample()

        undo_item = UndoItem(
            object=example,
            name='str_value',
            old_value='foo',
            new_value='bar',
        )
        next_undo_item = UndoItem(
            object=example,
            name='str_value',
            old_value='bar',
            new_value='wombat',
        )

        result = undo_item.merge(next_undo_item)

        self.assertFalse(result)
Пример #10
0
    def test_merge_different_value_types(self):
        example = SimpleExample()

        undo_item = UndoItem(
            object=example,
            name='any_value',
            old_value=10,
            new_value=11,
        )
        next_undo_item = UndoItem(
            object=example,
            name='any_value',
            old_value=11,
            new_value='foo',
        )

        result = undo_item.merge(next_undo_item)

        self.assertFalse(result)
Пример #11
0
    def test_merge_sequence_change_multiple_not_simple_types(self):
        example = SimpleExample()

        undo_item = UndoItem(
            object=example,
            name='tuple_value',
            old_value=(['foo'], 'bar', 'baz'),
            new_value=(['foo'], 'wombat', 'baz'),
        )
        next_undo_item = UndoItem(
            object=example,
            name='tuple_value',
            old_value=(['foo'], 'wombat', 'baz'),
            new_value=(['foo'], 'fizz', 'baz'),
        )

        result = undo_item.merge(next_undo_item)

        # XXX This is perhaps unexpected. See GitHub issue #1507.
        self.assertFalse(result)
Пример #12
0
    def test_merge_different_objects(self):
        example_1 = SimpleExample()
        example_2 = SimpleExample()

        undo_item = UndoItem(
            object=example_1,
            name='value',
            old_value=10,
            new_value=11,
        )
        next_undo_item = UndoItem(
            object=example_2,
            name='value',
            old_value=10,
            new_value=11,
        )

        result = undo_item.merge(next_undo_item)

        self.assertFalse(result)
Пример #13
0
    def test_merge_sequence_change_not_simple_types(self):
        example = SimpleExample()

        undo_item = UndoItem(
            object=example,
            name='tuple_value',
            old_value=('foo', ['bar'], 'baz'),
            new_value=('foo', ['wombat'], 'baz'),
        )
        next_undo_item = UndoItem(
            object=example,
            name='tuple_value',
            old_value=('foo', ['wombat'], 'baz'),
            new_value=('foo', ['fizz'], 'baz'),
        )

        result = undo_item.merge(next_undo_item)

        self.assertTrue(result)
        self.assertEqual(undo_item.old_value, ('foo', ['bar'], 'baz'))
        self.assertEqual(undo_item.new_value, ('foo', ['fizz'], 'baz'))
Пример #14
0
    def test_merge_str_same(self):
        example = SimpleExample()

        undo_item = UndoItem(
            object=example,
            name='str_value',
            old_value='foo',
            new_value='bar',
        )
        next_undo_item = UndoItem(
            object=example,
            name='str_value',
            old_value='bar',
            new_value='bar',
        )

        result = undo_item.merge(next_undo_item)

        self.assertTrue(result)
        self.assertEqual(undo_item.old_value, 'foo')
        self.assertEqual(undo_item.new_value, 'bar')
Пример #15
0
    def test_merge_numbers(self):
        example = SimpleExample()

        undo_item = UndoItem(
            object=example,
            name='value',
            old_value=10,
            new_value=11,
        )
        next_undo_item = UndoItem(
            object=example,
            name='value',
            old_value=11,
            new_value=12,
        )

        result = undo_item.merge(next_undo_item)

        self.assertTrue(result)
        self.assertEqual(undo_item.old_value, 10)
        self.assertEqual(undo_item.new_value, 12)