64 lines
1.6 KiB
Python
64 lines
1.6 KiB
Python
# This file is dual licensed under the terms of the Apache License, Version
|
|
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
|
|
# for complete details.
|
|
|
|
import enum
|
|
import typing
|
|
|
|
import pytest
|
|
|
|
from cryptography import utils
|
|
|
|
|
|
class TestCachedProperty:
|
|
def test_simple(self):
|
|
class T:
|
|
@utils.cached_property
|
|
def t(self):
|
|
accesses.append(None)
|
|
return 14
|
|
|
|
accesses: typing.List[typing.Optional[T]] = []
|
|
|
|
assert T.t
|
|
t = T()
|
|
assert t.t == 14
|
|
assert len(accesses) == 1
|
|
assert t.t == 14
|
|
assert len(accesses) == 1
|
|
|
|
t = T()
|
|
assert t.t == 14
|
|
assert len(accesses) == 2
|
|
assert t.t == 14
|
|
assert len(accesses) == 2
|
|
|
|
def test_set(self):
|
|
class T:
|
|
@utils.cached_property
|
|
def t(self):
|
|
accesses.append(None)
|
|
return 14
|
|
|
|
accesses: typing.List[typing.Optional[T]] = []
|
|
t = T()
|
|
with pytest.raises(AttributeError):
|
|
t.t = None
|
|
assert len(accesses) == 0
|
|
assert t.t == 14
|
|
assert len(accesses) == 1
|
|
with pytest.raises(AttributeError):
|
|
t.t = None
|
|
assert len(accesses) == 1
|
|
assert t.t == 14
|
|
assert len(accesses) == 1
|
|
|
|
|
|
def test_enum():
|
|
class TestEnum(utils.Enum):
|
|
something = "something"
|
|
|
|
assert issubclass(TestEnum, enum.Enum)
|
|
assert isinstance(TestEnum.something, enum.Enum)
|
|
assert repr(TestEnum.something) == "<TestEnum.something: 'something'>"
|
|
assert str(TestEnum.something) == "TestEnum.something"
|