1.5 XList

class XList( [sequence], [len], [len_min], [len_max])
Use it to check if a value can be understood as a list ... The parameter sequence must be a XType instance or a list of XType instances, the parameters len, len_min and len_max must be integer.
# --
# Copyright (C) CEA, EDF
# Author : Erwan ADAM (CEA)
# --

import unittest

from xdata import *

class XListTestCase(unittest.TestCase):
    def test(self):
        x = XList()
        self.failUnlessEqual(x(3.2), [3.2])
        self.failUnlessEqual(x([]), [])
        return
    def test_len_len_min_len_max(self):
        self.failUnlessRaises(XValueError, XList, len=3.2)
        x = XList(len=2)
        self.failUnlessRaises(XValueError, x, ["toto"])
        self.failUnlessEqual(x([1, 2]), [1, 2])
        x = XList(len_min=3, len_max=5)
        self.failUnlessRaises(XValueError, x, [1,2])
        self.failUnlessRaises(XValueError, x, [1,2,3,4,5,6])
        self.failUnlessEqual(x([1,2,3]), [1,2,3])
        return
    def test_sequence(self):
        #
        self.failUnlessRaises(XValueError, XList, sequence="toto")
        #
        x = XList(sequence=XInt(min=0))
        self.failUnlessRaises(XValueError, x, ["toto"])
        self.failUnlessRaises(XValueError, x, [-1])
        self.failUnlessEqual(x(["1"]), [1])
        #
        x = XList(sequence=XTuple(sequence=XInt(), len=2))
        self.failUnlessEqual(x([(1, 1), (2, 2)]), [(1, 1), (2, 2)])
        self.failUnlessRaises(XValueError, x, [(3, 1, 0)])
        #
        x = XList(sequence=(XString(), XInt()))
        self.failUnlessRaises(XValueError, x, ["a"])
        self.failUnlessEqual(x(["a", "1"]), ["a", 1])
        self.failUnlessRaises(XValueError, x, ["a", 1, "b"])
        self.failUnlessEqual(x(["a", "1", "b", "2"]), ["a", 1, "b", 2])
        self.failUnlessRaises(XValueError, x, ["a", 3.2, "b", 12])
        self.failUnlessRaises(XValueError, x, ["a", "toto", "b", 12])
        #
        return
    def test_sequence_tolist(self):
        x = XList(sequence=XInt())
        self.failUnlessEqual(x(1), [1])
        return
    def test_string_with_comma_tolist(self):
        x = XList(sequence=XInt())
        self.failUnlessEqual(x('1, 2, 3, 4'), [1, 2, 3, 4])
        return
    def test_len_multiple(self):
        x = XList(sequence=(XInt(), XFloat()), len_multiple=1)
        x = XList(len_multiple=1, sequence=(XInt(), XFloat()))
        self.failUnlessEqual(x([1]), [1])
        self.failUnlessEqual(x([1, 2.3]), [1, 2.3])
        self.failUnlessEqual(x([1, 2.3, 2]), [1, 2.3, 2])
        return
    pass

class A(XObject):
    __init__xattributes__ = [
        XAttribute("l", xtype=XList(), default_value=None),
        ]
    pass

class ATestCase(unittest.TestCase):
    def test(self):
        a = A(None)
        self.failUnlessEqual(a.l, None)
        return
    pass

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