def test_eventloop_schedule_action_periodic(self): scheduler = EventLoopScheduler(exit_if_empty=False) gate = threading.Semaphore(0) period = 0.05 counter = 3 def action(state): nonlocal counter if state: counter -= 1 return state - 1 if counter == 0: gate.release() disp = scheduler.schedule_periodic(period, action, counter) def dispose(scheduler, state): disp.dispose() gate.release() gate.acquire() assert counter == 0 assert scheduler._has_thread() is True scheduler.schedule(dispose) gate.acquire() assert scheduler._has_thread() is True sleep(period) scheduler.dispose() sleep(period) assert scheduler._has_thread() is False
def test_event_loop_schedule_action(self): scheduler = EventLoopScheduler(exit_if_empty=True) ran = [False] gate = threading.Semaphore(0) def action(scheduler, state): gate.release() ran[0] = True scheduler.schedule(action) gate.acquire() assert (ran[0] == True)
def test_event_loop_different_thread(self): thread_id = [None] scheduler = EventLoopScheduler(exit_if_empty=True) gate = threading.Semaphore(0) def action(scheduler, state): gate.release() thread_id[0] = threading.current_thread().ident scheduler.schedule(action) gate.acquire() assert (thread_id[0] != threading.current_thread().ident)
def test_event_loop_schedule_action(self): scheduler = EventLoopScheduler(exit_if_empty=True) ran = [False] gate = threading.Semaphore(0) def action(scheduler, state): gate.release() ran[0] = True scheduler.schedule(action) gate.acquire() assert (ran[0] is True)
def test_event_loop_schedule_ordered_actions(self): scheduler = EventLoopScheduler(exit_if_empty=True) gate = threading.Semaphore(0) result = [] scheduler.schedule(lambda s, t: result.append(1)) def action(scheduler, state): gate.release() result.append(2) scheduler.schedule(action) gate.acquire() assert (result == [1, 2])
def test_event_loop_different_thread(self): thread_id = None scheduler = EventLoopScheduler(exit_if_empty=True) gate = threading.Semaphore(0) def action(scheduler, state): nonlocal thread_id thread_id = threading.current_thread().ident gate.release() scheduler.schedule(action) gate.acquire() assert thread_id != threading.current_thread().ident assert scheduler._has_thread() is False
def test_event_loop_schedule_action(self): scheduler = EventLoopScheduler(exit_if_empty=True) ran = False gate = threading.Semaphore(0) def action(scheduler, state): nonlocal ran ran = True gate.release() scheduler.schedule(action) gate.acquire() assert ran is True assert scheduler._has_thread() is False
def test_event_loop_schedule_ordered_actions(self): scheduler = EventLoopScheduler(exit_if_empty=True) gate = threading.Semaphore(0) result = [] scheduler.schedule(lambda s, t: result.append(1)) def action(scheduler, state): gate.release() result.append(2) scheduler.schedule(action) gate.acquire() assert (result == [1,2])
def test_event_loop_schedule_ordered_actions_due(self): scheduler = EventLoopScheduler(exit_if_empty=True) gate = threading.Semaphore(0) result = [] def action(scheduler, state): result.append(3) gate.release() scheduler.schedule_relative(0.10, action) scheduler.schedule_relative(0.05, lambda s, t: result.append(2)) scheduler.schedule(lambda s, t: result.append(1)) gate.acquire() assert result == [1, 2, 3] assert scheduler._has_thread() is False
def test_event_loop_schedule_ordered_actions_due(self): scheduler = EventLoopScheduler(exit_if_empty=True) gate = threading.Semaphore(0) result = [] def action(scheduler, state): result.append(3) gate.release() scheduler.schedule_relative(0.4, action) scheduler.schedule_relative(0.2, lambda s, t: result.append(2)) scheduler.schedule(lambda s, t: result.append(1)) gate.acquire() assert result == [1, 2, 3] assert scheduler._has_thread() is False
def test_eventloop_schedule_dispose(self): scheduler = EventLoopScheduler(exit_if_empty=False) scheduler.dispose() ran = False def action(scheduler, state): nonlocal ran ran = True with pytest.raises(DisposedException): scheduler.schedule(action) assert ran is False assert scheduler._has_thread() is False
def test_eventloop_schedule_dispose(self): scheduler = EventLoopScheduler(exit_if_empty=False) scheduler.dispose() ran = False def action(scheduler, state): nonlocal ran ran = True exc = None try: scheduler.schedule(action) except Exception as e: exc = e finally: assert isinstance(exc, DisposedException) assert ran is False assert scheduler._has_thread() is False