# 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)