rind: Rewrite playlist manager unittest
I was having some trouble when adding in a GtkTreeModelFilter, so I figured a good first step is to make sure we're testing the TreeModel properly Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
8c755300be
commit
b65a6d9929
|
@ -5,9 +5,6 @@ import curds
|
|||
import os
|
||||
from gi.repository import GObject, Gtk, GLib
|
||||
|
||||
toplevel = [ "Collection", "Previous", None, "Genre", None, "Library" ]
|
||||
level2 = [ curds.PlaylistManager.lookup("Genre"), curds.PlaylistManager.lookup("Library") ]
|
||||
|
||||
class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
||||
def __init__(self, *args, **kwargs):
|
||||
GObject.GObject.__init__(self)
|
||||
|
@ -55,36 +52,43 @@ class ManagerModel(GObject.GObject, Gtk.TreeModel):
|
|||
return self.iter_n_children(iter) > 0
|
||||
|
||||
def do_iter_n_children(self, iter):
|
||||
if iter == None:
|
||||
return len(toplevel)
|
||||
plist = self.iter_playlist(iter)
|
||||
return len(plist) if plist in level2 else 0
|
||||
if plist and not isinstance(plist, curds.Playlist):
|
||||
return len(plist)
|
||||
return 0
|
||||
|
||||
def do_iter_nth_child(self, iter, n):
|
||||
if n >= self.iter_n_children(iter):
|
||||
return (False, None)
|
||||
|
||||
ret = Gtk.TreeIter()
|
||||
child = Gtk.TreeIter()
|
||||
if iter == None:
|
||||
ret.user_data = n + 1
|
||||
child.user_data = n + 1
|
||||
elif iter.user_data2 == 0:
|
||||
ret.user_data = iter.user_data
|
||||
ret.user_data2 = n + 1
|
||||
return self.iter_valid(ret)
|
||||
child.user_data = iter.user_data
|
||||
child.user_data2 = n + 1
|
||||
return self.iter_valid(child)
|
||||
|
||||
def do_iter_next(self, iter):
|
||||
if iter.user_data2 > 0:
|
||||
iter.user_data2 += 1
|
||||
index = iter.user_data2
|
||||
else:
|
||||
iter.user_data += 1
|
||||
index = iter.user_data
|
||||
return self.iter_valid(iter)
|
||||
|
||||
def do_iter_parent(self, child):
|
||||
iter = Gtk.TreeIter()
|
||||
if child.user_data2 > 0:
|
||||
iter = Gtk.TreeIter()
|
||||
iter.user_data = child.user_data
|
||||
return self.iter_valid(iter)
|
||||
return (False, None)
|
||||
|
||||
def do_iter_previous(self, iter):
|
||||
if iter.user_data2 > 0:
|
||||
if iter.user_data2 == 1:
|
||||
return (False, None)
|
||||
iter.user_data2 -= 1
|
||||
else:
|
||||
if iter.user_data == 1:
|
||||
return (False, None)
|
||||
iter.user_data -= 1
|
||||
return self.iter_valid(iter)
|
||||
|
||||
def iter_playlist(self, iter):
|
||||
|
|
|
@ -12,13 +12,6 @@ plist_mgr = curds.PlaylistManager
|
|||
test_album1 = os.path.abspath("./trier/Test Library/Test Artist 02/Test Album 1")
|
||||
test_album2 = os.path.abspath("./trier/Test Library/Test Artist 02/Test Album 2")
|
||||
|
||||
toplevel = [ ("media-playback-start", "Collection\n0 Tracks", plist_mgr.lookup("Collection")),
|
||||
("edit-undo", "Previous\n0 Tracks", plist_mgr.lookup("Previous")),
|
||||
("", "", None),
|
||||
("audio-x-generic-symbolic", "<big>Genre</big>", plist_mgr.lookup("Genre")),
|
||||
("", "", None),
|
||||
("folder-music", "<big>Library</big>", plist_mgr.lookup("Library")) ]
|
||||
|
||||
class TestManager(unittest.TestCase):
|
||||
def setUp(self):
|
||||
curds.reset()
|
||||
|
@ -57,6 +50,106 @@ class TestManager(unittest.TestCase):
|
|||
for col in range(model.get_n_columns()):
|
||||
self.assertEqual(model.get_column_type(col), GObject.GType(str))
|
||||
|
||||
def test_model_iter_children(self):
|
||||
iter = self.model.iter_children(None)
|
||||
self.assertTreeIterEqual(iter, (1, 0, 0))
|
||||
|
||||
for i in range(len(plist_mgr) + 1):
|
||||
iter.user_data = i + 1
|
||||
child = self.model.iter_children(iter)
|
||||
if plist_mgr[i] != self.genre:
|
||||
self.assertIsNone(child)
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
child = self.model.iter_children(iter)
|
||||
self.assertTreeIterEqual(child, (iter.user_data, 1, 0))
|
||||
|
||||
for i in range(len(self.genre)):
|
||||
child.user_data2 = i + 1
|
||||
self.assertIsNone(self.model.iter_children(child))
|
||||
|
||||
def test_model_iter_has_child(self):
|
||||
iter = Gtk.TreeIter()
|
||||
|
||||
for i in range(len(plist_mgr) + 1):
|
||||
iter.user_data = i + 1
|
||||
expected = plist_mgr[i] == self.genre
|
||||
self.assertEqual(self.model.iter_has_child(iter), expected)
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
for i in range(len(self.genre) + 1):
|
||||
iter.user_data2 = i + 1
|
||||
self.assertFalse(self.model.iter_has_child(iter))
|
||||
|
||||
def test_model_iter_n_children(self):
|
||||
iter = Gtk.TreeIter()
|
||||
self.assertEqual(self.model.iter_n_children(None), len(plist_mgr))
|
||||
|
||||
for i in range(len(plist_mgr) + 1):
|
||||
iter.user_data = i + 1
|
||||
n = 2 if plist_mgr[i] == self.genre else 0
|
||||
self.assertEqual(self.model.iter_n_children(iter), n)
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
for i in range(len(self.genre) + 1):
|
||||
iter.user_data2 = i + 1
|
||||
self.assertEqual(self.model.iter_n_children(iter), 0)
|
||||
|
||||
def test_model_iter_nth_child(self):
|
||||
for i in range(len(plist_mgr)):
|
||||
iter = self.model.iter_nth_child(None, i)
|
||||
self.assertTreeIterEqual(iter, (i + 1, 0, 0))
|
||||
if plist_mgr[i] != self.genre:
|
||||
self.assertIsNone(self.model.iter_nth_child(iter, 0))
|
||||
self.assertIsNone(self.model.iter_nth_child(None, len(plist_mgr)))
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
for i in range(len(self.genre)):
|
||||
child = self.model.iter_nth_child(iter, i)
|
||||
self.assertTreeIterEqual(child, (iter.user_data, i + 1, 0))
|
||||
self.assertIsNone(self.model.iter_nth_child(iter, i + 1))
|
||||
|
||||
def test_model_iter_next(self):
|
||||
iter = self.model.iter_children(None)
|
||||
for i in range(len(curds.PlaylistManager)):
|
||||
self.assertTreeIterEqual(iter, (i + 1, 0, 0))
|
||||
iter = self.model.iter_next(iter)
|
||||
self.assertIsNone(iter)
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
child = self.model.iter_children(iter)
|
||||
for i in range(len(self.genre)):
|
||||
self.assertTreeIterEqual(child, (iter.user_data, i + 1, 0))
|
||||
child = self.model.iter_next(child)
|
||||
self.assertIsNone(child)
|
||||
|
||||
def test_model_iter_parent(self):
|
||||
iter = self.model.iter_children(None)
|
||||
for i in range(len(curds.PlaylistManager)):
|
||||
self.assertIsNone(self.model.iter_parent(iter))
|
||||
iter = self.model.iter_next(iter)
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
iter = self.model.iter_children(iter)
|
||||
for i in range(len(self.genre)):
|
||||
parent = self.model.iter_parent(iter)
|
||||
self.assertTreeIterEqual(parent, (iter.user_data, 0, 0))
|
||||
iter = self.model.iter_next(iter)
|
||||
|
||||
def test_model_iter_previous(self):
|
||||
iter = self.model.playlist_iter(plist_mgr.lookup("Library"))
|
||||
for i in range(len(curds.PlaylistManager) - 1, -1, -1):
|
||||
self.assertTreeIterEqual(iter, (i + 1, 0, 0))
|
||||
iter = self.model.iter_previous(iter)
|
||||
self.assertIsNone(iter)
|
||||
|
||||
iter = self.model.playlist_iter(self.genre)
|
||||
iter = self.model.iter_nth_child(iter, 1)
|
||||
for i in range(len(self.genre) - 1, -1, -1):
|
||||
self.assertTreeIterEqual(iter, (iter.user_data, i + 1, 0))
|
||||
iter = self.model.iter_previous(iter)
|
||||
self.assertIsNone(iter)
|
||||
|
||||
def test_model_iter_playlist(self):
|
||||
iter = Gtk.TreeIter()
|
||||
|
||||
|
@ -82,8 +175,8 @@ class TestManager(unittest.TestCase):
|
|||
|
||||
def test_model_iter_valid(self):
|
||||
iter = Gtk.TreeIter()
|
||||
|
||||
self.assertEqual(self.model.iter_valid(iter), (False, None))
|
||||
|
||||
for i in range(len(plist_mgr) + 1):
|
||||
iter.user_data = i + 1
|
||||
expected = (True, iter) if i < len(plist_mgr) else (False, None)
|
||||
|
@ -101,80 +194,6 @@ class TestManager(unittest.TestCase):
|
|||
child = self.model.playlist_iter(self.genre[i])
|
||||
self.assertTreeIterEqual(child, (iter.user_data, i + 1, 0))
|
||||
|
||||
def test_model_toplevel(self):
|
||||
model = manager.ManagerModel()
|
||||
path = Gtk.TreePath(0)
|
||||
iter = model.get_iter(path)
|
||||
|
||||
self.assertEqual(model.iter_n_children(None), len(toplevel))
|
||||
self.assertIsNone(model.playlist_iter(None))
|
||||
|
||||
for i in range(0, len(toplevel)):
|
||||
path = model.get_path(iter)
|
||||
self.assertEqual(iter.user_data, i + 1)
|
||||
self.assertEqual(iter.user_data2, 0)
|
||||
self.assertEqual(iter.user_data3, 0)
|
||||
self.assertEqual(path.get_indices(), [ i ])
|
||||
|
||||
self.assertEqual(model.get_value(iter, 0), toplevel[i][0])
|
||||
self.assertEqual(model.iter_playlist(iter), plist_mgr[i])
|
||||
self.assertIsNone(model.iter_parent(iter))
|
||||
|
||||
if toplevel[i][2] != None:
|
||||
piter = model.playlist_iter(toplevel[i][2])
|
||||
self.assertEqual(model.get_path(piter).get_indices(), [ i ])
|
||||
piter = model.iter_nth_child(None, i)
|
||||
self.assertEqual(model.get_path(piter).get_indices(), [ i ])
|
||||
iter = model.iter_next(iter)
|
||||
|
||||
iter = model.playlist_iter(curds.PlaylistManager.lookup("Collection"))
|
||||
self.assertEqual(model.get_value(iter, 1), "Collection\n2 Tracks")
|
||||
|
||||
def do_test_model_level2(self, header, index):
|
||||
model = manager.ManagerModel()
|
||||
iter = model.playlist_iter(plist_mgr.lookup(header))
|
||||
pl_top = plist_mgr.lookup(header)
|
||||
|
||||
self.assertEqual(manager.toplevel[index], header)
|
||||
self.assertEqual(iter.user_data, index + 1)
|
||||
self.assertEqual(iter.user_data2, 0)
|
||||
self.assertEqual(iter.user_data3, 0)
|
||||
|
||||
plist_mgr.lookup("Library").lookup(test_album1, allocate=True)
|
||||
plist_mgr.lookup("Library").lookup(test_album2, allocate=True)
|
||||
curds.playlist.library.join()
|
||||
self.assertTrue(model.iter_has_child(iter))
|
||||
self.assertEqual(model.iter_n_children(iter), len(pl_top))
|
||||
|
||||
child = model.iter_children(iter)
|
||||
for i in range(len(pl_top)):
|
||||
self.assertEqual(child.user_data, index + 1)
|
||||
self.assertEqual(child.user_data2, i + 1)
|
||||
self.assertEqual(child.user_data3, 0)
|
||||
self.assertEqual(model.get_path(child).get_indices(), [ index, i ])
|
||||
|
||||
self.assertEqual(model.iter_playlist(child), pl_top[i])
|
||||
self.assertEqual(model.get_value(child, 0), pl_top.icon)
|
||||
self.assertEqual(model.get_value(child, 1), f"{pl_top[i].name}\n10 Tracks")
|
||||
|
||||
piter = model.playlist_iter(pl_top[i])
|
||||
self.assertEqual(piter.user_data, index + 1)
|
||||
self.assertEqual(piter.user_data2, i + 1)
|
||||
self.assertEqual(piter.user_data3, 0)
|
||||
|
||||
parent = model.iter_parent(child)
|
||||
self.assertEqual(parent.user_data, index + 1)
|
||||
self.assertEqual(parent.user_data2, 0)
|
||||
self.assertEqual(parent.user_data3, 0)
|
||||
|
||||
child = model.iter_next(child)
|
||||
|
||||
def test_model_genre(self):
|
||||
self.do_test_model_level2("Genre", 3)
|
||||
|
||||
def test_model_library(self):
|
||||
self.do_test_model_level2("Library", 5)
|
||||
|
||||
def test_manager_selection(self):
|
||||
selection = manager.Treeview.get_selection()
|
||||
model = manager.MgrModel
|
||||
|
|
Loading…
Reference in New Issue