def test_no_double_start_or_stop(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     event_scheduler.start()
     result = event_scheduler.start()
     self.assertEqual(result, -1)
     event_scheduler.stop()
     result = event_scheduler.stop()
     self.assertEqual(result, -1)
 def test_execute_one_event(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     event_scheduler.start()
     result_list = []
     event_scheduler.enter(0, 0, insert_into_list, ('A', result_list))
     event_scheduler.stop()
     self.assertTrue(result_list)
     self.assertEqual(result_list[0], 'A')
 def test_event_time_in_the_past(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     event_scheduler.enterabs(-1, 1, insert_into_list, ('A', result_list))
     TestTimer.advance_time(0)
     event_scheduler.stop()
     self.assertListEqual(result_list, ['A'])
 def test_stop_scheduler_hard_stop(self):
     # With a hard stop, the event scheduler clear all of the upcoming
     # events from the queue when stopping.
     event_scheduler = EventScheduler(TEST_THREAD)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     event_scheduler.enterabs(30, 1, insert_into_list, ('A', result_list))
     event_scheduler.stop(True)
     self.assertListEqual(result_list, [])
 def test_event_scheduler_stopped(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     result_list = []
     event_scheduler.enter(0, 0, insert_into_list, ('A', result_list))
     TestTimer.advance_time(0)
     self.assertFalse(result_list)
     event_scheduler.start()
     event_scheduler.stop()
     event_scheduler.enter(0, 0, insert_into_list, ('A', result_list))
     TestTimer.advance_time(0)
     self.assertFalse(result_list)
 def test_relative_delay(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     item = 'A'
     event_scheduler.enter(3, 0, insert_into_list, (item, result_list))
     TestTimer.advance_time(2)
     self.assertListEqual(result_list, [])
     TestTimer.advance_time(1)
     self.assertListEqual(result_list, [item])
     event_scheduler.stop()
 def test_cancel_recurring_event(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     event_id = event_scheduler.enter_recurring(5, 0, insert_into_list,
                                                ('A', result_list))
     TestTimer.advance_time(5)
     self.assertListEqual(result_list, ['A'])
     event_scheduler.cancel_recurring(event_id)
     TestTimer.advance_time(5)
     self.assertListEqual(result_list, ['A'])
     event_scheduler.stop(True)
 def test_cancel_event(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     event = event_scheduler.enterabs(2, 1, insert_into_list,
                                      ('A', result_list))
     event_scheduler.enterabs(2, 3, insert_into_list, ('B', result_list))
     TestTimer.advance_time(1)
     event_scheduler.cancel(event)
     TestTimer.advance_time(1)
     event_scheduler.stop()
     self.assertListEqual(result_list, ['B'])
 def test_cancel_event_after_execution(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     event = event_scheduler.enter(2, 4, insert_into_list, (), {
         'item': 'B',
         'list_obj': result_list
     })
     TestTimer.advance_time(2.5)
     # cancelling an already executed event should be a no-op
     event_scheduler.cancel(event)
     self.assertListEqual(result_list, ['B'])
     event_scheduler.stop(True)
 def test_priority(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     event_scheduler.enterabs(4, 4, insert_into_list, ('C', result_list))
     event_scheduler.enterabs(4, 3, insert_into_list, ('B', result_list))
     event_scheduler.enterabs(4, 5, insert_into_list, ('D', result_list))
     event_scheduler.enterabs(4, 1, insert_into_list, ('A', result_list))
     TestTimer.advance_time(3.8)
     self.assertListEqual(result_list, [])
     TestTimer.advance_time(0.3)
     event_scheduler.stop()
     self.assertListEqual(result_list, ['A', 'B', 'C', 'D'])
 def test_multiple_events_built_in_timer(self):
     # We should test the built-in timer to make sure it's working as
     # expected. We can also test the hard stop being set to false, (the
     # event scheduler should execute all remaining events in the queue
     # before stopping).
     event_scheduler = EventScheduler(TEST_THREAD)
     event_scheduler.start()
     result_list = []
     event_scheduler.enter_recurring(1.2, 0, insert_into_list,
                                     ('#', result_list))
     event_scheduler.enterabs(0.2, 1, insert_into_list, ('A', result_list))
     event_scheduler.enterabs(0.4, 1, insert_into_list, ('B', result_list))
     event_scheduler.enterabs(0.7, 1, insert_into_list, ('C', result_list))
     event_scheduler.enterabs(1, 1, insert_into_list, ('D', result_list))
     event_scheduler.stop(False)
     self.assertListEqual(result_list, ['A', 'B', 'C', 'D', '#'])
 def test_multiple_recurring_events(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     event_scheduler.enter_recurring(5, 0, insert_into_list,
                                     ('A', result_list))
     event_scheduler.enter_recurring(2, 0, insert_into_list,
                                     ('B', result_list))
     TestTimer.advance_time(2)
     self.assertListEqual(result_list, ['B'])
     TestTimer.advance_time(3)
     self.assertListEqual(result_list, ['B', 'B', 'A'])
     TestTimer.advance_time(5)
     self.assertListEqual(result_list, ['B', 'B', 'A', 'B', 'B', 'A', 'B'])
     event_scheduler.stop(True)
 def test_recurring_event_kwargs(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     event_scheduler.enter_recurring(5, 0, insert_into_list, (), {
         'item': 'A',
         'list_obj': result_list
     })
     TestTimer.advance_time(2)
     self.assertListEqual(result_list, [])
     TestTimer.advance_time(3)
     self.assertListEqual(result_list, ['A'])
     TestTimer.advance_time(5)
     self.assertListEqual(result_list, ['A', 'A'])
     event_scheduler.stop(True)
 def test_cancel_all_events(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     event_scheduler.enter_recurring(5, 0, insert_into_list,
                                     ('A', result_list))
     event_scheduler.enter_recurring(2, 0, insert_into_list,
                                     ('B', result_list))
     event_scheduler.enter(0, 0, insert_into_list, ('C', result_list))
     TestTimer.advance_time(1)
     self.assertListEqual(result_list, ['C'])
     event_scheduler.enter(1, 0, insert_into_list, ('D', result_list))
     TestTimer.advance_time(0.2)
     event_scheduler.cancel_all()
     self.assertListEqual(result_list, ['C'])
     event_scheduler.stop(False)
 def test_multiple_events_different_times(self):
     event_scheduler = EventScheduler(TEST_THREAD, TestTimer.monotonic,
                                      TestTimer)
     TestTimer.set_event_scheduler(event_scheduler)
     event_scheduler.start()
     result_list = []
     event_scheduler.enterabs(5, 1, insert_into_list, ('D', result_list))
     event_scheduler.enterabs(4, 1, insert_into_list, ('B', result_list))
     event_scheduler.enterabs(7, 1, insert_into_list, ('E', result_list))
     event_scheduler.enterabs(1, 1, insert_into_list, ('A', result_list))
     self.assertListEqual(result_list, [])
     TestTimer.advance_time(1)
     self.assertListEqual(result_list, ['A'])
     TestTimer.advance_time(3)
     self.assertListEqual(result_list, ['A', 'B'])
     event_scheduler.enterabs(0.5, 1, insert_into_list, ('C', result_list))
     TestTimer.advance_time(1)
     self.assertListEqual(result_list, ['A', 'B', 'C', 'D'])
     TestTimer.advance_time(2)
     self.assertListEqual(result_list, ['A', 'B', 'C', 'D', 'E'])
     event_scheduler.stop()
 def test_breathing(self):
     event_scheduler = EventScheduler(TEST_THREAD)
     result = event_scheduler.start()
     self.assertEqual(result, 0)
     result = event_scheduler.stop()
     self.assertEqual(result, 0)