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>
54 lines
1.5 KiB
Python
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, [])
|