curds: Implement a node.append_child() function

Sometimes we just want to append a node instead of inserting it in a
sorted position.

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2019-04-16 09:52:50 -04:00
parent 6efc456f0d
commit 1a01dd9047
2 changed files with 32 additions and 4 deletions

View File

@ -19,16 +19,21 @@ class PlaylistNode:
def __lt__(self, rhs):
return self.name < rhs.name
def append_child(self, child):
prev = None
if len(self.children) > 0:
prev = self.children[-1]
self.children.append(child)
self.__link_children__(prev, child)
return self.children.index(child)
def insert_child(self, child):
n = None
for i, n in enumerate(self.children):
if child < n:
self.children.insert(i, child)
self.__link_children__(child, n)
return self.children.index(child)
self.children.append(child)
self.__link_children__(n, child)
return self.children.index(child)
return self.append_child(child)
def n_children(self):
return len(self.children)

View File

@ -23,6 +23,29 @@ class TestPlaylistNode(unittest.TestCase):
self.assertFalse(b < a)
self.assertFalse(a < a)
def test_node_append_child(self):
root = node.PlaylistNode()
a = node.PlaylistNode("a")
b = node.PlaylistNode("b")
c = node.PlaylistNode("c")
self.assertEqual(root.n_children(), 0)
self.assertEqual(root.append_child(b), 0)
self.assertEqual(root.n_children(), 1)
self.assertEqual(root.children, [ b ])
self.assertEqual(root.append_child(a), 1)
self.assertEqual(root.n_children(), 2)
self.assertEqual(root.children, [ b, a ])
self.assertEqual(b.next, a)
self.assertEqual(a.prev, b)
self.assertEqual(root.append_child(c), 2)
self.assertEqual(root.n_children(), 3)
self.assertEqual(root.children, [ b, a, c ])
self.assertEqual(a.next, c)
self.assertEqual(c.prev, a)
def test_node_insert_child(self):
root = node.PlaylistNode()
a = node.PlaylistNode("a")