1
# Copyright (C) 2009, 2010, 2011 Canonical Ltd
1
# Copyright (C) 2009 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
27
27
def load_tests(standard_tests, module, loader):
28
suite, _ = tests.permute_tests_for_extension(standard_tests, loader,
29
'bzrlib._chk_map_py', 'bzrlib._chk_map_pyx')
28
# parameterize all tests in this module
29
suite = loader.suiteClass()
30
import bzrlib._chk_map_py as py_module
31
scenarios = [('python', {'module': py_module})]
32
if CompiledChkMapFeature.available():
33
import bzrlib._chk_map_pyx as c_module
34
scenarios.append(('C', {'module': c_module}))
36
# the compiled module isn't available, so we add a failing test
37
class FailWithoutFeature(tests.TestCase):
39
self.requireFeature(CompiledChkMapFeature)
40
suite.addTest(loader.loadTestsFromTestCase(FailWithoutFeature))
41
tests.multiply_tests(standard_tests, scenarios, suite)
45
class _CompiledChkMapFeature(tests.Feature):
49
import bzrlib._chk_map_pyx
54
def feature_name(self):
55
return 'bzrlib._chk_map_pyx'
57
CompiledChkMapFeature = _CompiledChkMapFeature()
33
60
class TestSearchKeys(tests.TestCase):
35
62
module = None # Filled in by test parameterization
236
263
self.assertEqual(("sha1:1234",), node.key())
237
264
self.assertEqual('pref\x00fo', node._search_prefix)
238
265
self.assertEqual({'pref\x00fo\x00': ('sha1:abcd',)}, node._items)
241
class Test_BytesToTextKey(tests.TestCase):
243
def assertBytesToTextKey(self, key, bytes):
244
self.assertEqual(key,
245
self.module._bytes_to_text_key(bytes))
247
def assertBytesToTextKeyRaises(self, bytes):
248
# These are invalid bytes, and we want to make sure the code under test
249
# raises an exception rather than segfaults, etc. We don't particularly
250
# care what exception.
251
self.assertRaises(Exception, self.module._bytes_to_text_key, bytes)
254
self.assertBytesToTextKey(('file-id', 'revision-id'),
255
'file: file-id\nparent-id\nname\nrevision-id\n'
256
'da39a3ee5e6b4b0d3255bfef95601890afd80709\n100\nN')
258
def test_invalid_no_kind(self):
259
self.assertBytesToTextKeyRaises(
260
'file file-id\nparent-id\nname\nrevision-id\n'
261
'da39a3ee5e6b4b0d3255bfef95601890afd80709\n100\nN')
263
def test_invalid_no_space(self):
264
self.assertBytesToTextKeyRaises(
265
'file:file-id\nparent-id\nname\nrevision-id\n'
266
'da39a3ee5e6b4b0d3255bfef95601890afd80709\n100\nN')
268
def test_invalid_too_short_file_id(self):
269
self.assertBytesToTextKeyRaises('file:file-id')
271
def test_invalid_too_short_parent_id(self):
272
self.assertBytesToTextKeyRaises('file:file-id\nparent-id')
274
def test_invalid_too_short_name(self):
275
self.assertBytesToTextKeyRaises('file:file-id\nparent-id\nname')
278
self.assertBytesToTextKey(('dir-id', 'revision-id'),
279
'dir: dir-id\nparent-id\nname\nrevision-id')