2016-12-13 17:09:35 +00:00
|
|
|
# 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.
|
|
|
|
|
|
|
|
|
|
|
2017-07-09 01:50:01 +00:00
|
|
|
import pytest
|
|
|
|
|
|
2016-12-13 17:09:35 +00:00
|
|
|
from cryptography import utils
|
|
|
|
|
|
|
|
|
|
|
2017-07-09 01:50:01 +00:00
|
|
|
class TestCachedProperty(object):
|
|
|
|
|
def test_simple(self):
|
|
|
|
|
accesses = []
|
|
|
|
|
|
|
|
|
|
class T(object):
|
|
|
|
|
@utils.cached_property
|
|
|
|
|
def t(self):
|
|
|
|
|
accesses.append(None)
|
|
|
|
|
return 14
|
|
|
|
|
|
|
|
|
|
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):
|
|
|
|
|
accesses = []
|
|
|
|
|
|
|
|
|
|
class T(object):
|
|
|
|
|
@utils.cached_property
|
|
|
|
|
def t(self):
|
|
|
|
|
accesses.append(None)
|
|
|
|
|
return 14
|
|
|
|
|
|
|
|
|
|
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
|