89 lines
2.5 KiB
Python
89 lines
2.5 KiB
Python
# Copyright 2021 (c) Anna Schumaker.
|
|
import unittest
|
|
from gi.repository import GObject
|
|
from . import queue
|
|
from . import task
|
|
|
|
class FakeTask(task.Task):
|
|
def __init__(self, res=None):
|
|
task.Task.__init__(self)
|
|
self.res = res
|
|
def run_task(self): return self.res
|
|
|
|
class TestTaskQueue(unittest.TestCase):
|
|
def setUp(self):
|
|
self.idle_start = None
|
|
|
|
def on_task_pushed(self, queue, task):
|
|
self.pushed_task = task
|
|
|
|
def on_run_task(self, queue, task):
|
|
self.run_task = task
|
|
|
|
def on_tasks_finished(self, queue):
|
|
self.tasks_finished = True
|
|
|
|
def test_init(self):
|
|
q = queue.TaskQueue()
|
|
|
|
self.assertIsInstance(q, GObject.GObject)
|
|
self.assertEqual(q.tasks, [ ])
|
|
self.assertEqual(q.total, 0)
|
|
self.assertEqual(q.idleid, None)
|
|
self.assertEqual(q.progress, 0)
|
|
|
|
def test_push(self):
|
|
q = queue.TaskQueue()
|
|
fake = FakeTask()
|
|
q.connect("task-pushed", self.on_task_pushed)
|
|
|
|
q.push(fake)
|
|
self.assertEqual(q.tasks, [ fake ])
|
|
self.assertIsNotNone(q.idleid)
|
|
self.assertEqual(self.pushed_task, fake)
|
|
|
|
def test_clear(self):
|
|
q = queue.TaskQueue()
|
|
q.connect("tasks-finished", self.on_tasks_finished)
|
|
|
|
q.push(FakeTask())
|
|
q.clear()
|
|
self.assertEqual(q.tasks, [ ])
|
|
self.assertTrue(self.tasks_finished)
|
|
self.assertIsNone(q.idleid)
|
|
|
|
def test_run(self):
|
|
q = queue.TaskQueue()
|
|
fake3 = FakeTask()
|
|
fake2 = FakeTask()
|
|
fake1 = FakeTask([ fake2, fake3 ])
|
|
q.connect("run-task", self.on_run_task)
|
|
q.connect("tasks-finished", self.on_tasks_finished)
|
|
|
|
q.push(fake1)
|
|
self.assertEqual(q.tasks, [ fake1 ])
|
|
self.assertEqual(q.total, 1)
|
|
self.assertEqual(q.progress, 0/1)
|
|
|
|
q.run()
|
|
self.assertEqual(self.run_task, fake1)
|
|
self.assertEqual(q.tasks, [ fake2, fake3 ])
|
|
self.assertEqual(q.total, 3)
|
|
self.assertEqual(q.progress, 1/3)
|
|
self.assertIsNotNone(q.idleid)
|
|
|
|
q.run()
|
|
self.assertEqual(self.run_task, fake2)
|
|
self.assertEqual(q.tasks, [ fake3 ])
|
|
self.assertEqual(q.progress, 2/3)
|
|
self.assertIsNotNone(q.idleid)
|
|
|
|
q.run()
|
|
self.assertEqual(self.run_task, fake3)
|
|
self.assertEqual(q.tasks, [ ])
|
|
|
|
self.assertTrue(self.tasks_finished)
|
|
self.assertEqual(q.total, 0)
|
|
self.assertEqual(q.progress, 0)
|
|
self.assertIsNone(q.idleid)
|