/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 breezy/tests/test__chk_map.py

  • Committer: Jelmer Vernooij
  • Date: 2020-03-22 01:35:14 UTC
  • mfrom: (7490.7.6 work)
  • mto: This revision was merged to the branch mainline in revision 7499.
  • Revision ID: jelmer@jelmer.uk-20200322013514-7vw1ntwho04rcuj3
merge lp:brz/3.1.

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
 
29
29
def load_tests(loader, standard_tests, pattern):
30
30
    suite, _ = tests.permute_tests_for_extension(standard_tests, loader,
31
 
        'breezy.bzr._chk_map_py', 'breezy.bzr._chk_map_pyx')
 
31
                                                 'breezy.bzr._chk_map_py', 'breezy.bzr._chk_map_pyx')
32
32
    return suite
33
33
 
34
34
 
35
35
class TestSearchKeys(tests.TestCase):
36
36
 
37
 
    module = None # Filled in by test parameterization
 
37
    module = None  # Filled in by test parameterization
38
38
 
39
39
    def assertSearchKey16(self, expected, key):
40
40
        self.assertEqual(expected, self.module._search_key_16(key))
44
44
        self.assertEqual(expected, actual, 'actual: %r' % (actual,))
45
45
 
46
46
    def test_simple_16(self):
47
 
        self.assertSearchKey16(b'8C736521', stuple('foo',))
48
 
        self.assertSearchKey16(b'8C736521\x008C736521', stuple('foo', 'foo'))
49
 
        self.assertSearchKey16(b'8C736521\x0076FF8CAA', stuple('foo', 'bar'))
50
 
        self.assertSearchKey16(b'ED82CD11', stuple('abcd',))
 
47
        self.assertSearchKey16(b'8C736521', stuple(b'foo',))
 
48
        self.assertSearchKey16(b'8C736521\x008C736521', stuple(b'foo', b'foo'))
 
49
        self.assertSearchKey16(b'8C736521\x0076FF8CAA', stuple(b'foo', b'bar'))
 
50
        self.assertSearchKey16(b'ED82CD11', stuple(b'abcd',))
51
51
 
52
52
    def test_simple_255(self):
53
 
        self.assertSearchKey255(b'\x8cse!', stuple('foo',))
54
 
        self.assertSearchKey255(b'\x8cse!\x00\x8cse!', stuple('foo', 'foo'))
55
 
        self.assertSearchKey255(b'\x8cse!\x00v\xff\x8c\xaa', stuple('foo', 'bar'))
 
53
        self.assertSearchKey255(b'\x8cse!', stuple(b'foo',))
 
54
        self.assertSearchKey255(b'\x8cse!\x00\x8cse!', stuple(b'foo', b'foo'))
 
55
        self.assertSearchKey255(
 
56
            b'\x8cse!\x00v\xff\x8c\xaa', stuple(b'foo', b'bar'))
56
57
        # The standard mapping for these would include '\n', so it should be
57
58
        # mapped to '_'
58
 
        self.assertSearchKey255(b'\xfdm\x93_\x00P_\x1bL', stuple('<', 'V'))
 
59
        self.assertSearchKey255(b'\xfdm\x93_\x00P_\x1bL', stuple(b'<', b'V'))
59
60
 
60
61
    def test_255_does_not_include_newline(self):
61
62
        # When mapping via _search_key_255, we should never have the '\n'
62
63
        # character, but all other 255 values should be present
63
64
        chars_used = set()
64
65
        for char_in in range(256):
65
 
            search_key = self.module._search_key_255(stuple(chr(char_in),))
66
 
            chars_used.update(search_key)
67
 
        all_chars = {chr(x) for x in range(256)}
 
66
            search_key = self.module._search_key_255(
 
67
                stuple(bytes([char_in]),))
 
68
            chars_used.update([bytes([x]) for x in search_key])
 
69
        all_chars = {bytes([x]) for x in range(256)}
68
70
        unused_chars = all_chars.symmetric_difference(chars_used)
69
 
        self.assertEqual(set(b'\n'), unused_chars)
 
71
        self.assertEqual({b'\n'}, unused_chars)
70
72
 
71
73
 
72
74
class TestDeserialiseLeafNode(tests.TestCase):
75
77
 
76
78
    def assertDeserialiseErrors(self, text):
77
79
        self.assertRaises((ValueError, IndexError),
78
 
            self.module._deserialise_leaf_node, text, b'not-a-real-sha')
 
80
                          self.module._deserialise_leaf_node, text, b'not-a-real-sha')
79
81
 
80
82
    def test_raises_on_non_leaf(self):
81
83
        self.assertDeserialiseErrors(b'')
104
106
            (b"sha1:1234",))
105
107
        self.assertEqual(2, len(node))
106
108
        self.assertEqual([((b"foo bar",), b"baz"), ((b"quux",), b"blarh")],
107
 
            sorted(node.iteritems(None)))
 
109
                         sorted(node.iteritems(None)))
108
110
 
109
111
    def test_deserialise_item_with_null_width_1(self):
