1# This program is free software; you can redistribute it and/or modify
2# it under the terms of the GNU General Public License as published by
3# the Free Software Foundation; either version 2 of the License, or
4# (at your option) any later version.
5
6from tests import TestCase
7
8from quodlibet import _
9from quodlibet.qltk.notif import Task, TaskController
10
11
12class FakeStatusBar(object):
13    def __init__(self):
14        self.count = 0
15
16    def update(self):
17        self.count += 1
18
19
20class TTaskController(TestCase):
21    def setUp(self):
22        self.c = TaskController()
23        self.f = FakeStatusBar()
24        self.c.parent = self.f
25
26    def test_reparent(self):
27        def set_parent(p):
28            self.c.parent = p
29        set_parent(None)
30        set_parent(FakeStatusBar())
31        self.assertRaises(ValueError, set_parent, FakeStatusBar())
32
33    def test_multiple_tasks(self):
34        self.assertEquals(self.c.active_tasks, [])
35        self.assertNotEqual(self.c.source, "")
36        t1 = Task("src", "desc", controller=self.c)
37        self.assertEquals(self.c.source, "src")
38        self.assertEquals(self.c.active_tasks, [t1])
39        t1.update(0.5)
40        self.assertEquals(self.c.frac, 0.5)
41        t2 = Task("src2", "desc2", controller=self.c)
42        self.assertEquals(self.c.source, _("Active tasks"))
43        self.assertEquals(self.c.frac, 0.25)
44        Task("src3", "desc3", controller=self.c, known_length=False)
45        self.assertAlmostEqual(self.c.frac, 0.5 / 3)
46        t1.finish()
47        t2.finish()
48        self.assertEquals(self.c.desc, "desc3")
49        self.assertEquals(self.c.frac, None)
50