Ejemplo n.º 1
0
    def test_validators(self):
        """Validators of ValidatedList are called correctly."""
        def is_positive(value):
            if value <= 0:
                raise TypeError('value is not positive')

        # The constructor should check all elements.
        with pytest.raises(TypeError, match='value is not positive'):
            ValidatedList([1, -2], validator=is_positive)

        l = ValidatedList([1, 2, 3], validator=is_positive)

        # __setitem__()
        with pytest.raises(TypeError, match='value is not positive'):
            l[2] = -1
        with pytest.raises(TypeError, match='value is not positive'):
            l[0:2] = [2, 3, -1]

        # append()
        with pytest.raises(TypeError, match='value is not positive'):
            l.append(-4)

        # extend() and __iadd__()
        with pytest.raises(TypeError, match='value is not positive'):
            l.extend([6, -1])
        with pytest.raises(TypeError, match='value is not positive'):
            l += [6, -1]

        # insert()
        with pytest.raises(TypeError, match='value is not positive'):
            l.insert(1, -3)
Ejemplo n.º 2
0
    def test_converters(self):
        """Custom converters of ValidatedList are called correctly."""
        # All elements are converted on construction.
        l = ValidatedList([1, 2.0, '3'], converter=int)
        assert l == [1, 2, 3]

        # __setitem__()
        l[2] = '4'
        assert l[2] == 4
        l[0:3] = ['2', '3', 4]
        assert l == [2, 3, 4]

        # append()
        l.append('5')
        assert l[3] == 5

        # extend() and __iadd__()
        l.extend([6, '7'])
        assert l[5] == 7
        l += ['8', 9]
        assert l[6] == 8

        # insert()
        l.insert(5, '10')
        assert l[5] == 10
    def test_converters(self):
        """Custom converters of ValidatedList are called correctly."""
        # All elements are converted on construction.
        l = ValidatedList([1, 2.0, "3"], converter=int)
        assert l == [1, 2, 3]

        # __setitem__()
        l[2] = "4"
        assert l[2] == 4
        l[0:3] = ["2", "3", 4]
        assert l == [2, 3, 4]

        # append()
        l.append("5")
        assert l[3] == 5

        # extend() and __iadd__()
        l.extend([6, "7"])
        assert l[5] == 7
        l += ["8", 9]
        assert l[6] == 8

        # insert()
        l.insert(5, "10")
        assert l[5] == 10
Ejemplo n.º 4
0
    def test_multiple_validators(self):
        """Multiple converters of ValidatedList are called in order."""
        def is_positive(value):
            if value <= 0:
                raise TypeError('value must be positive')

        def is_odd(value):
            if value % 2 == 0:
                raise TypeError('value must be odd')

        with pytest.raises(TypeError, match='value must be positive'):
            ValidatedList([-1, -3], validator=[is_positive, is_odd])

        with pytest.raises(TypeError, match='value must be odd'):
            ValidatedList([2, 4], validator=[is_positive, is_odd])
Ejemplo n.º 5
0
    def test_validators_and_converters(self):
        """Custom converters of ValidatedList are called correctly."""
        def is_positive(value):
            if value <= 0:
                raise TypeError('value is not positive')

        # Validators are run after converters.
        l = ValidatedList([1, 2, -3], converter=abs, validator=is_positive)
        assert l == [1, 2, 3]

        # __setitem__
        l[2] = -1
        assert l[2] == 1
        with pytest.raises(TypeError, match='value is not positive'):
            l[2] = 0
        l[0:3] = [2, 3, -1]
        assert l == [2, 3, 1]
        with pytest.raises(TypeError, match='value is not positive'):
            l[0:3] = [2, 3, 0]

        # append()
        l.append(-4)
        assert l[-1] == 4
        with pytest.raises(TypeError, match='value is not positive'):
            l.append(0)

        # extend() and __iadd__()
        l.extend([6, -1])
        assert l[-2:] == [6, 1]
        with pytest.raises(TypeError, match='value is not positive'):
            l.extend([6, 0])
        l += [6, -2]
        assert l[-2:] == [6, 2]
        with pytest.raises(TypeError, match='value is not positive'):
            l += [6, 0]

        # insert()
        l.insert(1, -3)
        assert l[1] == 3
        with pytest.raises(TypeError, match='value is not positive'):
            l.insert(1, 0)
Ejemplo n.º 6
0
 def test_slice(self):
     """A slice of a ValidatedList returns another ValidatedList."""
     l = ValidatedList([1, 2, 3])
     assert isinstance(l[:2], ValidatedList)
Ejemplo n.º 7
0
 def test_copy(self):
     """A copy of a ValidatedList returns another ValidatedList."""
     l = ValidatedList([1, 2, 3])
     assert isinstance(l.copy(), ValidatedList)
     assert isinstance(copy.copy(l), ValidatedList)
     assert isinstance(copy.deepcopy(l), ValidatedList)
Ejemplo n.º 8
0
 def test_multiple_converters(self):
     """Multiple converters of ValidatedList are called in order."""
     l = ValidatedList([1, 2, -3], converter=[abs, str])
     assert l == ['1', '2', '3']