In the following example, we write a new class which inherit from XInt to ensure that a value is a multiple of something:
# --
# Copyright (C) CEA, EDF
# Author : Erwan ADAM (CEA)
# --
import unittest
from xdata import *
class XIntWithMultiple(XInt):
__init__xattributes__ = XInt.__init__xattributes__ + [
XAttribute("multiple", xtype=XInt(not_into=[0]), default_value=None),
]
def __call__(self, value):
value = XInt.__call__(self, value)
multiple = self.multiple
if multiple is not None:
residual = value%multiple
if residual != 0:
msg = "%s is not a multiple of %s"%(value, multiple)
raise XValueError(msg)
pass
return value
pass
class XIntWithMultipleTestCase(unittest.TestCase):
def test(self):
x = XIntWithMultiple(multiple=5)
self.failUnlessEqual(x(10), 10)
self.failUnlessEqual(x(0), 0)
self.failUnlessEqual(x("15"), 15)
self.failUnlessRaises(XValueError, x, 1)
return
def test_multiple(self):
self.failUnlessRaises(XValueError, XIntWithMultiple, multiple="toto")
self.failUnlessRaises(XValueError, XIntWithMultiple, multiple=0)
return
def testwithmin(self):
x = XIntWithMultiple(multiple=5, min=1)
self.failUnlessEqual(x(10), 10)
self.failUnlessEqual(x("15"), 15)
self.failUnlessRaises(XValueError, x, 0)
self.failUnlessRaises(XValueError, x, 1)
return
pass
if __name__ == '__main__':
unittest.main()
pass