1.8.1 XInstance

class XInstance( classes)
Use it to check if a value is an instance of one of classes ... The items in classes can be a class or a string ``module.class''
# --
# Copyright (C) CEA, EDF
# Author : Erwan ADAM (CEA)
# --

import unittest

from xdata import *

class A:
    pass

class B(object):
    pass

class C(object):
    pass

class XInstanceTestCase(unittest.TestCase):
    def test(self):
        self.failUnlessRaises(XAttributeError, XInstance)
        return
    def test_init(self):
        self.failUnlessRaises(XValueError, XInstance, classes=3.2)
        self.failUnlessRaises(XValueError, XInstance, classes=[3.2])
        self.failUnlessRaises(XValueError, XInstance, 3.2)
        self.failUnlessRaises(XValueError, XInstance, "XXXXXX")
        x = XInstance(classes=[A, B])
        self.failUnlessEqual(x.classes, [A, B])
        x = XInstance(A, B)
        self.failUnlessEqual(x.classes, [A, B])
        x = XInstance("xdata.XString")
        return
    def test_classes(self):
        x = XInstance(A)
        self.failUnlessRaises(XValueError, x, 3.2)
        x = XInstance(A)
        a = A()
        self.failUnlessEqual(x(a), a)
        x = XInstance(B)
        self.failUnlessRaises(XValueError, x, A())
        b = B()
        self.failUnlessEqual(x(b), b)
        x = XInstance(classes=[A, B])
        a = A()
        self.failUnlessEqual(x(a), a)
        b = B()
        self.failUnlessEqual(x(b), b)
        c = C()
        self.failUnlessRaises(XValueError, x, c)
        return
    def test_string_classes(self):
        x = XInstance("xdata.XString")
        self.failUnlessRaises(XValueError, x, "toto")
        v = XString()
        self.failUnlessEqual(x(v), v)
        return
    pass

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