213
213
t.get('inventory.weave').read())
216
class InterString(repository.InterRepository):
217
"""An inter-repository optimised code path for strings.
219
This is for use during testing where we use strings as repositories
220
so that none of the default regsitered inter-repository classes will
225
def is_compatible(repo_source, repo_target):
226
"""InterString is compatible with strings-as-repos."""
227
return isinstance(repo_source, str) and isinstance(repo_target, str)
216
230
class TestInterRepository(TestCaseWithTransport):
218
232
def test_get_default_inter_repository(self):
224
238
# is handed to them.
225
239
dummy_a = "Repository 1."
226
240
dummy_b = "Repository 2."
227
inter_repo = repository.InterRepository.get(dummy_a, dummy_b)
241
self.assertGetsDefaultInterRepository(dummy_a, dummy_b)
243
def assertGetsDefaultInterRepository(self, repo_a, repo_b):
244
"""Asserts that InterRepository.get(repo_a, repo_b) -> the default."""
245
inter_repo = repository.InterRepository.get(repo_a, repo_b)
228
246
self.assertEqual(repository.InterRepository,
229
247
inter_repo.__class__)
230
self.assertEqual(dummy_a, inter_repo.source)
231
self.assertEqual(dummy_b, inter_repo.target)
248
self.assertEqual(repo_a, inter_repo.source)
249
self.assertEqual(repo_b, inter_repo.target)
251
def test_register_inter_repository_class(self):
252
# test that a optimised code path provider - a
253
# InterRepository subclass can be registered and unregistered
254
# and that it is correctly selected when given a repository
255
# pair that it returns true on for the is_compatible static method
257
dummy_a = "Repository 1."
258
dummy_b = "Repository 2."
259
repository.InterRepository.register_optimiser(InterString)
261
# we should get the default for something InterString returns False
263
self.assertFalse(InterString.is_compatible(dummy_a, None))
264
self.assertGetsDefaultInterRepository(dummy_a, None)
265
# and we should get an InterString for a pair it 'likes'
266
self.assertTrue(InterString.is_compatible(dummy_a, dummy_b))
267
inter_repo = repository.InterRepository.get(dummy_a, dummy_b)
268
self.assertEqual(InterString, inter_repo.__class__)
269
self.assertEqual(dummy_a, inter_repo.source)
270
self.assertEqual(dummy_b, inter_repo.target)
272
repository.InterRepository.unregister_optimiser(InterString)
273
# now we should get the default InterRepository object again.
274
self.assertGetsDefaultInterRepository(dummy_a, dummy_b)