110
112
        node = self.module._deserialise_leaf_node(
112
114
            (b"sha1:1234",))
113
115
        self.assertEqual(2, len(node))
114
116
        self.assertEqual([((b"foo",), b"bar\x00baz"), ((b"quux",), b"blarh")],
115
 
            sorted(node.iteritems(None)))
 
117
                         sorted(node.iteritems(None)))
116
118
 
117
119
    def test_deserialise_item_with_null_width_2(self):
118
120
        node = self.module._deserialise_leaf_node(
120
122
            b"quux\x00\x001\nblarh\n",
121
123
            (b"sha1:1234",))
122
124
        self.assertEqual(2, len(node))
123
 
        self.assertEqual([((b"foo", "1"), b"bar\x00baz"), ((b"quux", ""), b"blarh")],
124
 
            sorted(node.iteritems(None)))
 
125
        self.assertEqual([((b"foo", b"1"), b"bar\x00baz"), ((b"quux", b""), b"blarh")],
 
126
                         sorted(node.iteritems(None)))
125
127
 
126
128
    def test_iteritems_selected_one_of_two_items(self):
127
129
        node = self.module._deserialise_leaf_node(
129
131
            (b"sha1:1234",))
130
132
        self.assertEqual(2, len(node))
131
133
        self.assertEqual([((b"quux",), b"blarh")],
132
 
            sorted(node.iteritems(None, [(b"quux",), (b"qaz",)])))
 
134
                         sorted(node.iteritems(None, [(b"quux",), (b"qaz",)])))
133
135
 
134
136
    def test_deserialise_item_with_common_prefix(self):
135
137
        node = self.module._deserialise_leaf_node(
137
139
            (b"sha1:1234",))
138
140
        self.assertEqual(2, len(node))
139
141
        self.assertEqual([((b"foo", b"1"), b"bar\x00baz"), ((b"foo", b"2"), b"blarh")],
140
 
            sorted(node.iteritems(None)))
 
142
                         sorted(node.iteritems(None)))
141
143
        self.assertIs(chk_map._unknown, node._search_prefix)
142
144
        self.assertEqual(b'foo\x00', node._common_serialised_prefix)
143
145
 
148
150
        self.assertEqual(2, len(node))
149
151
        self.assertEqual([((b"foo", b"1"), b"bar\nbaz"),
150
152
                          ((b"foo", b"2"), b"blarh\n"),
151
 
                         ], sorted(node.iteritems(None)))
 
153
                          ], sorted(node.iteritems(None)))
152
154
        self.assertIs(chk_map._unknown, node._search_prefix)
153
155
        self.assertEqual(b'foo\x00', node._common_serialised_prefix)
154
156
 
172
174
 
173
175
    def assertDeserialiseErrors(self, text):
174
176
        self.assertRaises((ValueError, IndexError),
175
 
            self.module._deserialise_internal_node, text,
176
 
                stuple(b'not-a-real-sha',))
 
177
                          self.module._deserialise_internal_node, text,
 
178
                          stuple(b'not-a-real-sha',))
177
179
 
178
180
    def test_raises_on_non_internal(self):
179
181
        self.assertDeserialiseErrors(b'')
256
258
 
257
259
    def test_file(self):
258
260
        self.assertBytesToTextKey((b'file-id', b'revision-id'),
259
 
                 b'file: file-id\nparent-id\nname\nrevision-id\n'
260
 
                 b'da39a3ee5e6b4b0d3255bfef95601890afd80709\n100\nN')
 
261
                                  b'file: file-id\nparent-id\nname\nrevision-id\n'
 
262
                                  b'da39a3ee5e6b4b0d3255bfef95601890afd80709\n100\nN')
261
263
 
262
264
    def test_invalid_no_kind(self):
263
265
        self.assertBytesToTextKeyRaises(
264
 
                 b'file  file-id\nparent-id\nname\nrevision-id\n'
265
 
                 b'da39a3ee5e6b4b0d3255bfef95601890afd80709\n100\nN')
 
266
            b'file  file-id\nparent-id\nname\nrevision-id\n'
 
267
            b'da39a3ee5e6b4b0d3255bfef95601890afd80709\n100\nN')
266
268
 
267
269
    def test_invalid_no_space(self):
268
270
        self.assertBytesToTextKeyRaises(
269
 
                 b'file:file-id\nparent-id\nname\nrevision-id\n'
270
 
                 b'da39a3ee5e6b4b0d3255bfef95601890afd80709\n100\nN')
 
271
            b'file:file-id\nparent-id\nname\nrevision-id\n'
 
272
            b'da39a3ee5e6b4b0d3255bfef95601890afd80709\n100\nN')
271
273
 
272
274
    def test_invalid_too_short_file_id(self):
273
275
        self.assertBytesToTextKeyRaises(b'file:file-id')
280
282
 
281
283
    def test_dir(self):
282
284
        self.assertBytesToTextKey((b'dir-id', b'revision-id'),
283
 
                 b'dir: dir-id\nparent-id\nname\nrevision-id')
 
285
                                  b'dir: dir-id\nparent-id\nname\nrevision-id')