iro/tests/validate.py
branchdevel
changeset 231 3929338fd17f
parent 196 ee2c051fbe3f
child 294 0e75bd39767d
--- /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