diff -r 448dd8d36839 -r 3929338fd17f iro/tests/validate.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/tests/validate.py Sun Mar 18 14:06:27 2012 +0100 @@ -0,0 +1,135 @@ +from twisted.trial import unittest +from mock import Mock + +from iro.validate import vBool, vInteger, vHash, validate +from iro.error import ValidateException + +class testValidators(unittest.TestCase): + '''test for simple validators''' + + def testBool(self): + self.assertEqual(vBool(True,None),True) + self.assertEqual(vBool(1,None),True) + self.assertEqual(vBool("true",None),True) + self.assertEqual(vBool("True",None),True) + self.assertEqual(vBool("TRUE",None),True) + + self.assertEqual(vBool(False,None),False) + self.assertEqual(vBool(0,None),False) + self.assertEqual(vBool("false",None),False) + self.assertEqual(vBool("False",None),False) + self.assertEqual(vBool("FALSE",None),False) + + e = self.assertRaises(ValidateException, vBool, "TRue","test") + self.assertEqual(e.msg,"test is not boolean") + + def testInteger(self): + self.assertEqual(vInteger(123,None),123) + self.assertEqual(vInteger("123",None),123) + self.assertEqual(vInteger("-123",None),-123) + + self.assertRaises(ValidateException, vInteger, "a123",None) + + def testIntegerLimits(self): + self.assertEqual(vInteger(10,None,maxv=10),10) + self.assertRaises(ValidateException, vInteger, 11, None, maxv=10) + + self.assertEqual(vInteger(4,None,minv=4),4) + self.assertRaises(ValidateException, vInteger, 3, None, minv=4) + + self.assertRaises(ValidateException, vInteger, -1, None, minv=0) + self.assertRaises(ValidateException, vInteger, 1, None, maxv=0) + + def testIntegerNoneAllowed(self): + self.assertEqual(vInteger(None,None,none_allowed=True),None) + self.assertEqual(vInteger('',None,none_allowed=True),None) + + self.assertRaises(ValidateException, vInteger, "", None) + self.assertRaises(ValidateException, vInteger, None, None) + + def testHash(self): + self.assertEqual(vHash("0123456789abcdef",None),"0123456789abcdef") + self.assertEqual(vHash("0123456789ABCDEF",None),"0123456789abcdef") + self.assertEqual(vHash("F",None),"f") + self.assertEqual(vHash("",None),'') + + self.assertRaises(ValidateException, vHash, "GHIJKL", None) + + def testHashLimits(self): + self.assertEqual(vHash("F",None,minlength=1),"f") + self.assertRaises(ValidateException, vHash, "", None, minlength=1) + + self.assertEqual(vHash("Fa",None,maxlength=2),"fa") + self.assertRaises(ValidateException, vHash, "123", None, maxlength=1) + + + def testValidate(self): + f = Mock() + f.return_value = "valid" + @validate("t",f,True,1,2,3,4,k=5) + def g(u=False, t="bla"): + return t + d = g(t="uhuhu") + def r(t): + f.called_once_with("uhuhu","t",1,2,3,4,k=5) + self.assertEqual(t,"valid") + d.addCallback(r) + return d + + def testValidateMissingNeed(self): + f = Mock() + @validate("t",f,True,1,2,3,4,k=5) + def g(u, t="buuh"): + return t + e = self.assertRaises(ValidateException, g, u="uhuhu", t = None) + self.assertEqual(str(e),'700: t is nessasary') + + def testValidateMissingNeedNonExplicit(self): + f = Mock() + @validate("t",f,True,1,2,3,4,k=5) + def g(u, **k): + return k["t"] + e = self.assertRaises(ValidateException, g, u="uhuhu") + self.assertEqual(str(e),'700: t is nessasary') + + + def testValidateMissingNeed2(self): + f = Mock() + f.return_value = "valid" + @validate("t",f,True,1,2,3,4,k=5) + def g(u, t="buuh"): + return t + + d = g(True) + + def r(t): + f.called_once_with("buuh","t",1,2,3,4,k=5) + self.assertEqual(t,"valid") + d.addCallback(r) + return d + + def testvalidateNoNeed(self): + f = Mock() + f.return_value = "valid" + @validate("t",f,False,1,2,3,4,k=5) + def g(u, t="buuh"): + return t + d = g("uhu") + def r(t): + self.assertEqual(f.called,True) + self.assertEqual(t,"valid") + d.addCallback(r) + return d + + def testvalidateNoNeed2(self): + f = Mock() + f.return_value = "valid" + @validate("t",f,False,1,2,3,4,k=5) + def g(u, **k): + return k["t"] + d = g("uhu") + def r(t): + self.assertEqual(f.called,False) + self.assertEqual(t,None) + d.addCallback(r) + return d