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:
Anna Schumaker 2019-04-03 14:38:46 -04:00
parent 8c755300be
commit b65a6d9929
2 changed files with 122 additions and 99 deletions

View File

@ -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):

View File

@ -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