from django.test import TestCase
import treenode.treelib as tl
import seminar.models as m

class SimpleTreeLibTests(TestCase):
	def setUp(self):
		# Vyrobíme pár nějakých Nodů
		self.root = m.CastNode(root=None, first_child=None, succ=None, nadpis="Root")
		self.root.save()
		self.some_node = m.CastNode(root=self.root, first_child=None, succ=None, nadpis="Přetržené")
		self.other_node = m.CastNode(root=self.root, first_child=None, succ=None, nadpis="Dítě")
		self.some_orphan = m.CastNode(root=None, first_child=None, succ=None, nadpis="Ošklivé")
		self.other_orphan = m.CastNode(root=None, first_child=None, succ=None, nadpis="Káčátko")
		
		# Trochu je pospojujeme
		self.root.first_child = self.some_node
		self.some_node.succ = self.other_node
		self.some_orphan.first_child = self.other_orphan

		# Všechno uložíme
		self.other_node.save()
		self.some_node.save()
		self.other_orphan.save()
		self.some_orphan.save()
		self.root.save()
	
	def test_safe_functions(self):
		# safe_pred
		self.assertEqual(tl.safe_pred(self.other_node), self.some_node)
		self.assertIsNone(tl.safe_pred(self.root))
		self.assertIsNone(tl.safe_pred(self.some_node))
		self.assertIsNone(tl.safe_pred(self.some_orphan))
		self.assertIsNone(tl.safe_pred(self.other_orphan))

		# safe_father_of_first
		self.assertIsNone(tl.safe_father_of_first(self.root))
		self.assertEqual(tl.safe_father_of_first(self.some_node), self.root)
		self.assertEqual(tl.safe_father_of_first(self.other_node), self.root)
		self.assertIsNone(tl.safe_father_of_first(self.some_orphan))
		self.assertEqual(tl.safe_father_of_first(self.other_orphan), self.some_orphan)