Example #1
0
 def testSequentialCalls(self):
     log = []
     EventLoop.call(log.append, 1)
     EventLoop.call(log.append, 2)
     EventLoop.call(log.append, 3)
     EventLoop.call(log.append, 4)
     EventLoop.call(EventLoop.stop)
     EventLoop.run()
     self.assertEqual(log, [1,2,3,4])
Example #2
0
        def testSequentialCalls(self):
            log = []
            EventLoop.call(log.append, 1)
            EventLoop.call(log.append, 2)
            EventLoop.call(log.append, 3)
            EventLoop.call(log.append, 4)

            class IdleTimer(trellis.Component):
                trellis.attrs(
                    idle_timeout=20,
                    busy=False,
                )
                idle_for = trellis.maintain(
                    lambda self: self.idle_for.begins_with(not self.busy),
                    initially=NOT_YET)

                @trellis.maintain  # XXX should be perform
                def alarm(self):
                    if self.idle_for[self.idle_timeout] and EventLoop.running:
                        log.append(5)
                        EventLoop.stop()

            it = IdleTimer()
            EventLoop.run()
            self.assertEqual(log, [1, 2, 3, 4, 5])
Example #3
0
        def testSequentialCalls(self):
            log = []
            EventLoop.call(log.append, 1)
            EventLoop.call(log.append, 2)
            EventLoop.call(log.append, 3)
            EventLoop.call(log.append, 4)

            class IdleTimer(trellis.Component):
                trellis.attrs(
                    idle_timeout = 20,
                    busy = False,
                )
                idle_for = trellis.maintain(
                    lambda self: self.idle_for.begins_with(not self.busy),
                    initially=NOT_YET
                )
                trellis.maintain()  # XXX should be perform
                def alarm(self):
                    if self.idle_for[self.idle_timeout] and EventLoop.running:
                        log.append(5)
                        EventLoop.stop()

            it = IdleTimer()
            EventLoop.run()
            self.assertEqual(log, [1,2,3,4,5])
Example #4
0
        def testSequentialCalls(self):
            log = []
            EventLoop.call(log.append, 1)
            EventLoop.call(log.append, 2)
            EventLoop.call(log.append, 3)
            EventLoop.call(log.append, 4)
            event = Time[0.00001]

            def c():
                if event:
                    # events aren't
                    EventLoop.call(EventLoop.stop)

            c = trellis.Cell(c)
            c.value

            # This will loop indefinitely, if sub-millisecond events aren't
            # rounded up to the next millisecond.
            EventLoop.run()
            self.frame.Destroy()
            self.assertEqual(log, [1, 2, 3, 4])
Example #5
0
        def testSequentialCalls(self):
            log = []
            EventLoop.call(log.append, 1)
            EventLoop.call(log.append, 2)
            EventLoop.call(log.append, 3)
            EventLoop.call(log.append, 4)
            event = Time[0.00001]

            def c():
                if event:
                    # events aren't
                    EventLoop.call(EventLoop.stop)

            c = trellis.Cell(c)
            c.value

            # This will loop indefinitely, if sub-millisecond events aren't
            # rounded up to the next millisecond.
            EventLoop.run()
            self.frame.Destroy()
            self.assertEqual(log, [1, 2, 3, 4])
Example #6
0
 def c():
     if event:
         # events aren't
         EventLoop.call(EventLoop.stop)
