21
from bzrlib import symbol_versioning
22
from bzrlib.symbol_versioning import (
21
from breezy import symbol_versioning
22
from breezy.symbol_versioning import (
23
23
deprecated_function,
28
from bzrlib.tests import TestCase
27
from breezy.tests import TestCase
31
30
@deprecated_function(deprecated_in((0, 7, 0)))
37
36
a_deprecated_list = symbol_versioning.deprecated_list(deprecated_in((0, 9, 0)),
38
'a_deprecated_list', ['one'], extra="Don't use me")
37
'a_deprecated_list', ['one'], extra="Don't use me")
41
40
a_deprecated_dict = symbol_versioning.DeprecatedDict(
55
54
super(TestDeprecationWarnings, self).setUp()
56
55
self._warnings = []
58
57
@deprecated_method(deprecated_in((0, 7, 0)))
59
58
def deprecated_method(self):
60
59
"""Deprecated method docstring.
72
71
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.
76
72
expected_warning = (
77
"bzrlib.tests.test_symbol_versioning."
73
"breezy.tests.test_symbol_versioning.TestDeprecationWarnings."
78
74
"deprecated_static "
79
75
"was deprecated in version 0.7.0.", DeprecationWarning, 2)
80
76
expected_docstring = (
85
81
self.check_deprecated_callable(
86
82
expected_warning, expected_docstring,
87
83
"deprecated_static",
88
"bzrlib.tests.test_symbol_versioning",
84
"breezy.tests.test_symbol_versioning",
89
85
self.deprecated_static)
91
87
def test_deprecated_method(self):
92
88
expected_warning = (
93
"bzrlib.tests.test_symbol_versioning."
89
"breezy.tests.test_symbol_versioning."
94
90
"TestDeprecationWarnings.deprecated_method "
95
91
"was deprecated in version 0.7.0.", DeprecationWarning, 2)
96
92
expected_docstring = (
103
99
self.check_deprecated_callable(expected_warning, expected_docstring,
104
100
"deprecated_method",
105
"bzrlib.tests.test_symbol_versioning",
101
"breezy.tests.test_symbol_versioning",
106
102
self.deprecated_method)
108
104
def test_deprecated_function(self):
109
105
expected_warning = (
110
"bzrlib.tests.test_symbol_versioning.sample_deprecated_function "
106
"breezy.tests.test_symbol_versioning.sample_deprecated_function "
111
107
"was deprecated in version 0.7.0.", DeprecationWarning, 2)
112
108
expected_docstring = ('Deprecated function docstring.\n'
116
112
self.check_deprecated_callable(expected_warning, expected_docstring,
117
113
"sample_deprecated_function",
118
"bzrlib.tests.test_symbol_versioning",
114
"breezy.tests.test_symbol_versioning",
119
115
sample_deprecated_function)
121
117
def test_deprecated_list(self):
133
129
self.assertEqual(['one', 'foo'], a_deprecated_list)
135
131
a_deprecated_list.extend(['bar', 'baz'])
136
self.assertEqual([expected_warning]*2, self._warnings)
132
self.assertEqual([expected_warning] * 2, self._warnings)
137
133
self.assertEqual(['one', 'foo', 'bar', 'baz'], a_deprecated_list)
139
135
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)
136
self.assertEqual([expected_warning] * 3, self._warnings)
138
['one', 'xxx', 'foo', 'bar', 'baz'], a_deprecated_list)
143
140
a_deprecated_list.remove('foo')
144
self.assertEqual([expected_warning]*4, self._warnings)
141
self.assertEqual([expected_warning] * 4, self._warnings)
145
142
self.assertEqual(['one', 'xxx', 'bar', 'baz'], a_deprecated_list)
147
144
val = a_deprecated_list.pop()
148
self.assertEqual([expected_warning]*5, self._warnings)
145
self.assertEqual([expected_warning] * 5, self._warnings)
149
146
self.assertEqual('baz', val)
150
147
self.assertEqual(['one', 'xxx', 'bar'], a_deprecated_list)
152
149
val = a_deprecated_list.pop(1)
153
self.assertEqual([expected_warning]*6, self._warnings)
150
self.assertEqual([expected_warning] * 6, self._warnings)
154
151
self.assertEqual('xxx', val)
155
152
self.assertEqual(['one', 'bar'], a_deprecated_list)
176
173
symbol_versioning.set_warning_method(old_warning_method)
179
175
def check_deprecated_callable(self, expected_warning, expected_docstring,
180
176
expected_name, expected_module,
181
177
deprecated_callable):
190
186
deprecated_callable()
191
187
self.assertEqual([expected_warning, expected_warning],
193
self.assertEqualDiff(expected_docstring, deprecated_callable.__doc__)
189
self.assertEqualDiff(expected_docstring,
190
deprecated_callable.__doc__)
194
191
self.assertEqualDiff(expected_name, deprecated_callable.__name__)
195
self.assertEqualDiff(expected_module, deprecated_callable.__module__)
192
self.assertEqualDiff(
193
expected_module, deprecated_callable.__module__)
196
194
self.assertTrue(deprecated_callable.is_deprecated)
198
196
symbol_versioning.set_warning_method(old_warning_method)
203
201
self.assertEqual(True, symbol_versioning.deprecated_passed(False))
204
202
self.assertEqual(False,
205
203
symbol_versioning.deprecated_passed(
206
symbol_versioning.DEPRECATED_PARAMETER))
204
symbol_versioning.DEPRECATED_PARAMETER))
208
206
def test_deprecation_string(self):
209
207
"""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(
208
err_message = symbol_versioning.deprecation_string(
214
209
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))))
210
deprecated_in((0, 11, 0)))
211
self.assertEqual(err_message,
212
'breezy.tests.test_symbol_versioning.TestDeprecationWarnings.'
213
'test_deprecation_string was deprecated in '
216
self.assertEqual('breezy.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))))
223
223
class TestSuppressAndActivate(TestCase):
226
super(TestSuppressAndActivate, self).setUp()
227
227
existing_filters = list(warnings.filters)
229
230
warnings.filters[:] = existing_filters
230
231
self.addCleanup(restore)
241
242
symbol_versioning.suppress_deprecation_warnings()
242
243
self.assertFirstWarning('ignore', DeprecationWarning)
245
def test_set_restore_filters(self):
246
original_filters = warnings.filters[:]
247
symbol_versioning.suppress_deprecation_warnings()()
248
self.assertEqual(original_filters, warnings.filters)
244
250
def test_suppress_deprecation_with_warning_filter(self):
245
251
"""don't suppress if we already have a filter"""
246
252
warnings.filterwarnings('error', category=Warning)