1from __future__ import absolute_import, unicode_literals
2
3import pytest
4from case import patch
5
6from celery.utils import deprecated
7
8
9class test_deprecated_property:
10
11    @patch('celery.utils.deprecated.warn')
12    def test_deprecated(self, warn):
13
14        class X(object):
15            _foo = None
16
17            @deprecated.Property(deprecation='1.2')
18            def foo(self):
19                return self._foo
20
21            @foo.setter
22            def foo(self, value):
23                self._foo = value
24
25            @foo.deleter
26            def foo(self):
27                self._foo = None
28        assert X.foo
29        assert X.foo.__set__(None, 1)
30        assert X.foo.__delete__(None)
31        x = X()
32        x.foo = 10
33        warn.assert_called_with(
34            stacklevel=3, deprecation='1.2', alternative=None,
35            description='foo', removal=None,
36        )
37        warn.reset_mock()
38        assert x.foo == 10
39        warn.assert_called_with(
40            stacklevel=3, deprecation='1.2', alternative=None,
41            description='foo', removal=None,
42        )
43        warn.reset_mock()
44        del(x.foo)
45        warn.assert_called_with(
46            stacklevel=3, deprecation='1.2', alternative=None,
47            description='foo', removal=None,
48        )
49        assert x._foo is None
50
51    def test_deprecated_no_setter_or_deleter(self):
52        class X(object):
53            @deprecated.Property(deprecation='1.2')
54            def foo(self):
55                pass
56        assert X.foo
57        x = X()
58        with pytest.raises(AttributeError):
59            x.foo = 10
60        with pytest.raises(AttributeError):
61            del(x.foo)
62
63
64class test_warn:
65
66    @patch('warnings.warn')
67    def test_warn_deprecated(self, warn):
68        deprecated.warn('Foo')
69        warn.assert_called()
70