emmental/lib/test_idle.py
Anna Schumaker a1fcf032b5 lib: Create a library for idle callbacks
I use a fake idle queue for testing, but fall back on the main GLib idle
code for production. I made the fake idle queue threadsafe just to be
cautious.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
2020-10-26 17:25:21 -04:00

54 lines
1.5 KiB
Python

# Copyright 2020 (c) Anna Schumaker
from . import idle
import threading
import unittest
class TestIdle(unittest.TestCase):
def setUp(self):
self.count = 0
def tearDown(self):
idle.reset()
def cb_one(self):
self.count += 1
return idle.CONTINUE if self.count < 2 else idle.REMOVE
def cb_two(self):
self.count += 1
return idle.CONTINUE if self.count < 6 else idle.REMOVE
def test_idle_init(self):
self.assertTrue(idle.FAKE)
self.assertTrue(idle.CONTINUE)
self.assertFalse(idle.REMOVE)
self.assertEqual(idle.IdleId, 0)
self.assertEqual(idle.Funcs, [])
self.assertIsInstance(idle.Lock, type(threading.Lock()))
def test_idle(self):
self.assertEqual(idle.add(self.cb_one), 1)
self.assertEqual(idle.add(self.cb_two), 2)
self.assertEqual(idle.Funcs, [ self.cb_one, self.cb_two ])
self.assertTrue(idle.run())
self.assertEqual(self.count, 2)
self.assertEqual(idle.Funcs, [ self.cb_one, self.cb_two ])
self.assertTrue(idle.run())
self.assertEqual(self.count, 4)
self.assertEqual(idle.Funcs, [ self.cb_two ])
idle.reset()
self.assertEqual(idle.Funcs, [])
self.assertFalse(idle.run())
def test_idle_complete(self):
idle.add(self.cb_one)
idle.add(self.cb_two)
self.assertEqual(idle.Funcs, [ self.cb_one, self.cb_two ])
idle.complete(delay=0.05)
self.assertEqual(self.count, 6)
self.assertEqual(idle.Funcs, [])