def setUp(self):
		self.linkedList = SinglyLinkedList()
class Test(unittest.TestCase):
	def setUp(self):
		self.linkedList = SinglyLinkedList()

	def tearDown(self):
		self.linkedList = None

	def testEmptyOnEmptyLinkedList(self):
		isEmpty = self.linkedList.empty()

		string = self.linkedList.toString()

		self.assertTrue(isEmpty is True)
		self.assertTrue(string == "empty Singly Linked List")		

	def testEmptyOnNonEmptyLinkedList(self):
		self.linkedList.append(1)
		isEmpty = self.linkedList.empty()

		string = self.linkedList.toString()

		self.assertTrue(isEmpty is False)
		self.assertTrue(string == "Singly Linked List with the following nodes:\n\t - [Node with key: 1]\n")		

	def testAppendToEmptyLinkedList(self):
		self.linkedList.append(1)

		string = self.linkedList.toString()

		self.assertTrue(self.linkedList.getHead().getKey() == 1)
		self.assertTrue(self.linkedList.getTail().getKey() == 1)
		self.assertTrue(string == "Singly Linked List with the following nodes:\n\t - [Node with key: 1]\n")

	def testAppendToNonEmptyLinkedList(self):
		self.linkedList.append(1)
		self.linkedList.append(2)
		self.linkedList.append(3)

		string = self.linkedList.toString()

		self.assertTrue(self.linkedList.getHead().getKey() == 1)
		self.assertTrue(self.linkedList.getTail().getKey() == 3)
		self.assertTrue(string == "Singly Linked List with the following nodes:\n\t - [head]\t[Node with key: 1]\n\t - [Node with key: 2]\n\t - [tail]\t[Node with key: 3]\n")

	def testPrependToEmptyLinkedList(self):
		self.linkedList.prepend(1)

		string = self.linkedList.toString()

		self.assertTrue(self.linkedList.getHead().getKey() == 1)
		self.assertTrue(self.linkedList.getTail().getKey() == 1)
		self.assertTrue(string == "Singly Linked List with the following nodes:\n\t - [Node with key: 1]\n")

	def testPrependToNonEmptyLinkedList(self):
		self.linkedList.prepend(3)
		self.linkedList.prepend(2)
		self.linkedList.prepend(1)

		string = self.linkedList.toString()	

		self.assertTrue(self.linkedList.getHead().getKey() == 1)
		self.assertTrue(self.linkedList.getTail().getKey() == 3)
		self.assertTrue(string == "Singly Linked List with the following nodes:\n\t - [head]\t[Node with key: 1]\n\t - [Node with key: 2]\n\t - [tail]\t[Node with key: 3]\n")

	def testInsertAfterEmptyLinkedList(self):
		self.linkedList.insertAfter(1, 0)

		string = self.linkedList.toString()

		self.assertTrue(self.linkedList.empty() is True)
		self.assertTrue(string == "empty Singly Linked List")

	def testInsertAfterNonEmptyLinkedList(self):
		self.linkedList.append(1)
		self.linkedList.insertAfter(3, 1)
		self.linkedList.insertAfter(2, 1)

		string = self.linkedList.toString()

		self.assertTrue(self.linkedList.getHead().getKey() == 1)
		self.assertTrue(self.linkedList.getTail().getKey() == 3)
		self.assertTrue(string == "Singly Linked List with the following nodes:\n\t - [head]\t[Node with key: 1]\n\t - [Node with key: 2]\n\t - [tail]\t[Node with key: 3]\n")

	def testDeleteFromEmptyLinkedList(self):
		self.linkedList.delete(1)

		string = self.linkedList.toString()

		self.assertTrue(self.linkedList.empty() is True)
		self.assertTrue(string == "empty Singly Linked List")		

	def testDeleteHeadFromNonEmptyLinkedList(self):
		self.linkedList.append(0)
		self.linkedList.append(1)
		self.linkedList.insertAfter(3, 1)
		self.linkedList.insertAfter(2, 1)
		self.linkedList.delete(0)

		string = self.linkedList.toString()

		self.assertTrue(self.linkedList.getHead().getKey() == 1)
		self.assertTrue(self.linkedList.getTail().getKey() == 3)
		self.assertTrue(string == "Singly Linked List with the following nodes:\n\t - [head]\t[Node with key: 1]\n\t - [Node with key: 2]\n\t - [tail]\t[Node with key: 3]\n")

	def testDeleteMiddleNodeFromNonEmptyLinkedList(self):
		self.linkedList.prepend(2)
		self.linkedList.prepend(1)
		self.linkedList.insertAfter(4, 2)
		self.linkedList.append(3)
		self.linkedList.delete(4)

		string = self.linkedList.toString()

		self.assertTrue(self.linkedList.getHead().getKey() == 1)
		self.assertTrue(self.linkedList.getTail().getKey() == 3)
		self.assertTrue(string == "Singly Linked List with the following nodes:\n\t - [head]\t[Node with key: 1]\n\t - [Node with key: 2]\n\t - [tail]\t[Node with key: 3]\n")

	def testDeleteTailFromNonEmptyLinkedList(self):
		self.linkedList.append(2)
		self.linkedList.prepend(1)
		self.linkedList.insertAfter(4, 2)
		self.linkedList.append(3)
		self.linkedList.delete(4)

		string = self.linkedList.toString()

		self.assertTrue(self.linkedList.getHead().getKey() == 1)
		self.assertTrue(self.linkedList.getTail().getKey() == 3)
		self.assertTrue(string == "Singly Linked List with the following nodes:\n\t - [head]\t[Node with key: 1]\n\t - [Node with key: 2]\n\t - [tail]\t[Node with key: 3]\n")

	def testFindFromEmptyLinkedList(self):
		self.linkedList.find(1)

		string = self.linkedList.toString()

		self.assertTrue(self.linkedList.empty() is True)
		self.assertTrue(string == "empty Singly Linked List")

	def testFindFromNonEmptyLinkedList(self):
		self.linkedList.append(3)
		self.linkedList.prepend(1)
		self.linkedList.insertAfter(2, 1)

		self.assertTrue(self.linkedList.find(2).toString() == "[Node with key: 2]")