Example #7
0
class TestDefaultEventLoop(unittest.TestCase):
    def setUp(self):
        self.loop = EventLoop()
        self.ctrl = trellis.ctrl

    def testCallAndPoll(self):
        log = []
        self.loop.call(log.append, 1)
        self.loop.call(log.append, 2)
        self.assertEqual(log, [])
        self.loop.poll()
        self.assertEqual(log, [1])
        self.loop.poll()
        self.assertEqual(log, [1, 2])
        self.loop.poll()
        self.assertEqual(log, [1, 2])

    @a
    def testLoopIsNonAtomic(self):
        self.assertRaises(AssertionError, self.loop.poll)
        self.assertRaises(AssertionError, self.loop.flush)
        self.assertRaises(AssertionError, self.loop.run)

    def testCallAndFlush(self):
        log = []
        self.loop.call(log.append, 1)
        self.loop.call(log.append, 2)
        self.loop.call(self.loop.call, log.append, 3)
        self.assertEqual(log, [])
        self.loop.flush()
        self.assertEqual(log, [1, 2])
        self.loop.poll()
        self.assertEqual(log, [1, 2, 3])
        self.loop.poll()
        self.assertEqual(log, [1, 2, 3])

    def testUndoOfCall(self):
        log = []

        def do():
            self.loop.call(log.append, 1)
            sp = self.ctrl.savepoint()
            self.loop.call(log.append, 2)
            self.ctrl.rollback_to(sp)
            self.loop.call(log.append, 3)

        self.ctrl.atomically(do)
        self.assertEqual(log, [])
        self.loop.flush()
        self.assertEqual(log, [1, 3])

    def testScheduleUndo(self):
        t = Time()
        t.auto_update = False
        t20 = t[20]
        log = []

        @trellis.Cell
        def checktime():
            t.reached(t20)
            log.append(t._events[t20._when])

            @trellis.Performer
            def err_after_reached():
                if len(t._schedule) > 1:
                    raise DummyError

        self.assertRaises(DummyError, checktime.get_value)
        self.assertEqual(t._schedule, [t20._when, Max])
        self.assertEqual(dict(t._events), {t20._when: log[0]})
        del checktime
        self.failUnless(isinstance(log.pop(), trellis.Sensor))
        self.assertEqual(dict(t._events), {})
        self.assertEqual(log, [])

    def force_rollback(self):
        @trellis.Performer
        def do_it():
            raise DummyError

    def testUpdateUndo(self):
        t = Time()
        t.auto_update = False
        t20 = t[20]

        @trellis.Cell
        def checktime():
            if t.reached(t20):
                self.force_rollback()

        checktime.value
        self.assertEqual(t._schedule, [t20._when, Max])
        self.assertEqual(list(t._events), [t20._when])
        self.assertRaises(DummyError, t.advance, 20)
        self.assertEqual(t._schedule, [t20._when, Max])
        self.assertEqual(list(t._events), [t20._when])
Example #8
0
 def c():
     if event:
         # events aren't
         EventLoop.call(EventLoop.stop)
Example #9
0
class TestDefaultEventLoop(unittest.TestCase):
    def setUp(self):
        self.loop = EventLoop()
        self.ctrl = trellis.ctrl

    def testCallAndPoll(self):
        log = []
        self.loop.call(log.append, 1)
        self.loop.call(log.append, 2)
        self.assertEqual(log, [])
        self.loop.poll()
        self.assertEqual(log, [1])
        self.loop.poll()
        self.assertEqual(log, [1, 2])
        self.loop.poll()
        self.assertEqual(log, [1, 2])

    @a
    def testLoopIsNonAtomic(self):
        self.assertRaises(AssertionError, self.loop.poll)
        self.assertRaises(AssertionError, self.loop.flush)
        self.assertRaises(AssertionError, self.loop.run)

    def testCallAndFlush(self):
        log = []
        self.loop.call(log.append, 1)
        self.loop.call(log.append, 2)
        self.loop.call(self.loop.call, log.append, 3)
        self.assertEqual(log, [])
        self.loop.flush()
        self.assertEqual(log, [1, 2])
        self.loop.poll()
        self.assertEqual(log, [1, 2, 3])
        self.loop.poll()
        self.assertEqual(log, [1, 2, 3])

    def testUndoOfCall(self):
        log = []

        def do():
            self.loop.call(log.append, 1)
            sp = self.ctrl.savepoint()
            self.loop.call(log.append, 2)
            self.ctrl.rollback_to(sp)
            self.loop.call(log.append, 3)

        self.ctrl.atomically(do)
        self.assertEqual(log, [])
        self.loop.flush()
        self.assertEqual(log, [1, 3])

    def testScheduleUndo(self):
        t = Time()
        t.auto_update = False
        t20 = t[20]
        log = []

        @trellis.Cell
        def checktime():
            t.reached(t20)
            log.append(t._events[t20._when])

            @trellis.Performer
            def err_after_reached():
                if len(t._schedule) > 1:
                    raise DummyError

        self.assertRaises(DummyError, checktime.get_value)
        self.assertEqual(t._schedule, [t20._when, Max])
        self.assertEqual(dict(t._events), {t20._when: log[0]})
        del checktime
        self.failUnless(isinstance(log.pop(), trellis.Sensor))
        self.assertEqual(dict(t._events), {})
        self.assertEqual(log, [])

    def force_rollback(self):
        @trellis.Performer
        def do_it():
            raise DummyError

    def testUpdateUndo(self):
        t = Time()
        t.auto_update = False
        t20 = t[20]

        @trellis.Cell
        def checktime():
            if t.reached(t20):
                self.force_rollback()

        checktime.value
        self.assertEqual(t._schedule, [t20._when, Max])
        self.assertEqual(list(t._events), [t20._when])
        self.assertRaises(DummyError, t.advance, 20)
        self.assertEqual(t._schedule, [t20._when, Max])
        self.assertEqual(list(t._events), [t20._when])