Beispiel #1
0
    def testUndoError(self):
        """
        Undo a stack containing a failing action.
        """
        state = {"done": True}

        def doneCb(action, value):
            state["done"] = value

        state["actions"] = 2

        class Action(UndoableAction):
            def undo(self):
                state["actions"] -= 1
                if state["actions"] == 1:
                    self.__class__.undo = self.__class__.undo_fail

                self._undone()

            def undo_fail(self):
                raise UndoError("meh")

        stack = UndoableActionStack("meh")
        stack.connect("done", doneCb)
        action1 = Action()
        action2 = Action()
        stack.push(action1)
        stack.push(action2)

        self.failUnlessRaises(UndoError, stack.undo)
        self.failUnlessEqual(state["actions"], 1)
        self.failUnless(state["done"])
Beispiel #2
0
    def testDoUndoEmpty(self):
        """
        Undo an empty stack.
        """
        state = {"done": True}

        def doneCb(action, value):
            state["done"] = value

        stack = UndoableActionStack("meh")
        stack.connect("done", doneCb, True)
        stack.connect("undone", doneCb, False)

        stack.undo()
        self.failIf(state["done"])

        stack.do()
        self.failUnless(state["done"])
Beispiel #3
0
    def testDoUndoEmpty(self):
        """
        Undo an empty stack.
        """
        state = {"done": True}
        def doneCb(action, value):
            state["done"] = value

        stack = UndoableActionStack("meh")
        stack.connect("done", doneCb, True)
        stack.connect("undone", doneCb, False)

        stack.undo()
        self.failIf(state["done"])

        stack.do()
        self.failUnless(state["done"])
Beispiel #4
0
    def testUndoError(self):
        """
        Undo a stack containing a failing action.
        """
        state = {"done": True}

        def doneCb(action, value):
            state["done"] = value

        state["actions"] = 2

        class Action(UndoableAction):
            def undo(self):
                state["actions"] -= 1
                if state["actions"] == 1:
                    self.__class__.undo = self.__class__.undo_fail

                self._undone()

            def undo_fail(self):
                raise UndoError("meh")

        stack = UndoableActionStack("meh")
        stack.connect("done", doneCb)
        action1 = Action()
        action2 = Action()
        stack.push(action1)
        stack.push(action2)

        self.failUnlessRaises(UndoError, stack.undo)
        self.failUnlessEqual(state["actions"], 1)
        self.failUnless(state["done"])
Beispiel #5
0
    def testUndoDo(self):
        """
        Test an undo() do() sequence.
        """
        state = {"done": True, "actions": 2}

        def doneCb(action, value):
            state["done"] = value

        state["done"] = 2

        class Action(UndoableAction):
            def do(self):
                state["actions"] += 1
                self._done()

            def undo(self):
                state["actions"] -= 1
                self._undone()

        stack = UndoableActionStack("meh")
        stack.connect("done", doneCb, True)
        stack.connect("undone", doneCb, False)
        action1 = Action()
        action2 = Action()
        stack.push(action1)
        stack.push(action2)

        stack.undo()
        self.failUnlessEqual(state["actions"], 0)
        self.failIf(state["done"])

        stack.do()
        self.failUnlessEqual(state["actions"], 2)
        self.failUnless(state["done"])
Beispiel #6
0
    def testUndoDo(self):
        """
        Test an undo() do() sequence.
        """
        state = {"done": True, "actions": 2}

        def doneCb(action, value):
            state["done"] = value

        state["done"] = 2

        class Action(UndoableAction):
            def do(self):
                state["actions"] += 1
                self._done()

            def undo(self):
                state["actions"] -= 1
                self._undone()

        stack = UndoableActionStack("meh")
        stack.connect("done", doneCb, True)
        stack.connect("undone", doneCb, False)
        action1 = Action()
        action2 = Action()
        stack.push(action1)
        stack.push(action2)

        stack.undo()
        self.failUnlessEqual(state["actions"], 0)
        self.failIf(state["done"])

        stack.do()
        self.failUnlessEqual(state["actions"], 2)
        self.failUnless(state["done"])