1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
# copyright 2003-2012 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# This file is part of logilab-common.
#
# logilab-common is free software: you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 2.1 of the License, or (at your option) any
# later version.
#
# logilab-common is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with logilab-common. If not, see <http://www.gnu.org/licenses/>.
"""unit tests for logilab.common.deprecation"""
import warnings
from six import add_metaclass
from logilab.common.testlib import TestCase, unittest_main
from logilab.common import deprecation
class RawInputTC(TestCase):
# XXX with 2.6 we could test warnings
# http://docs.python.org/library/warnings.html#testing-warnings
# instead we just make sure it does not crash
def mock_warn(self, *args, **kwargs):
self.messages.append(args[0])
def setUp(self):
self.messages = []
deprecation.warn = self.mock_warn
def tearDown(self):
deprecation.warn = warnings.warn
def mk_func(self):
def any_func():
pass
return any_func
def test_class_deprecated(self):
@add_metaclass(deprecation.class_deprecated)
class AnyClass(object):
pass
AnyClass()
self.assertEqual(self.messages,
['AnyClass is deprecated'])
def test_deprecated_func(self):
any_func = deprecation.deprecated()(self.mk_func())
any_func()
any_func = deprecation.deprecated('message')(self.mk_func())
any_func()
self.assertEqual(self.messages,
['The function "any_func" is deprecated', 'message'])
def test_deprecated_decorator(self):
@deprecation.deprecated()
def any_func():
pass
any_func()
@deprecation.deprecated('message')
def any_func():
pass
any_func()
self.assertEqual(self.messages,
['The function "any_func" is deprecated', 'message'])
def test_moved(self):
module = 'data.deprecation'
any_func = deprecation.moved(module, 'moving_target')
any_func()
self.assertEqual(self.messages,
['object moving_target has been moved to module data.deprecation'])
def test_deprecated_manager(self):
deprecator = deprecation.DeprecationManager("module_name")
deprecator.compatibility('1.3')
# This warn should be printed.
deprecator.warn('1.1', "Major deprecation message.", 1)
deprecator.warn('1.1')
@deprecator.deprecated('1.2', 'Major deprecation message.')
def any_func():
pass
any_func()
@deprecator.deprecated('1.2')
def other_func():
pass
other_func()
self.assertListEqual(self.messages,
['[module_name 1.1] Major deprecation message.',
'[module_name 1.1] ',
'[module_name 1.2] Major deprecation message.',
'[module_name 1.2] The function "other_func" is deprecated'])
def test_class_deprecated_manager(self):
deprecator = deprecation.DeprecationManager("module_name")
deprecator.compatibility('1.3')
@add_metaclass(deprecator.class_deprecated('1.2'))
class AnyClass(object):
pass
AnyClass()
self.assertEqual(self.messages,
['[module_name 1.2] AnyClass is deprecated'])
def test_deprecated_manager_noprint(self):
deprecator = deprecation.DeprecationManager("module_name")
deprecator.compatibility('1.3')
# This warn should not be printed.
deprecator.warn('1.3', "Minor deprecation message.", 1)
@deprecator.deprecated('1.3', 'Minor deprecation message.')
def any_func():
pass
any_func()
@deprecator.deprecated('1.20')
def other_func():
pass
other_func()
@deprecator.deprecated('1.4')
def other_func():
pass
other_func()
class AnyClass(object):
__metaclass__ = deprecator.class_deprecated((1,5))
AnyClass()
self.assertFalse(self.messages)
if __name__ == '__main__':
unittest_main()
|