import unittest
import p5

class P5Tests(unittest.TestCase):
	def testCurrent(self):
		class X: pass
		rd = p5.Resolver(X, p5.DFS)
		rb = p5.Resolver(X, p5.BFS)
		X.baba = 6
		self.assertEqual(rd.baba.value, 6)
		self.assertEqual(rd.baba.cls, X)
		self.assertEqual(rb.baba.value, 6)
		self.assertEqual(rb.baba.cls, X)
	def testVersus(self):
		class D: pass
		class C: pass
		class B(D): pass
		class A(B, C): pass
		C.baba = D.baba = 1
		rb = p5.Resolver(A, p5.BFS)
		rd = p5.Resolver(A, p5.DFS)
		v = p5.ValueResolver(A)
		self.assertEqual(rb.baba.cls, C)
		self.assertEqual(rd.baba.cls, D)
		self.assertEqual(v.baba, 1)
	def testAttrError(self):
		class X: pass
		v = p5.ValueResolver(X)
		try:
			X.baba
		except AttributeError:
			pass
		else:
			self.fail('AttributeError was excpected, but no exception was raised!')
			
if __name__ == "__main__":
	unittest.main()
