import unittest
from LinkedList import Linkedlist
from LinkedList import Node

class LinkedListTest(unittest.TestCase):
    def setUp(self):
        self.linklist = Linkedlist()

    def test_Append(self):
        print("...Adding to Linked List...")
        self.linklist.append('cat')
        self.linklist.append('dog')
        self.assertEqual(self.linklist.size, 2)
        self.assertEqual(self.linklist.head.nodeValue, 'cat')

    def test_Prepend(self):
        print("...Prepending to Linked List...")
        self.linklist.append(2)
        self.linklist.append(4)
        self.linklist.append(6)
        self.linklist.append(8)
        self.linklist.prepend('Stormtrooper')
        self.assertEqual(self.linklist.head.nodeValue, 'Stormtrooper')
        self.assertEqual(self.linklist.size, 5)
        self.assertEqual(self.linklist.tail.nodeValue, 8)

    def test_Insert(self):
        print("...Inserting to Linked List...")
        self.linklist.append('cat')
        self.linklist.append('dog')
        self.linklist.append('racoon')
        self.linklist.append('rat')
        self.linklist.insert('racoon','rabbit')
        self.assertEqual(self.linklist.head.nodeValue, 'cat')
        self.assertEqual(self.linklist.size, 5)
        self.assertEqual(self.linklist.__str__(), 'cat -> dog -> racoon -> rabbit -> rat -> /')

    def test_delNode(self):
        print("...Delete a Node...")
        self.linklist.append(11)
        self.linklist.append(12)
        self.linklist.append(14)
        self.assertEqual(self.linklist.__str__(), '11 -> 12 -> 14 -> /')
        self.linklist.delNode(12)
        self.assertEqual(self.linklist.__str__(), '11 -> 14 -> /')

    def test_isFound(self):
        print("...Test Search Function...")
        self.linklist.append(33)
        self.linklist.append(44)
        self.linklist.append(55)
        self.assertTrue(self.linklist.isFound(44))
        self.assertFalse(self.linklist.isFound(35))


if __name__ == "__main__":
    unittest.main()
