1.2 XInt

class XInt( [min], [max], [into], [not_into])
The XInt check if a value can be understood as an integer, eventually with conditions min, max, into and not_into. The parameters min and max must be integer, the parameters into and not_into must be a list of integer. The following file shows the possibilities of XInt
# --
# Copyright (C) CEA, EDF
# Author : Erwan ADAM (CEA)
# --

import unittest

from xdata import *

class XIntTestCase(unittest.TestCase):
    def test(self):
        x = XInt()
        self.failUnlessEqual(x(123), 123)
        self.failUnlessEqual(x("123"), 123)
        self.failUnlessEqual(x(2*3), 6)
        self.failUnlessEqual(x("2*3"), 6)
        self.failUnlessRaises(XValueError, x, "toto")
        self.failUnlessRaises(XValueError, x, "3.2")
        self.failUnlessRaises(XValueError, x, 3.2)
        return
    def test_into_min_max(self):
        # into
        x = XInt(into=[1, "2", 3, "10", 20])
        self.failUnlessRaises(XValueError, x, 15)
        self.failUnlessEqual(x("10"), 10)
        self.failUnlessRaises(XValueError, XInt, into="toto")
        self.failUnlessRaises(XValueError, XInt, into=["toto", "titi"])
        # min, max
        self.failUnlessRaises(XValueError, XInt, min=2, max=4.5)
        x = XInt(into=[1, 2, 3, 5, 10, 20], min=5, max=15)
        self.failUnlessRaises(XValueError, x, 1)
        self.failUnlessEqual(x(5), 5)
        self.failUnlessEqual(x("10"), 10)
        self.failUnlessEqual(x(10), 10)
        return
    def test_not_into(self):
        x = XInt(not_into=[0, 1, 5])
        self.failUnlessRaises(XValueError, x, 0)
        self.failUnlessRaises(XValueError, x, 1)
        self.failUnlessRaises(XValueError, x, 5)
        self.failUnlessEqual(x(2), 2)
        self.failUnlessEqual(x("2"), 2)
        return
    def test_boolean(self):
        x = XInt()
        self.failUnless(x(True) is 1)
        self.failUnless(x(False) is 0)
        self.failUnless(x("True") is 1)
        self.failUnless(x("False") is 0)
        return
    pass

if __name__ == '__main__':
    unittest.main()
    pass