class TestLinkedListCursorRemoveMethods(unittest.TestCase): def setUp(self): # empty list testing empty removals self.emptylinkedlist = LinkedListCursor() # populated list for testing populated removals self.poplinkedlist = LinkedListCursor(range(0, 10)) def testRemoveItemAtHeadEmpty(self): self.assertRaises(IndexError, self.emptylinkedlist.removeItemAtHead) self.assertEqual(len(self.emptylinkedlist), 0) def testRemoveItemAtHeadPopulated(self): item = self.poplinkedlist.removeItemAtHead() self.assertEqual(item, 0) self.assertEqual(self.poplinkedlist.head.item, 1) self.assertEqual(len(self.poplinkedlist), 9) def testRemoveItemAtCursorEmpty(self): self.assertRaises(IndexError, self.emptylinkedlist.removeItemAtCursor) self.assertEqual(len(self.emptylinkedlist), 0) def testRemoveItemAtCursorPopulated(self): item = self.poplinkedlist.removeItemAtCursor() self.assertEqual(item, 1) self.assertEqual(self.poplinkedlist.cursor.item, 2) self.assertEqual(len(self.poplinkedlist), 9) # make sure if the cursor is at the tail it removes it # and sets it to the previous node self.poplinkedlist.cursor = self.poplinkedlist.tail item = self.poplinkedlist.removeItemAtCursor() self.assertEqual(item, 9) self.assertEqual(self.poplinkedlist.cursor.item, 8) self.assertEqual(len(self.poplinkedlist), 8) def testRemoveItemAtTailEmpty(self): self.assertRaises(IndexError, self.emptylinkedlist.removeItemAtTail) self.assertEqual(len(self.emptylinkedlist), 0) def testRemoveItemAtTailPopulated(self): item = self.poplinkedlist.removeItemAtTail() self.assertEqual(item, 9) self.assertEqual(self.poplinkedlist.tail.item, 8) self.assertEqual(len(self.poplinkedlist), 9)