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