playlist: Create a way to switch tags in the TagModel

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2021-07-03 10:03:37 -04:00
parent 035fcd3398
commit 91ef91a5f0
2 changed files with 28 additions and 0 deletions

View File

@ -20,3 +20,8 @@ class TagModel(GObject.GObject, Gio.ListModel):
def do_get_object(self, n):
return self.tag[n]
def switch_tag(self, tag):
prev = len(self.tag) if self.tag else 0
self.tag = tag
self.items_changed(0, prev, len(self.tag))

View File

@ -7,6 +7,12 @@ import unittest
class TestTagModel(unittest.TestCase):
def setUp(self):
self.changed = (None, None, None)
def items_changed_cb(self, model, position, removed, added):
self.changed = (position, removed, added)
def test_tag_model_init(self):
t = tag.Tag("Test")
m = model.TagModel(t)
@ -27,3 +33,20 @@ class TestTagModel(unittest.TestCase):
self.assertEqual(m.get_n_items(), 0)
self.assertIsNone(m.get_item(0))
def test_tag_model_switch_tag(self):
t = tag.Tag("A")
t.add_track(fake.Track(1))
t.add_track(fake.Track(2))
u = tag.Tag("B")
u.add_track(fake.Track(3))
m = model.TagModel()
m.connect("items-changed", self.items_changed_cb)
m.switch_tag(t)
self.assertEqual(self.changed, (0, 0, 2))
m.switch_tag(u)
self.assertEqual(self.changed, (0, 2, 1))