curds: Implement functions for finding and allocating nodes

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-06-01 21:18:07 -04:00
parent 27196c7069
commit aef622d39b
2 changed files with 30 additions and 0 deletions

View File

@ -40,9 +40,19 @@ class PlaylistNode:
def __str__(self):
return f"<big>{self.name}</big>"
def alloc_node(self, name):
return PlaylistNode(name)
def append_child(self, child):
return self.__insert_node__(child, len(self.children))
def find_node(self, name):
node = self.lookup(name)
if node == None:
node = self.alloc_node(name)
self.insert_child(node)
return node
def get_node(self, path):
if len(path) == 1:
return self.nth_child(path[0])

View File

@ -35,6 +35,13 @@ class TestPlaylistNode(unittest.TestCase):
self.assertFalse(b < a)
self.assertFalse(a < a)
def test_node_alloc(self):
root = node.PlaylistNode()
a = root.alloc_node("A")
self.assertIsInstance(a, node.PlaylistNode)
self.assertEqual(a.name, "A")
self.assertEqual(a.icon, "")
def test_node_append_child(self):
notify.register("node-inserted", self.on_insert_node)
self.cb_insert = None
@ -140,6 +147,19 @@ class TestPlaylistNode(unittest.TestCase):
self.assertIsNone(root.lookup_byid(id(c)))
self.assertIsNone(root.lookup_byid(42))
def test_node_find(self):
root = node.PlaylistNode()
b = root.find_node("B")
self.assertIsInstance(b, node.PlaylistNode)
self.assertEqual(b.name, "B")
a = root.find_node("A")
self.assertIsInstance(a, node.PlaylistNode)
self.assertEqual(a.name, "A")
self.assertEqual(root.find_node("A"), a)
self.assertEqual(root.find_node("B"), b)
def test_node_nth_child(self):
root = node.PlaylistNode()
a = node.PlaylistNode("a")