def test_gtk_schedule_action_absolute(self): scheduler = GtkScheduler() gate = threading.Semaphore(0) starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() due = scheduler.now + timedelta(milliseconds=100) scheduler.schedule_absolute(due, action) def done(data): Gtk.main_quit() gate.release() return False GLib.timeout_add(200, done, None) Gtk.main() gate.acquire() assert endtime is not None diff = endtime - starttime assert diff > timedelta(milliseconds=80)
def test_qt5_schedule_action_due_absolute(self): app = make_app() scheduler = QtScheduler(QtCore) gate = threading.Semaphore(0) starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() scheduler.schedule_absolute(starttime + timedelta(seconds=0.2), action) def done(): app.quit() gate.release() QtCore.QTimer.singleShot(300, done) app.exec_() gate.acquire() assert endtime is not None diff = endtime - starttime assert diff > timedelta(milliseconds=180)
def now(self): """Represents a notion of time for this scheduler. Tasks being scheduled on a scheduler will adhere to the time denoted by this property. """ return default_now()
def test_scheduleditem_cancel(self): scheduler = ScheduledItemTestScheduler() item = ScheduledItem(scheduler, None, lambda s, t: None, default_now()) item.cancel() assert item.disposable.is_disposed assert item.is_cancelled()
def action(scheduler, state=None): nonlocal xx xx = state def inner_action(scheduler, state=None): nonlocal yy yy = state return Disposable() return scheduler.schedule_absolute(default_now(), inner_action, 43)
def now(self) -> datetime: """Represents a notion of time for this scheduler. Tasks being scheduled on a scheduler will adhere to the time denoted by this property. Returns: The scheduler's current time, as a datetime instance. """ return default_now()
def test_schedule_action_absolute(self): ident = threading.current_thread().ident evt = threading.Event() nt = thread_pool_scheduler def action(scheduler, state): assert ident != threading.current_thread().ident evt.set() nt.schedule_absolute(default_now() + timedelta(milliseconds=100), action) evt.wait()
def test_immediate_simple2(self): scheduler = ImmediateScheduler() xx = 0 def action(scheduler, state=None): nonlocal xx xx = state return Disposable() scheduler.schedule_absolute(default_now(), action, 42) assert xx == 42
def test_scheduleditem_compare(self): scheduler = ScheduledItemTestScheduler() duetime1 = default_now() duetime2 = duetime1 + timedelta(seconds=1) item1 = ScheduledItem(scheduler, None, lambda s, t: None, duetime1) item2 = ScheduledItem(scheduler, None, lambda s, t: None, duetime2) item3 = ScheduledItem(scheduler, None, lambda s, t: None, duetime1) assert item1 < item2 assert item2 > item3 assert item1 == item3
def test_timeout_schedule_action_due(self): scheduler = TimeoutScheduler() starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() scheduler.schedule_relative(timedelta(milliseconds=200), action) sleep(0.3) assert endtime is not None diff = endtime - starttime assert diff > timedelta(milliseconds=180)
def test_new_thread_schedule_action_due(self): scheduler = NewThreadScheduler() starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() scheduler.schedule_relative(timedelta(milliseconds=200), action) sleep(0.3) assert endtime is not None diff = endtime - starttime assert diff > timedelta(milliseconds=180)
def test_event_loop_schedule_action_absolute_due(self): scheduler = EventLoopScheduler(exit_if_empty=True) gate = threading.Semaphore(0) starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() gate.release() scheduler.schedule_absolute(scheduler.now, action) gate.acquire() diff = endtime - starttime assert diff < timedelta(milliseconds=180) assert scheduler._has_thread() is False
def test_tkinter_schedule_action_due(self): scheduler = TkinterScheduler(root) starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() scheduler.schedule_relative(0.2, action) def done(): root.quit() assert endtime is not None diff = endtime - starttime assert diff > timedelta(milliseconds=180) root.after(300, done) root.mainloop()
def test_wx_schedule_action_relative(self): app = wx.AppConsole() exit = AppExit(app) scheduler = WxScheduler(wx) starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() scheduler.schedule_relative(0.1, action) exit.Start(200, wx.TIMER_ONE_SHOT) app.MainLoop() scheduler.cancel_all() assert endtime is not None diff = endtime - starttime assert timedelta(milliseconds=80) < diff < timedelta(milliseconds=180)
def test_event_loop_schedule_action_absolute_due(self): scheduler = EventLoopScheduler(exit_if_empty=True) gate = threading.Semaphore(0) starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() gate.release() scheduler.schedule_absolute(scheduler.now, action) gate.acquire() # There is no guarantee that the event-loop thread ends before the # test thread is re-scheduled, give it some time to always run. sleep(0.1) diff = endtime - starttime assert diff < timedelta(milliseconds=180) assert scheduler._has_thread() is False
def test_wx_schedule_action_absolute(self): app = make_app() exit = AppExit(app) scheduler = WxScheduler(wx) starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() due = scheduler.now + timedelta(milliseconds=100) scheduler.schedule_absolute(due, action) exit.Start(200, wx.TIMER_ONE_SHOT) app.MainLoop() scheduler.cancel_all() assert endtime is not None diff = endtime - starttime assert timedelta(milliseconds=80) < diff < timedelta(milliseconds=180)
def test_scheduleditem_invoke(self): scheduler = ScheduledItemTestScheduler() disposable = Disposable() state = 42 ran = False def action(scheduler, state): nonlocal ran ran = True return disposable item = ScheduledItem(scheduler, state, action, default_now()) item.invoke() assert ran is True assert item.disposable.disposable is disposable assert scheduler.disposable is disposable assert scheduler.state is state assert scheduler.action is action
def test_immediate_recursive2(self): scheduler = ImmediateScheduler() xx = 0 yy = 0 def action(scheduler, state=None): nonlocal xx xx = state def inner_action(scheduler, state=None): nonlocal yy yy = state return Disposable() return scheduler.schedule_absolute(default_now(), inner_action, 43) scheduler.schedule_absolute(default_now(), action, 42) assert xx == 42 assert yy == 43
def test_pygame_schedule_action_due_absolute(self): scheduler = PyGameScheduler() starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() scheduler.schedule_absolute(starttime + timedelta(seconds=0.1), action) scheduler.run() assert endtime is None sleep(0.2) scheduler.run() assert endtime is not None diff = endtime - starttime assert diff > timedelta(milliseconds=180)
def test_pyside2_schedule_action_due_absolute(self, app): scheduler = QtScheduler(QtCore) gate = threading.Semaphore(0) starttime = default_now() endtime = None def action(scheduler, state): nonlocal endtime endtime = default_now() scheduler.schedule_absolute(starttime + timedelta(seconds=0.2), action) def done(): app.quit() gate.release() QtCore.QTimer.singleShot(300, done) app.exec_() gate.acquire() assert endtime is not None diff = endtime - starttime assert diff > timedelta(milliseconds=180)
def test_pygame_schedule_now(self): scheduler = PyGameScheduler() diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def test_immediate_now(self): scheduler = ImmediateScheduler() diff = scheduler.now - default_now() assert abs(diff) <= timedelta(milliseconds=1)
def test_immediate_now(self): scheduler = ImmediateScheduler() diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def default_now(self): return default_now()
def test_qt5_schedule_now(self): scheduler = QtScheduler(QtCore) diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def test_wx_schedule_now(self): scheduler = WxScheduler(wx) diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def test_gtk_schedule_now(self): scheduler = GtkScheduler() diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def test_tkinter_schedule_now(self): scheduler = TkinterScheduler(root) res = scheduler.now - default_now() assert abs(res) < timedelta(milliseconds=1)
def test_threadpool_now(self): scheduler = ThreadPoolScheduler() diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def action(scheduler, state): nonlocal endtime endtime = default_now()
def test_trampoline_now(self): scheduler = TrampolineScheduler() diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def test_new_thread_now(self): scheduler = NewThreadScheduler() diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def test_timeout_now(self): scheduler = TimeoutScheduler() diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def test_pyside2_schedule_now(self): scheduler = QtScheduler(QtCore) diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def test_new_thread_now(self): scheduler = NewThreadScheduler() diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=5)
def test_event_loop_now(self): scheduler = EventLoopScheduler() diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)
def test_currentthread_now(self): scheduler = CurrentThreadScheduler() diff = scheduler.now - default_now() assert abs(diff) < timedelta(milliseconds=1)