emmental/playlist/test_model.py

86 lines
2.8 KiB
Python

# Copyright 2021 (c) Anna Schumaker.
from . import controls
from . import model
from . import runtime
from lib import bus
from lib import fake
from lib import tag
from gi.repository import GObject, Gio
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)
self.assertIsInstance(m, GObject.Object)
self.assertIsInstance(m, Gio.ListModel)
self.assertIsInstance(m.bus, bus.Bus)
self.assertIsInstance(m.Controls, controls.Controls)
self.assertEqual(m.tag, t)
self.assertEqual(m.items, [ ])
self.assertEqual(m.get_item_type(), GObject.TYPE_PYOBJECT)
self.assertEqual(m.get_n_items(), 0)
self.assertIsNone(m.get_item(0))
def test_tag_model_add_remove(self):
t = tag.Tag("Test")
m = model.TagModel(t)
track = fake.Track(1)
t.add_track(track)
m.bus.complete()
self.assertEqual(m.items, [ track ])
self.assertEqual(m.get_n_items(), 1)
self.assertEqual(m.get_item(0), fake.Track(1))
self.assertEqual(runtime.Runtime.get_text(), "1 second")
self.assertEqual(runtime.Visible.get_text(), "Showing 1 track")
t.remove_track(track)
m.bus.complete()
self.assertEqual(m.items, [ ])
self.assertEqual(m.get_n_items(), 0)
self.assertIsNone(m.get_item(0))
self.assertEqual(runtime.Runtime.get_text(), "0 seconds")
self.assertEqual(runtime.Visible.get_text(), "Showing 0 tracks")
def test_tag_model_init_none(self):
m = model.TagModel()
self.assertEqual(m.items, [ ])
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(5))
m = model.TagModel()
m.connect("items-changed", self.items_changed_cb)
m.switch_tag(t)
self.assertEqual(self.changed, (0, 0, 2))
self.assertIn(m.track_added, t.TrackAdded.subscribers)
self.assertEqual(runtime.Visible.get_text(), "Showing 2 tracks")
self.assertEqual(runtime.Runtime.get_text(), "3 seconds")
m.switch_tag(u)
self.assertEqual(self.changed, (0, 2, 1))
self.assertIn(m.track_added, u.TrackAdded.subscribers)
self.assertNotIn(m.track_added, t.TrackAdded.subscribers)
self.assertEqual(runtime.Visible.get_text(), "Showing 1 track")
self.assertEqual(runtime.Runtime.get_text(), "5 seconds")