curds: Implement a node.insert_child() function
This inserts the node in sorted order Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
ec6744755d
commit
6efc456f0d
|
@ -7,3 +7,28 @@ class PlaylistNode:
|
|||
self.name = name
|
||||
self.next = None
|
||||
self.prev = None
|
||||
|
||||
def __link_children__(self, b, c):
|
||||
if c.prev:
|
||||
c.prev.next = b
|
||||
if b:
|
||||
b.prev = c.prev
|
||||
b.next = c
|
||||
c.prev = b
|
||||
|
||||
def __lt__(self, rhs):
|
||||
return self.name < rhs.name
|
||||
|
||||
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)
|
||||
|
||||
def n_children(self):
|
||||
return len(self.children)
|
||||
|
|
|
@ -14,3 +14,43 @@ class TestPlaylistNode(unittest.TestCase):
|
|||
n = node.PlaylistNode("Test Node", "test-icon")
|
||||
self.assertEqual(n.icon, "test-icon")
|
||||
self.assertEqual(n.name, "Test Node")
|
||||
|
||||
def test_node_less_than(self):
|
||||
a = node.PlaylistNode("a")
|
||||
b = node.PlaylistNode("b")
|
||||
|
||||
self.assertTrue( a < b)
|
||||
self.assertFalse(b < a)
|
||||
self.assertFalse(a < a)
|
||||
|
||||
def test_node_insert_child(self):
|
||||
root = node.PlaylistNode()
|
||||
a = node.PlaylistNode("a")
|
||||
b = node.PlaylistNode("b")
|
||||
c = node.PlaylistNode("c")
|
||||
d = node.PlaylistNode("d")
|
||||
|
||||
self.assertEqual(root.n_children(), 0)
|
||||
self.assertEqual(root.insert_child(b), 0)
|
||||
self.assertEqual(root.n_children(), 1)
|
||||
self.assertEqual(root.children, [ b ])
|
||||
|
||||
self.assertEqual(root.insert_child(d), 1)
|
||||
self.assertEqual(root.n_children(), 2)
|
||||
self.assertEqual(root.children, [ b, d ])
|
||||
self.assertEqual(b.next, d)
|
||||
self.assertEqual(d.prev, b)
|
||||
|
||||
self.assertEqual(root.insert_child(c), 1)
|
||||
self.assertEqual(root.n_children(), 3)
|
||||
self.assertEqual(root.children, [ b, c, d ])
|
||||
self.assertEqual(b.next, c)
|
||||
self.assertEqual(c.prev, b)
|
||||
self.assertEqual(c.next, d)
|
||||
self.assertEqual(d.prev, c)
|
||||
|
||||
self.assertEqual(root.insert_child(a), 0)
|
||||
self.assertEqual(root.n_children(), 4)
|
||||
self.assertEqual(root.children, [ a, b, c, d ])
|
||||
self.assertEqual(a.next, b)
|
||||
self.assertEqual(b.prev, a)
|
||||
|
|
Loading…
Reference in New Issue