21
from bzrlib import symbol_versioning
22
from bzrlib.symbol_versioning import (
21
from breezy import symbol_versioning
22
from breezy.sixish import PY3
23
from breezy.symbol_versioning import (
23
24
deprecated_function,
28
from bzrlib.tests import TestCase
28
from breezy.tests import TestCase
31
31
@deprecated_function(deprecated_in((0, 7, 0)))
37
37
a_deprecated_list = symbol_versioning.deprecated_list(deprecated_in((0, 9, 0)),
38
'a_deprecated_list', ['one'], extra="Don't use me")
38
'a_deprecated_list', ['one'], extra="Don't use me")
41
41
a_deprecated_dict = symbol_versioning.DeprecatedDict(
55
55
super(TestDeprecationWarnings, self).setUp()
56
56
self._warnings = []
58
58
@deprecated_method(deprecated_in((0, 7, 0)))
59
59
def deprecated_method(self):
60
60
"""Deprecated method docstring.
72
72
def test_deprecated_static(self):
73
# XXX: The results are not quite right because the class name is not
74
# shown - however it is enough to give people a good indication of
75
# where the problem is.
77
"bzrlib.tests.test_symbol_versioning."
79
"was deprecated in version 0.7.0.", DeprecationWarning, 2)
75
"breezy.tests.test_symbol_versioning.TestDeprecationWarnings."
77
"was deprecated in version 0.7.0.", DeprecationWarning, 2)
79
# XXX: The results are not quite right because the class name is not
80
# shown on Python 2- however it is enough to give people a good indication of
81
# where the problem is.
83
"breezy.tests.test_symbol_versioning."
85
"was deprecated in version 0.7.0.", DeprecationWarning, 2)
80
86
expected_docstring = (
81
87
'Deprecated static.\n'
85
91
self.check_deprecated_callable(
86
92
expected_warning, expected_docstring,
87
93
"deprecated_static",
88
"bzrlib.tests.test_symbol_versioning",
94
"breezy.tests.test_symbol_versioning",
89
95
self.deprecated_static)
91
97
def test_deprecated_method(self):
92
98
expected_warning = (
93
"bzrlib.tests.test_symbol_versioning."
99
"breezy.tests.test_symbol_versioning."
94
100
"TestDeprecationWarnings.deprecated_method "
95
101
"was deprecated in version 0.7.0.", DeprecationWarning, 2)
96
102
expected_docstring = (
103
109
self.check_deprecated_callable(expected_warning, expected_docstring,
104
110
"deprecated_method",
105
"bzrlib.tests.test_symbol_versioning",
111
"breezy.tests.test_symbol_versioning",
106
112
self.deprecated_method)
108
114
def test_deprecated_function(self):
109
115
expected_warning = (
110
"bzrlib.tests.test_symbol_versioning.sample_deprecated_function "
116
"breezy.tests.test_symbol_versioning.sample_deprecated_function "
111
117
"was deprecated in version 0.7.0.", DeprecationWarning, 2)
112
118
expected_docstring = ('Deprecated function docstring.\n'
116
122
self.check_deprecated_callable(expected_warning, expected_docstring,
117
123
"sample_deprecated_function",
118
"bzrlib.tests.test_symbol_versioning",
124
"breezy.tests.test_symbol_versioning",
119
125
sample_deprecated_function)
121
127
def test_deprecated_list(self):
133
139
self.assertEqual(['one', 'foo'], a_deprecated_list)
135
141
a_deprecated_list.extend(['bar', 'baz'])
136
self.assertEqual([expected_warning]*2, self._warnings)
142
self.assertEqual([expected_warning] * 2, self._warnings)
137
143
self.assertEqual(['one', 'foo', 'bar', 'baz'], a_deprecated_list)
139
145
a_deprecated_list.insert(1, 'xxx')
140
self.assertEqual([expected_warning]*3, self._warnings)
141
self.assertEqual(['one', 'xxx', 'foo', 'bar', 'baz'], a_deprecated_list)
146
self.assertEqual([expected_warning] * 3, self._warnings)
148
['one', 'xxx', 'foo', 'bar', 'baz'], a_deprecated_list)
143
150
a_deprecated_list.remove('foo')
144
self.assertEqual([expected_warning]*4, self._warnings)
151
self.assertEqual([expected_warning] * 4, self._warnings)
145
152
self.assertEqual(['one', 'xxx', 'bar', 'baz'], a_deprecated_list)
147
154
val = a_deprecated_list.pop()
148
self.assertEqual([expected_warning]*5, self._warnings)
155
self.assertEqual([expected_warning] * 5, self._warnings)
149
156
self.assertEqual('baz', val)
150
157
self.assertEqual(['one', 'xxx', 'bar'], a_deprecated_list)
152
159
val = a_deprecated_list.pop(1)
153
self.assertEqual([expected_warning]*6, self._warnings)
160
self.assertEqual([expected_warning] * 6, self._warnings)
154
161
self.assertEqual('xxx', val)
155
162
self.assertEqual(['one', 'bar'], a_deprecated_list)
176
183
symbol_versioning.set_warning_method(old_warning_method)
179
185
def check_deprecated_callable(self, expected_warning, expected_docstring,
180
186
expected_name, expected_module,
181
187
deprecated_callable):
190
196
deprecated_callable()
191
197
self.assertEqual([expected_warning, expected_warning],
193
self.assertEqualDiff(expected_docstring, deprecated_callable.__doc__)
199
self.assertEqualDiff(expected_docstring,
200
deprecated_callable.__doc__)
194
201
self.assertEqualDiff(expected_name, deprecated_callable.__name__)
195
self.assertEqualDiff(expected_module, deprecated_callable.__module__)
202
self.assertEqualDiff(
203
expected_module, deprecated_callable.__module__)
196
204
self.assertTrue(deprecated_callable.is_deprecated)
198
206
symbol_versioning.set_warning_method(old_warning_method)
203
211
self.assertEqual(True, symbol_versioning.deprecated_passed(False))
204
212
self.assertEqual(False,
205
213
symbol_versioning.deprecated_passed(
206
symbol_versioning.DEPRECATED_PARAMETER))
214
symbol_versioning.DEPRECATED_PARAMETER))
208
216
def test_deprecation_string(self):
209
217
"""We can get a deprecation string for a method or function."""
210
self.assertEqual('bzrlib.tests.test_symbol_versioning.'
211
'TestDeprecationWarnings.test_deprecation_string was deprecated in '
213
symbol_versioning.deprecation_string(
218
err_message = symbol_versioning.deprecation_string(
214
219
self.test_deprecation_string,
215
deprecated_in((0, 11, 0))))
216
self.assertEqual('bzrlib.symbol_versioning.deprecated_function was '
217
'deprecated in version 0.11.0.',
218
symbol_versioning.deprecation_string(
219
symbol_versioning.deprecated_function,
220
deprecated_in((0, 11, 0))))
220
deprecated_in((0, 11, 0)))
221
self.assertEqual(err_message,
222
'breezy.tests.test_symbol_versioning.TestDeprecationWarnings.'
223
'test_deprecation_string was deprecated in '
226
self.assertEqual('breezy.symbol_versioning.deprecated_function was '
227
'deprecated in version 0.11.0.',
228
symbol_versioning.deprecation_string(
229
symbol_versioning.deprecated_function,
230
deprecated_in((0, 11, 0))))
223
233
class TestSuppressAndActivate(TestCase):
236
super(TestSuppressAndActivate, self).setUp()
227
237
existing_filters = list(warnings.filters)
229
240
warnings.filters[:] = existing_filters
230
241
self.addCleanup(restore)
241
252
symbol_versioning.suppress_deprecation_warnings()
242
253
self.assertFirstWarning('ignore', DeprecationWarning)
255
def test_set_restore_filters(self):
256
original_filters = warnings.filters[:]
257
symbol_versioning.suppress_deprecation_warnings()()
258
self.assertEqual(original_filters, warnings.filters)
244
260
def test_suppress_deprecation_with_warning_filter(self):
245
261
"""don't suppress if we already have a filter"""
246
262
warnings.filterwarnings('error', category=Warning)