/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_registry.py

  • Committer: Robert Collins
  • Date: 2007-07-15 15:40:37 UTC
  • mto: (2592.3.33 repository)
  • mto: This revision was merged to the branch mainline in revision 2624.
  • Revision ID: robertc@robertcollins.net-20070715154037-3ar8g89decddc9su
Make GraphIndex accept nodes as key, value, references, so that the method
signature is closer to what a simple key->value index delivers. Also
change the behaviour when the reference list count is zero to accept
key, value as nodes, and emit key, value to make it identical in that case
to a simple key->value index. This may not be a good idea, but for now it
seems ok.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
"""Tests for the Registry classes"""
18
18
 
21
21
 
22
22
from bzrlib import (
23
23
    errors,
 
24
    registry,
24
25
    osutils,
25
 
    registry,
26
 
    tests,
27
26
    )
28
 
 
29
 
 
30
 
class TestRegistry(tests.TestCase):
 
27
from bzrlib.tests import TestCase, TestCaseInTempDir
 
28
 
 
29
 
 
30
class TestRegistry(TestCase):
31
31
 
32
32
    def register_stuff(self, a_registry):
33
33
        a_registry.register('one', 1)
41
41
 
42
42
        self.failUnless(a_registry.default_key is None)
43
43
 
44
 
        # test get() (self.default_key is None)
 
44
        # test get() (self.default_key == None)
45
45
        self.assertRaises(KeyError, a_registry.get)
46
46
        self.assertRaises(KeyError, a_registry.get, None)
47
47
        self.assertEqual(2, a_registry.get('two'))
187
187
                         ], sorted((key, a_registry.get_info(key))
188
188
                                    for key in a_registry.keys()))
189
189
 
190
 
    def test_get_prefix(self):
191
 
        my_registry = registry.Registry()
192
 
        http_object = object()
193
 
        sftp_object = object()
194
 
        my_registry.register('http:', http_object)
195
 
        my_registry.register('sftp:', sftp_object)
196
 
        found_object, suffix = my_registry.get_prefix('http://foo/bar')
197
 
        self.assertEqual('//foo/bar', suffix)
198
 
        self.assertIs(http_object, found_object)
199
 
        self.assertIsNot(sftp_object, found_object)
200
 
        found_object, suffix = my_registry.get_prefix('sftp://baz/qux')
201
 
        self.assertEqual('//baz/qux', suffix)
202
 
        self.assertIs(sftp_object, found_object)
203
 
 
204
 
 
205
 
class TestRegistryIter(tests.TestCase):
206
 
    """Test registry iteration behaviors.
207
 
 
208
 
    There are dark corner cases here when the registered objects trigger
209
 
    addition in the iterated registry.
210
 
    """
211
 
 
212
 
    def setUp(self):
213
 
        super(TestRegistryIter, self).setUp()
214
 
 
215
 
        # We create a registry with "official" objects and "hidden"
216
 
        # objects. The later represent the side effects that led to bug #277048
217
 
        # and #430510
218
 
        self.registry =  registry.Registry()
219
 
 
220
 
        def register_more():
221
 
            self.registry.register('hidden', None)
222
 
 
223
 
        self.registry.register('passive', None)
224
 
        self.registry.register('active', register_more)
225
 
        self.registry.register('passive-too', None)
226
 
 
227
 
        class InvasiveGetter(registry._ObjectGetter):
228
 
 
229
 
            def get_obj(inner_self):
230
 
                # Surprise ! Getting a registered object (think lazy loaded
231
 
                # module) register yet another object !
232
 
                self.registry.register('more hidden', None)
233
 
                return inner_self._obj
234
 
 
235
 
        self.registry.register('hacky', None)
236
 
        # We peek under the covers because the alternative is to use lazy
237
 
        # registration and create a module that can reference our test registry
238
 
        # it's too much work for such a corner case -- vila 090916
239
 
        self.registry._dict['hacky'] = InvasiveGetter(None)
240
 
 
241
 
    def _iter_them(self, iter_func_name):
242
 
        iter_func = getattr(self.registry, iter_func_name, None)
243
 
        self.assertIsNot(None, iter_func)
244
 
        count = 0
245
 
        for name, func in iter_func():
246
 
            count += 1
247
 
            self.assertFalse(name in ('hidden', 'more hidden'))
248
 
            if func is not None:
249
 
                # Using an object register another one as a side effect
250
 
                func()
251
 
        self.assertEqual(4, count)
252
 
 
253
 
    def test_iteritems(self):
254
 
        # the dict is modified during the iteration
255
 
        self.assertRaises(RuntimeError, self._iter_them, 'iteritems')
256
 
 
257
 
    def test_items(self):
258
 
        # we should be able to iterate even if one item modify the dict
259
 
        self._iter_them('items')
260
 
 
261
 
 
262
 
class TestRegistryWithDirs(tests.TestCaseInTempDir):
 
190
 
 
191
class TestRegistryWithDirs(TestCaseInTempDir):
263
192
    """Registry tests that require temporary dirs"""
264
193
 
265
194
    def create_plugin_file(self, contents):