rind: Update NodeTreeModel to use the new walk() function

This cleans up the test a bit and makes it more straightforward.
Additionally, it checks some extra cases that we hadn't checked up until
then.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-04-23 16:22:51 -04:00
parent 718d44a8d8
commit 3aa6b93e0e
2 changed files with 74 additions and 102 deletions

View File

@ -55,12 +55,7 @@ class TestNodeTreeModel(unittest.TestCase):
path = Gtk.TreePath.new_from_indices([ plist_root.n_children() ])
self.assertRaises(ValueError, self.model.get_iter, path)
for node in plist_root.children:
path = Gtk.TreePath(node.get_path())
iter = self.model.get_iter(path)
self.assertEqual(iter.user_data, id(node))
for node in self.genre.children:
for node in plist_root.walk():
path = Gtk.TreePath(node.get_path())
iter = self.model.get_iter(path)
self.assertEqual(iter.user_data, id(node))
@ -68,12 +63,7 @@ class TestNodeTreeModel(unittest.TestCase):
def test_model_get_path(self):
iter = Gtk.TreeIter()
for node in plist_root.children:
iter.user_data = id(node)
path = self.model.get_path(iter)
self.assertEqual(path.get_indices(), node.get_path())
for node in self.genre.children:
for node in plist_root.walk():
iter.user_data = id(node)
path = self.model.get_path(iter)
self.assertEqual(path.get_indices(), node.get_path())
@ -83,102 +73,89 @@ class TestNodeTreeModel(unittest.TestCase):
rect = node.Treeview.get_cell_area(Gtk.TreePath(0), col)
iter = Gtk.TreeIter()
for i, child in enumerate(plist_root.children):
text = str(child) if i != 0 else f"<b>{str(child)}</b>"
for child in plist_root.walk():
iter.user_data = id(child)
text = str(child)
height = rect.height
if child == plist_root.current[0]:
text = f"<b>{text}</b>"
if isinstance(child, curds.Playlist):
height = -1
self.assertEqual(self.model.get_value(iter, 0), child.icon)
self.assertEqual(self.model.get_value(iter, 1), text)
if isinstance(child, curds.Playlist):
self.assertEqual(self.model.get_value(iter, 2), -1)
else:
self.assertEqual(self.model.get_value(iter, 2), rect.height)
self.assertEqual(self.model.get_value(iter, 2), height)
def test_model_iter_children(self):
iter = self.model.iter_children(None)
self.assertEqual(iter.user_data, id(plist_root.nth_child(0)))
for node in plist_root.children:
for node in plist_root.walk():
iter.user_data = id(node)
child = self.model.iter_children(iter)
if node not in [ self.artist, self.decade, self.genre ]:
self.assertIsNone(child)
if node.n_children() == 0:
self.assertIsNone(self.model.iter_children(iter))
else:
child = self.model.iter_children(iter)
self.assertEqual(child.user_data, id(node.nth_child(0)))
iter.user_data = 42
self.assertIsNone(self.model.iter_children(iter))
iter = self.model.playlist_iter(self.genre)
child = self.model.iter_children(iter)
self.assertEqual(child.user_data, id(self.genre.nth_child(0)))
for node in self.genre.children:
child.user_data = id(node)
self.assertIsNone(self.model.iter_children(child))
def test_model_iter_has_child(self):
iter = Gtk.TreeIter()
for node in plist_root.children:
for node in plist_root.walk():
iter.user_data = id(node)
expected = node in [ self.artist, self.decade, self.genre ]
self.assertEqual(self.model.iter_has_child(iter), expected)
if node.n_children() > 0:
self.assertTrue(self.model.iter_has_child(iter))
else:
self.assertFalse(self.model.iter_has_child(iter))
iter.user_data = 42
self.assertFalse(self.model.iter_has_child(iter))
for node in self.genre.children:
iter.user_data = id(node)
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), plist_root.n_children())
for node in plist_root.children:
for node in plist_root.walk():
iter.user_data = id(node)
self.assertEqual(self.model.iter_n_children(iter), node.n_children())
iter.user_data = 42
self.assertEqual(self.model.iter_n_children(iter), 0)
for node in self.genre.children:
iter.user_data = id(node)
self.assertEqual(self.model.iter_n_children(iter), 0)
def test_model_iter_nth_child(self):
for i, node in enumerate(plist_root.children):
iter = self.model.iter_nth_child(None, i)
self.assertEqual(iter.user_data, id(node))
if node not in [self.artist, self.decade, self.genre]:
self.assertIsNone(self.model.iter_nth_child(iter, 0))
self.assertIsNone(self.model.iter_nth_child(None, plist_root.n_children()))
iter = Gtk.TreeIter()
iter = self.model.playlist_iter(self.genre)
for i, node in enumerate(self.genre.children):
child = self.model.iter_nth_child(iter, i)
self.assertEqual(child.user_data, id(node))
self.assertIsNone(self.model.iter_nth_child(iter, i + 1))
for node in plist_root.walk(root=True):
iter = self.model.playlist_iter(node)
for i, child in enumerate(node.children):
citer = self.model.iter_nth_child(iter, i)
self.assertEqual(citer.user_data, id(child))
self.assertIsNone(self.model.iter_nth_child(iter, node.n_children()))
def test_model_iter_next(self):
iter = self.model.iter_children(None)
for node in plist_root.children:
self.assertEqual(iter.user_data, id(node))
iter = self.model.iter_next(iter)
self.assertIsNone(iter)
iter = Gtk.TreeIter()
iter = self.model.playlist_iter(self.genre)
child = self.model.iter_children(iter)
for node in self.genre.children:
self.assertEqual(child.user_data, id(node))
child = self.model.iter_next(child)
self.assertIsNone(child)
for node in plist_root.walk():
iter.user_data = id(node)
next = self.model.iter_next(iter)
if node.next_child != None:
self.assertEqual(next.user_data, id(node.next_child))
else:
self.assertIsNone(next)
def test_model_iter_parent(self):
iter = Gtk.TreeIter()
for node in enumerate(plist_root.children):
iter.user_data = id(node)
self.assertIsNone(self.model.iter_parent(iter))
for node in self.genre.children:
for node in plist_root.walk():
iter.user_data = id(node)
parent = self.model.iter_parent(iter)
self.assertEqual(parent.user_data, id(self.genre))
if node.parent != plist_root:
parent = self.model.iter_parent(iter)
self.assertEqual(parent.user_data, id(node.parent))
else:
self.assertIsNone(self.model.iter_parent(iter))
def test_model_iter_playlist(self):
iter = Gtk.TreeIter()
@ -186,34 +163,27 @@ class TestNodeTreeModel(unittest.TestCase):
self.assertEqual(self.model.iter_playlist(None), plist_root)
self.assertEqual(self.model.iter_playlist(iter), plist_root)
for node in plist_root.walk():
iter.user_data = id(node)
self.assertEqual(self.model.iter_playlist(iter), node)
iter.user_data = 42
self.assertIsNone(self.model.iter_playlist(iter))
for node in plist_root.children:
iter.user_data = id(node)
self.assertEqual(self.model.iter_playlist(iter), node)
for node in self.genre.children:
iter.user_data = id(node)
self.assertEqual(self.model.iter_playlist(iter), node)
def test_model_playlist_iter(self):
self.assertIsNone(self.model.playlist_iter(None))
self.assertIsNone(self.model.playlist_iter(plist_root))
for node in plist_root.children:
for node in plist_root.walk():
iter = self.model.playlist_iter(node)
self.assertEqual(iter.user_data, id(node))
iter = self.model.playlist_iter(self.genre)
for node in self.genre.children:
child = self.model.playlist_iter(node)
self.assertEqual(child.user_data, id(node))
def test_node_selection(self):
selection = node.Treeview.get_selection()
self.assertIsInstance(selection, Gtk.TreeSelection)
node.Treeview.expand_all()
for child in plist_root.children:
for child in plist_root.walk():
path = Gtk.TreePath(child.get_path())
selection.select_path(path)
if isinstance(child, curds.Playlist):
@ -222,8 +192,9 @@ class TestNodeTreeModel(unittest.TestCase):
else:
self.assertFalse(selection.path_is_selected(path))
plist = playlist.PlistModel.playlist
selection.unselect_all()
self.assertEqual(playlist.PlistModel.playlist, plist_root.lookup("Previous"))
self.assertEqual(playlist.PlistModel.playlist, plist)
def test_node_activate(self):
column = node.Treeview.get_column(1)
@ -250,16 +221,14 @@ class TestNodeTreeModel(unittest.TestCase):
self.assertFalse(entry.get_style_context().has_class("warning"))
self.assertFalse(node.SearchPopover.is_visible())
for i, child in enumerate(plist_root.children):
iter = filter.iter_nth_child(None, i)
text = str(child) if i != 0 else f"<b>{str(child)}</b>"
self.assertEqual(filter.get_value(iter, 1), text)
if child not in [ self.artist, self.decade, self.genre ]:
self.assertIsNone(filter.iter_nth_child(iter, 0))
for child in plist_root.walk():
citer = self.model.playlist_iter(child)
fiter = filter.convert_child_iter_to_iter(citer)
self.assertTrue(fiter[0])
if child == plist_root.current[0]:
self.assertEqual(filter.get_value(fiter[1], 1), f"<b>{str(child)}</b>")
else:
for i, cnode in enumerate(child.children):
c = filter.iter_nth_child(iter, i)
self.assertEqual(filter.get_value(c, 1), str(cnode))
self.assertEqual(filter.get_value(fiter[1], 1), str(child))
entry.set_text("*v")
self.model.set_filter_text(entry)
@ -275,14 +244,16 @@ class TestNodeTreeModel(unittest.TestCase):
self.assertFalse(entry.get_style_context().has_class("warning"))
self.assertFalse(node.SearchPopover.is_visible())
for i, child in enumerate(plist_root.children[2:]):
iter = filter.iter_nth_child(None, i)
self.assertEqual(filter.get_value(iter, 1), str(child))
c = filter.iter_nth_child(iter, 0)
if child != self.genre:
self.assertIsNone(c)
visible = self.genre.nth_child(1)
for child in plist_root.walk():
citer = self.model.playlist_iter(child)
fiter = filter.convert_child_iter_to_iter(citer)
if not isinstance(child, curds.Playlist) or child == visible:
self.assertTrue(fiter[0])
self.assertEqual(filter.get_value(fiter[1], 1), str(child))
else:
self.assertEqual(filter.get_value(c, 1), str(self.genre.nth_child(1)))
self.assertFalse(fiter[0])
entry.set_text("")
self.model.set_filter_text(entry)

View File

@ -11,6 +11,7 @@ test_album = os.path.abspath("./trier/Test Library/Test Artist 01/Test Album 1")
class TestPlaylist(unittest.TestCase):
def setUp(self):
curds.reset()
playlist.PlistModel.set_playlist(curds.playlist.Root.lookup("Collection"))
def test_init(self):
self.assertIsInstance(gtk.Builder.get_object("playlist_treeview"), Gtk.TreeView)