Example #1
0
    def test_contains(self):
        p = ParamGroupNode('test')
        c1 = ParamNode('x', parent=p)
        c2 = ParamNode('y')

        self.assertEqual(c1 in p, True)
        self.assertEqual(c2 in p, False)
Example #2
0
    def test_grandChildParam(self):
        p = ParamGroupNode('grandParent')
        pp = ParamGroupNode('parent')
        ppp = ParamGroupNode('child')
        pppp = ParamNode('grandChild', random.randint(0, 100))

        p.add_child(pp)
        pp.add_child(ppp)
        ppp.add_child(pppp)

        self.assertEqual(p['parent.child.grandChild'].value(), pppp.value())
        self.assertEqual(ppp.relative_name(p), 'parent.child')
        self.assertEqual(pppp.absolute_name(),
                         'grandParent.parent.child.grandChild')
Example #3
0
    def test_add(self):
        p = ParamGroupNode('test')
        p.add_child('x', 1, int, Interval(0, 1))
        p.add_child('y', 1, validator=Interval(0, 1))
        p.add_child(ParamNode('z', value=1, type=int, validator=Interval(0,
                                                                         1)))

        self.assertEqual(p['x'].value(), 1)
        self.assertEqual(p['y'].value(), 1)
        self.assertEqual(p['z'].value(), 1)
Example #4
0
    def test_values(self):
        p = ParamNode('x', 0, int, validator=Interval(-1, +1, (Interval.Closed, Interval.Open)))
        with self.assertRaises(ValueError):
            p.set_value(-1)

        with self.assertRaises(ValueError):
            p.set_value('Hello World')
Example #5
0
    def test_iter(self):
        p = ParamGroupNode('test')

        for i in range(10):
            name = ''.join(
                random.choice(string.ascii_uppercase + string.digits)
                for _ in range(5))
            p.add_child(ParamNode(name, random.randint(0, 100)))

        last_name = '00000'
        for param in p:
            self.assertNotEqual(param.name(), last_name)
            last_name = param.name()

        some_child = p.child(0)
        for sibling in some_child.iter_siblings():
            self.assertTrue(some_child is not sibling)
            self.assertEqual(some_child.parent(), sibling.parent())
Example #6
0
    def test_init(self):
        p = ParamNode('test', 34, str, True, None)
        self.assertEqual(p.type(), str)
        self.assertEqual(p.value(), '34')

        p = ParamNode('test', 34.0, int, False, Interval(0, 100))
        self.assertEqual(p.value(), 34)

        with self.assertRaises(AttributeError):
            p.set_value(10)

        p.set_editable(True)
        with self.assertRaises(ValueError):
            p.set_value(-20)

        p = ParamNode('test', 'a', str, True, ['a', 'b', 'c'])
        self.assertEqual(p.value(), 'a')

        p.set_value('b')
        p.set_value('c')
        with self.assertRaises(ValueError):
            p.set_value('d')
Example #7
0
 def test_editable(self):
     p = ParamNode('x', 0, int)
     self.assertEqual(p.is_editable(), True)
Example #8
0
 def test_name(self):
     p = ParamNode(u'Überläufer', 0, int)
     self.assertEqual(p.is_editable(), True)
Example #9
0
    def test_unbound_descriptor(self):

        factor = 4

        class Bar(object):
            def __init__(self, v):
                self._v = v

            def expression(self):
                return f'= {factor} * value'

            def value(self):
                return self._v

            def set_value(self, v):
                self._v = v

        b = Bar(3)

        p1 = ParamNode(type=int,
                       validator=Interval(0, 5),
                       fget=Bar.value,
                       fset=Bar.set_value)

        self.assertEqual(p1.name(), Bar.value.__name__)
        self.assertEqual(b.value(), p1.value(obj=b))

        b.set_value(4)
        self.assertEqual(b.value(), p1.value(obj=b))

        p1.set_value(5, obj=b)
        self.assertEqual(b.value(), p1.value(obj=b))

        with self.assertRaises(ValueError):
            p1.set_value(6, obj=b)

        # unfortunately, it is still possible to assign
        # an invalid value to the data object directly
        b.set_value(6)

        # but a ValueError will be thrown when we try
        # to access the invalid value
        with self.assertRaises(ValueError):
            p1.value(obj=b)

        # replace invalid value set above
        b.set_value(5)

        p2 = ParamNode(type=int, fget=Bar.expression)
        self.assertTrue(p2.is_unbound())

        group = ParamGroupNode('group')
        group.add_children([p1, p2])

        self.assertEqual(p2.value(obj=b), factor * p1.value(obj=b))
Example #10
0
    def test_bound_descriptor(self):
        class Bar(object):
            def __init__(self, v):
                self._v = v

            def value(self):
                return self._v

            def set_value(self, v):
                self._v = v

        b = Bar(3)
        p = ParamNode(type=int,
                      validator=Interval(0, 5),
                      fget=b.value,
                      fset=b.set_value)

        self.assertEqual(p.name(), b.value.__name__)
        self.assertEqual(b.value(), p.value())

        b.set_value(4)
        self.assertEqual(b.value(), p.value())

        p.set_value(5)
        self.assertEqual(b.value(), p.value())

        with self.assertRaises(ValueError):
            p.set_value(6)

        # unfortunately, it is still possible to assign
        # an invalid value to the data object directly
        b.set_value(6)

        # but a ValueError will be thrown when we try
        # to access the value
        with self.assertRaises(ValueError):
            p.value()