Source code for openpyxl.descriptors.tests.test_base

from __future__ import absolute_import
# Copyright (c) 2010-2017 openpyxl

import pytest

from .. import Strict

[docs]class TestDescriptor: from ..base import Descriptor
[docs] class Dummy: pass
[docs] def test_ctor(self): d = self.Descriptor('key', size=1) assert d.name == 'key' assert d.size == 1
[docs] def test_setter(self): d = self.Descriptor('key') client = self.Dummy() d.__set__(client, 42) assert client.key == 42
@pytest.fixture
[docs]def boolean(): from ..base import Bool class Dummy(Strict): value = Bool() return Dummy()
[docs]class TestBool:
[docs] def test_valid(self, boolean): boolean.value = True assert boolean.value
@pytest.mark.parametrize("value, expected", [ (1, True,), (0, False), ('true', True), ('false', False), ('0', False), ('f', False), ('', False), ([], False) ] )
[docs] def test_cast(self, boolean, value, expected): boolean.value = value assert boolean.value == expected
[docs]def test_nested(): from ..base import Bool class DummyNested(Strict): value = Bool(nested=True) dummy = DummyNested() dummy.value = True assert dummy.__class__.value.nested == True
@pytest.fixture
[docs]def integer(): from ..base import Integer class Dummy(Strict): value = Integer() return Dummy()
[docs]class TestInt:
[docs] def test_valid(self, integer): integer.value = 4 assert integer.value == 4
@pytest.mark.parametrize("value", ['a', '4.5', None])
[docs] def test_invalid(self, integer, value): with pytest.raises(TypeError): integer.value = value
@pytest.mark.parametrize("value, expected", [ ('4', 4), (4.5, 4), ])
[docs] def test_cast(self, integer, value, expected): integer.value = value assert integer.value == expected
@pytest.fixture
[docs]def float(): from ..base import Float class Dummy(Strict): value = Float() return Dummy()
[docs]class TestFloat:
[docs] def test_valid(self, float): float.value = 4 assert float.value == 4
@pytest.mark.parametrize("value", ['a', None])
[docs] def test_invalid(self, float, value): with pytest.raises(TypeError): float.value = value
@pytest.mark.parametrize("value, expected", [ ('4.5', 4.5), (4.5, 4.5), (4, 4.0), ])
[docs] def test_cast(self, float, value, expected): float.value = value assert float.value == expected
@pytest.fixture
[docs]def allow_none(): from ..base import Float class Dummy(Strict): value = Float(allow_none=True) return Dummy()
[docs]class TestAllowNone:
[docs] def test_valid(self, allow_none): allow_none.value = None assert allow_none.value is None
@pytest.fixture
[docs]def maximum(): from ..base import Max class Dummy(Strict): value = Max(max=5) return Dummy()
[docs]class TestMax:
[docs] def test_ctor(self): from ..base import Max with pytest.raises(TypeError): class Dummy(Strict): value = Max()
[docs] def test_valid(self, maximum): maximum.value = 4 assert maximum.value == 4
[docs] def test_invalid(self, maximum): with pytest.raises(ValueError): maximum.value = 6
@pytest.fixture
[docs]def minimum(): from ..base import Min class Dummy(Strict): value = Min(min=0) return Dummy()
[docs]class TestMin:
[docs] def test_ctor(self): from ..base import Min with pytest.raises(TypeError): class Dummy(Strict): value = Min()
[docs] def test_valid(self, minimum): minimum.value = 2 assert minimum.value == 2
[docs] def test_invalid(self, minimum): with pytest.raises(ValueError): minimum.value = -1
@pytest.fixture
[docs]def min_max(): from ..base import MinMax class Dummy(Strict): value = MinMax(min=-1, max=1) return Dummy()
[docs]class TestMinMax:
[docs] def test_ctor(self): from ..base import MinMax with pytest.raises(TypeError): class Dummy(Strict): value = MinMax(min=-10) with pytest.raises(TypeError): class Dummy(Strict): value = MinMax(max=10)
[docs] def test_valid(self, min_max): min_max.value = 1 assert min_max.value == 1
[docs] def test_invalid(self, min_max): with pytest.raises(ValueError): min_max.value = 2
@pytest.fixture
[docs]def set(): from ..base import Set class Dummy(Strict): value = Set(values=[1, 'a', None]) return Dummy()
[docs]class TestValues:
[docs] def test_ctor(self): from ..base import Set with pytest.raises(TypeError): class Dummy(Strict): value = Set()
[docs] def test_valid(self, set): set.value = 1 assert set.value == 1
[docs] def test_invalid(self, set): with pytest.raises(ValueError): set.value = 2
[docs]def test_noneset(): from ..base import NoneSet class Dummy(Strict): value = NoneSet(values=[1, 2, 3]) obj = Dummy() obj.value = 'none' assert obj.value is None with pytest.raises(ValueError): obj.value = 5
@pytest.fixture
[docs]def ascii(): from ..base import ASCII class Dummy(Strict): value = ASCII() return Dummy()
[docs]class TestASCII:
[docs] def test_valid(self, ascii): ascii.value = b'some text' assert ascii.value == b'some text'
value = b'\xc3\xbc'.decode("utf-8") @pytest.mark.parametrize("value", [ value, 10, [] ] )
[docs] def test_invalid(self, ascii, value): with pytest.raises(TypeError): ascii.value = value
@pytest.fixture
[docs]def string(): from ..base import String class Dummy(Strict): value = String() return Dummy()
[docs]class TestString:
[docs] def test_valid(self, string): value = b'\xc3\xbc'.decode("utf-8") string.value = value assert string.value == value
[docs] def test_invalid(self, string): with pytest.raises(TypeError): string.value = 5
@pytest.fixture
[docs]def Tuple(): from ..base import Tuple class Dummy(Strict): value = Tuple() return Dummy()
[docs]class TestTuple:
[docs] def test_valid(self, Tuple): Tuple.value = (1, 2) assert Tuple.value == (1, 2)
[docs] def test_invalid(self, Tuple): with pytest.raises(TypeError): Tuple.value = [1, 2, 3]
@pytest.fixture
[docs]def Length(): from ..base import Length class Dummy(Strict): value = Length(length=4) return Dummy()
[docs]class TestLength:
[docs] def test_valid(self, Length): Length.value = "this"
[docs] def test_invalid(self, Length): with pytest.raises(ValueError): Length.value = "2"