def test__run_once(self): h1 = events.TimerHandle(time.monotonic() + 0.1, 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.99 < t < 10.1, t) self.assertEqual([h2], self.loop._scheduled) self.assertTrue(self.loop._process_events.called)
def test__run_once_timeout(self): h = events.TimerHandle(time.monotonic() + 10.0, lambda: True, ()) self.loop._process_events = unittest.mock.Mock() self.loop._scheduled.append(h) self.loop._run_once(1.0) self.assertEqual((1.0, ), self.loop._selector.select.call_args[0])
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_timeout_with_ready(self): # If event loop has ready callbacks, select timeout is always 0. h = events.TimerHandle(time.monotonic() + 10.0, lambda: True, ()) self.loop._process_events = unittest.mock.Mock() self.loop._scheduled.append(h) self.loop._ready.append(h) self.loop._run_once(1.0) self.assertEqual((0, ), self.loop._selector.select.call_args[0])
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 test__add_callback_timer(self): h = events.TimerHandle(time.monotonic() + 10, lambda: False, ()) self.loop._add_callback(h) self.assertIn(h, self.loop._scheduled)