def test__run_once(self): h1 = events.TimerHandle(time.monotonic() + 5.0, lambda: True, ()) h2 = events.TimerHandle(time.monotonic() + 10.0, lambda: True, ()) h1.cancel() self.loop._process_events = unittest.mock.Mock() self.loop._scheduled.append(h1) self.loop._scheduled.append(h2) self.loop._run_once() t = self.loop._selector.select.call_args[0][0] self.assertTrue(9.5 < t < 10.5, t) self.assertEqual([h2], self.loop._scheduled) self.assertTrue(self.loop._process_events.called)
def test_run_once_in_executor_handle(self): def cb(): pass self.assertRaises(AssertionError, self.loop.run_in_executor, None, events.Handle(cb, ()), ('', )) self.assertRaises(AssertionError, self.loop.run_in_executor, None, events.TimerHandle(10, cb, ()))
def test__run_once_logging(self, m_logging, m_time): # Log to INFO level if timeout > 1.0 sec. idx = -1 data = [10.0, 10.0, 12.0, 13.0] def monotonic(): nonlocal data, idx idx += 1 return data[idx] m_time.monotonic = monotonic m_logging.INFO = logging.INFO m_logging.DEBUG = logging.DEBUG self.loop._scheduled.append(events.TimerHandle(11.0, lambda: True, ())) self.loop._process_events = unittest.mock.Mock() self.loop._run_once() self.assertEqual(logging.INFO, m_logging.log.call_args[0][0]) idx = -1 data = [10.0, 10.0, 10.3, 13.0] self.loop._scheduled = [events.TimerHandle(11.0, lambda: True, ())] self.loop._run_once() self.assertEqual(logging.DEBUG, m_logging.log.call_args[0][0])
def test__run_once_schedule_handle(self): handle = None processed = False def cb(loop): nonlocal processed, handle processed = True handle = loop.call_soon(lambda: True) h = events.TimerHandle(time.monotonic() - 1, cb, (self.loop, )) self.loop._process_events = unittest.mock.Mock() self.loop._scheduled.append(h) self.loop._run_once() self.assertTrue(processed) self.assertEqual([handle], list(self.loop._ready))
def call_at(self, when, callback, *args): """Like call_later(), but uses an absolute time. Absolute time corresponds to the event loop's time() method. """ self._check_closed() if self._debug: self._check_thread() self._check_callback(callback, 'call_at') timer = events.TimerHandle(when, callback, args, self) if timer._source_traceback: del timer._source_traceback[-1] partition = _find_partition(self) heapq.heappush(self._partitions[partition].scheduled, timer) timer._scheduled = True return timer
def test__add_callback_timer(self): h = events.TimerHandle(time.monotonic() + 10, lambda: False, ()) self.loop._add_callback(h) self.assertIn(h, self.loop._scheduled)