287
285
def test_creation_from_root_id(self):
288
286
# iff a root id is passed to the constructor, a root directory is made
289
inv = inventory.Inventory(root_id=b'tree-root')
287
inv = inventory.Inventory(root_id='tree-root')
290
288
self.assertNotEqual(None, inv.root)
291
self.assertEqual(b'tree-root', inv.root.file_id)
289
self.assertEqual('tree-root', inv.root.file_id)
293
291
def test_add_path_of_root(self):
294
292
# if no root id is given at creation time, there is no root directory
295
293
inv = inventory.Inventory(root_id=None)
296
294
self.assertIs(None, inv.root)
297
295
# add a root entry by adding its path
298
ie = inv.add_path(u"", "directory", b"my-root")
299
ie.revision = b'test-rev'
300
self.assertEqual(b"my-root", ie.file_id)
296
ie = inv.add_path("", "directory", "my-root")
297
ie.revision = 'test-rev'
298
self.assertEqual("my-root", ie.file_id)
301
299
self.assertIs(ie, inv.root)
303
301
def test_add_path(self):
304
inv = inventory.Inventory(root_id=b'tree_root')
305
ie = inv.add_path(u'hello', 'file', b'hello-id')
306
self.assertEqual(b'hello-id', ie.file_id)
302
inv = inventory.Inventory(root_id='tree_root')
303
ie = inv.add_path('hello', 'file', 'hello-id')
304
self.assertEqual('hello-id', ie.file_id)
307
305
self.assertEqual('file', ie.kind)
309
307
def test_copy(self):
310
308
"""Make sure copy() works and creates a deep copy."""
311
inv = inventory.Inventory(root_id=b'some-tree-root')
312
ie = inv.add_path(u'hello', 'file', b'hello-id')
309
inv = inventory.Inventory(root_id='some-tree-root')
310
ie = inv.add_path('hello', 'file', 'hello-id')
313
311
inv2 = inv.copy()
314
inv.root.file_id = b'some-new-root'
316
self.assertEqual(b'some-tree-root', inv2.root.file_id)
317
self.assertEqual(u'hello', inv2.get_entry(b'hello-id').name)
312
inv.root.file_id = 'some-new-root'
314
self.assertEqual('some-tree-root', inv2.root.file_id)
315
self.assertEqual('hello', inv2['hello-id'].name)
319
317
def test_copy_empty(self):
320
318
"""Make sure an empty inventory can be copied."""
325
323
def test_copy_copies_root_revision(self):
326
324
"""Make sure the revision of the root gets copied."""
327
inv = inventory.Inventory(root_id=b'someroot')
328
inv.root.revision = b'therev'
325
inv = inventory.Inventory(root_id='someroot')
326
inv.root.revision = 'therev'
329
327
inv2 = inv.copy()
330
self.assertEqual(b'someroot', inv2.root.file_id)
331
self.assertEqual(b'therev', inv2.root.revision)
328
self.assertEquals('someroot', inv2.root.file_id)
329
self.assertEquals('therev', inv2.root.revision)
333
331
def test_create_tree_reference(self):
334
inv = inventory.Inventory(b'tree-root-123')
335
inv.add(TreeReference(
336
b'nested-id', 'nested', parent_id=b'tree-root-123',
337
revision=b'rev', reference_revision=b'rev2'))
332
inv = inventory.Inventory('tree-root-123')
333
inv.add(TreeReference('nested-id', 'nested', parent_id='tree-root-123',
334
revision='rev', reference_revision='rev2'))
339
336
def test_error_encoding(self):
340
inv = inventory.Inventory(b'tree-root')
341
inv.add(InventoryFile(b'a-id', u'\u1234', b'tree-root'))
337
inv = inventory.Inventory('tree-root')
338
inv.add(InventoryFile('a-id', u'\u1234', 'tree-root'))
342
339
e = self.assertRaises(errors.InconsistentDelta, inv.add,
343
InventoryFile(b'b-id', u'\u1234', b'tree-root'))
340
InventoryFile('b-id', u'\u1234', 'tree-root'))
344
341
self.assertContainsRe(str(e), r'\\u1234')
346
343
def test_add_recursive(self):
347
parent = InventoryDirectory(b'src-id', 'src', b'tree-root')
348
child = InventoryFile(b'hello-id', 'hello.c', b'src-id')
344
parent = InventoryDirectory('src-id', 'src', 'tree-root')
345
child = InventoryFile('hello-id', 'hello.c', 'src-id')
349
346
parent.children[child.file_id] = child
350
inv = inventory.Inventory(b'tree-root')
347
inv = inventory.Inventory('tree-root')
352
self.assertEqual('src/hello.c', inv.id2path(b'hello-id'))
349
self.assertEqual('src/hello.c', inv.id2path('hello-id'))
606
603
def test_add_file(self):
607
604
inv = self.get_empty_inventory()
608
file1 = inventory.InventoryFile(b'file-id', 'path', inv.root.file_id)
609
file1.revision = b'result'
605
file1 = inventory.InventoryFile('file-id', 'path', inv.root.file_id)
606
file1.revision = 'result'
610
607
file1.text_size = 0
611
608
file1.text_sha1 = ''
612
delta = [(None, u'path', b'file-id', file1)]
609
delta = [(None, u'path', 'file-id', file1)]
613
610
res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)
614
self.assertEqual(b'file-id', res_inv.get_entry(b'file-id').file_id)
611
self.assertEqual('file-id', res_inv['file-id'].file_id)
616
613
def test_remove_file(self):
617
614
inv = self.get_empty_inventory()
618
file1 = inventory.InventoryFile(b'file-id', 'path', inv.root.file_id)
619
file1.revision = b'result'
615
file1 = inventory.InventoryFile('file-id', 'path', inv.root.file_id)
616
file1.revision = 'result'
620
617
file1.text_size = 0
621
618
file1.text_sha1 = ''
623
delta = [(u'path', None, b'file-id', None)]
620
delta = [(u'path', None, 'file-id', None)]
624
621
res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)
625
622
self.assertEqual(None, res_inv.path2id('path'))
626
self.assertRaises(errors.NoSuchId, res_inv.id2path, b'file-id')
623
self.assertRaises(errors.NoSuchId, res_inv.id2path, 'file-id')
628
625
def test_rename_file(self):
629
626
inv = self.get_empty_inventory()
630
627
file1 = self.make_file_ie(name='path', parent_id=inv.root.file_id)
632
629
file2 = self.make_file_ie(name='path2', parent_id=inv.root.file_id)
633
delta = [(u'path', 'path2', b'file-id', file2)]
630
delta = [(u'path', 'path2', 'file-id', file2)]
634
631
res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)
635
632
self.assertEqual(None, res_inv.path2id('path'))
636
self.assertEqual(b'file-id', res_inv.path2id('path2'))
633
self.assertEqual('file-id', res_inv.path2id('path2'))
638
635
def test_replaced_at_new_path(self):
639
636
inv = self.get_empty_inventory()
640
file1 = self.make_file_ie(file_id=b'id1', parent_id=inv.root.file_id)
637
file1 = self.make_file_ie(file_id='id1', parent_id=inv.root.file_id)
642
file2 = self.make_file_ie(file_id=b'id2', parent_id=inv.root.file_id)
643
delta = [(u'name', None, b'id1', None),
644
(None, u'name', b'id2', file2)]
639
file2 = self.make_file_ie(file_id='id2', parent_id=inv.root.file_id)
640
delta = [(u'name', None, 'id1', None),
641
(None, u'name', 'id2', file2)]
645
642
res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)
646
self.assertEqual(b'id2', res_inv.path2id('name'))
643
self.assertEqual('id2', res_inv.path2id('name'))
648
645
def test_rename_dir(self):
649
646
inv = self.get_empty_inventory()
650
dir1 = inventory.InventoryDirectory(b'dir-id', 'dir1', inv.root.file_id)
651
dir1.revision = b'basis'
652
file1 = self.make_file_ie(parent_id=b'dir-id')
647
dir1 = inventory.InventoryDirectory('dir-id', 'dir1', inv.root.file_id)
648
dir1.revision = 'basis'
649
file1 = self.make_file_ie(parent_id='dir-id')
655
dir2 = inventory.InventoryDirectory(b'dir-id', 'dir2', inv.root.file_id)
656
dir2.revision = b'result'
657
delta = [('dir1', 'dir2', b'dir-id', dir2)]
652
dir2 = inventory.InventoryDirectory('dir-id', 'dir2', inv.root.file_id)
653
dir2.revision = 'result'
654
delta = [('dir1', 'dir2', 'dir-id', dir2)]
658
655
res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)
659
656
# The file should be accessible under the new path
660
self.assertEqual(b'file-id', res_inv.path2id('dir2/name'))
657
self.assertEqual('file-id', res_inv.path2id('dir2/name'))
662
659
def test_renamed_dir_with_renamed_child(self):
663
660
inv = self.get_empty_inventory()
664
dir1 = inventory.InventoryDirectory(b'dir-id', 'dir1', inv.root.file_id)
665
dir1.revision = b'basis'
666
file1 = self.make_file_ie(b'file-id-1', 'name1', parent_id=b'dir-id')
667
file2 = self.make_file_ie(b'file-id-2', 'name2', parent_id=b'dir-id')
661
dir1 = inventory.InventoryDirectory('dir-id', 'dir1', inv.root.file_id)
662
dir1.revision = 'basis'
663
file1 = self.make_file_ie('file-id-1', 'name1', parent_id='dir-id')
664
file2 = self.make_file_ie('file-id-2', 'name2', parent_id='dir-id')
671
dir2 = inventory.InventoryDirectory(b'dir-id', 'dir2', inv.root.file_id)
672
dir2.revision = b'result'
673
file2b = self.make_file_ie(b'file-id-2', 'name2', inv.root.file_id)
674
delta = [('dir1', 'dir2', b'dir-id', dir2),
675
('dir1/name2', 'name2', b'file-id-2', file2b)]
668
dir2 = inventory.InventoryDirectory('dir-id', 'dir2', inv.root.file_id)
669
dir2.revision = 'result'
670
file2b = self.make_file_ie('file-id-2', 'name2', inv.root.file_id)
671
delta = [('dir1', 'dir2', 'dir-id', dir2),
672
('dir1/name2', 'name2', 'file-id-2', file2b)]
676
673
res_inv = self.apply_delta(self, inv, delta, invalid_delta=False)
677
674
# The file should be accessible under the new path
678
self.assertEqual(b'file-id-1', res_inv.path2id('dir2/name1'))
675
self.assertEqual('file-id-1', res_inv.path2id('dir2/name1'))
679
676
self.assertEqual(None, res_inv.path2id('dir2/name2'))
680
self.assertEqual(b'file-id-2', res_inv.path2id('name2'))
677
self.assertEqual('file-id-2', res_inv.path2id('name2'))
682
679
def test_is_root(self):
683
680
"""Ensure our root-checking code is accurate."""
998
988
inv.revision_id = "revid"
999
989
inv.root.revision = "rootrev"
1000
990
inv.add(InventoryFile("fileid", "file", inv.root.file_id))
1001
inv.get_entry("fileid").revision = "filerev"
1002
inv.get_entry("fileid").executable = True
1003
inv.get_entry("fileid").text_sha1 = "ffff"
1004
inv.get_entry("fileid").text_size = 1
991
inv["fileid"].revision = "filerev"
992
inv["fileid"].executable = True
993
inv["fileid"].text_sha1 = "ffff"
994
inv["fileid"].text_size = 1
1005
995
chk_bytes = self.get_chk_bytes()
1006
996
chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1007
997
self.assertEqual(2, len(chk_inv))
1009
def test_get_entry(self):
999
def test___getitem__(self):
1010
1000
inv = Inventory()
1011
inv.revision_id = b"revid"
1012
inv.root.revision = b"rootrev"
1013
inv.add(InventoryFile(b"fileid", u"file", inv.root.file_id))
1014
inv.get_entry(b"fileid").revision = b"filerev"
1015
inv.get_entry(b"fileid").executable = True
1016
inv.get_entry(b"fileid").text_sha1 = b"ffff"
1017
inv.get_entry(b"fileid").text_size = 1
1001
inv.revision_id = "revid"
1002
inv.root.revision = "rootrev"
1003
inv.add(InventoryFile("fileid", "file", inv.root.file_id))
1004
inv["fileid"].revision = "filerev"
1005
inv["fileid"].executable = True
1006
inv["fileid"].text_sha1 = "ffff"
1007
inv["fileid"].text_size = 1
1018
1008
chk_bytes = self.get_chk_bytes()
1019
1009
chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1020
data = b''.join(chk_inv.to_lines())
1021
new_inv = CHKInventory.deserialise(chk_bytes, data, (b"revid",))
1022
root_entry = new_inv.get_entry(inv.root.file_id)
1023
file_entry = new_inv.get_entry(b"fileid")
1010
bytes = ''.join(chk_inv.to_lines())
1011
new_inv = CHKInventory.deserialise(chk_bytes, bytes, ("revid",))
1012
root_entry = new_inv[inv.root.file_id]
1013
file_entry = new_inv["fileid"]
1024
1014
self.assertEqual("directory", root_entry.kind)
1025
1015
self.assertEqual(inv.root.file_id, root_entry.file_id)
1026
1016
self.assertEqual(inv.root.parent_id, root_entry.parent_id)
1027
1017
self.assertEqual(inv.root.name, root_entry.name)
1028
self.assertEqual(b"rootrev", root_entry.revision)
1018
self.assertEqual("rootrev", root_entry.revision)
1029
1019
self.assertEqual("file", file_entry.kind)
1030
self.assertEqual(b"fileid", file_entry.file_id)
1020
self.assertEqual("fileid", file_entry.file_id)
1031
1021
self.assertEqual(inv.root.file_id, file_entry.parent_id)
1032
self.assertEqual(u"file", file_entry.name)
1033
self.assertEqual(b"filerev", file_entry.revision)
1034
self.assertEqual(b"ffff", file_entry.text_sha1)
1022
self.assertEqual("file", file_entry.name)
1023
self.assertEqual("filerev", file_entry.revision)
1024
self.assertEqual("ffff", file_entry.text_sha1)
1035
1025
self.assertEqual(1, file_entry.text_size)
1036
1026
self.assertEqual(True, file_entry.executable)
1037
self.assertRaises(errors.NoSuchId, new_inv.get_entry, 'missing')
1027
self.assertRaises(errors.NoSuchId, new_inv.__getitem__, 'missing')
1039
1029
def test_has_id_true(self):
1040
1030
inv = Inventory()
1041
inv.revision_id = b"revid"
1042
inv.root.revision = b"rootrev"
1043
inv.add(InventoryFile(b"fileid", "file", inv.root.file_id))
1044
inv.get_entry(b"fileid").revision = b"filerev"
1045
inv.get_entry(b"fileid").executable = True
1046
inv.get_entry(b"fileid").text_sha1 = "ffff"
1047
inv.get_entry(b"fileid").text_size = 1
1031
inv.revision_id = "revid"
1032
inv.root.revision = "rootrev"
1033
inv.add(InventoryFile("fileid", "file", inv.root.file_id))
1034
inv["fileid"].revision = "filerev"
1035
inv["fileid"].executable = True
1036
inv["fileid"].text_sha1 = "ffff"
1037
inv["fileid"].text_size = 1
1048
1038
chk_bytes = self.get_chk_bytes()
1049
1039
chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1050
self.assertTrue(chk_inv.has_id(b'fileid'))
1040
self.assertTrue(chk_inv.has_id('fileid'))
1051
1041
self.assertTrue(chk_inv.has_id(inv.root.file_id))
1053
1043
def test_has_id_not(self):
1054
1044
inv = Inventory()
1055
inv.revision_id = b"revid"
1056
inv.root.revision = b"rootrev"
1045
inv.revision_id = "revid"
1046
inv.root.revision = "rootrev"
1057
1047
chk_bytes = self.get_chk_bytes()
1058
1048
chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1059
self.assertFalse(chk_inv.has_id(b'fileid'))
1049
self.assertFalse(chk_inv.has_id('fileid'))
1061
1051
def test_id2path(self):
1062
1052
inv = Inventory()
1063
inv.revision_id = b"revid"
1064
inv.root.revision = b"rootrev"
1065
direntry = InventoryDirectory(b"dirid", "dir", inv.root.file_id)
1053
inv.revision_id = "revid"
1054
inv.root.revision = "rootrev"
1055
direntry = InventoryDirectory("dirid", "dir", inv.root.file_id)
1066
1056
fileentry = InventoryFile("fileid", "file", "dirid")
1067
1057
inv.add(direntry)
1068
1058
inv.add(fileentry)
1069
inv.get_entry(b"fileid").revision = b"filerev"
1070
inv.get_entry(b"fileid").executable = True
1071
inv.get_entry(b"fileid").text_sha1 = "ffff"
1072
inv.get_entry(b"fileid").text_size = 1
1073
inv.get_entry(b"dirid").revision = b"filerev"
1059
inv["fileid"].revision = "filerev"
1060
inv["fileid"].executable = True
1061
inv["fileid"].text_sha1 = "ffff"
1062
inv["fileid"].text_size = 1
1063
inv["dirid"].revision = "filerev"
1074
1064
chk_bytes = self.get_chk_bytes()
1075
1065
chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1076
1066
bytes = ''.join(chk_inv.to_lines())
1077
new_inv = CHKInventory.deserialise(chk_bytes, bytes, (b"revid",))
1067
new_inv = CHKInventory.deserialise(chk_bytes, bytes, ("revid",))
1078
1068
self.assertEqual('', new_inv.id2path(inv.root.file_id))
1079
self.assertEqual('dir', new_inv.id2path(b'dirid'))
1080
self.assertEqual('dir/file', new_inv.id2path(b'fileid'))
1069
self.assertEqual('dir', new_inv.id2path('dirid'))
1070
self.assertEqual('dir/file', new_inv.id2path('fileid'))
1082
1072
def test_path2id(self):
1083
1073
inv = Inventory()
1084
inv.revision_id = b"revid"
1085
inv.root.revision = b"rootrev"
1086
direntry = InventoryDirectory(b"dirid", "dir", inv.root.file_id)
1087
fileentry = InventoryFile(b"fileid", "file", b"dirid")
1074
inv.revision_id = "revid"
1075
inv.root.revision = "rootrev"
1076
direntry = InventoryDirectory("dirid", "dir", inv.root.file_id)
1077
fileentry = InventoryFile("fileid", "file", "dirid")
1088
1078
inv.add(direntry)
1089
1079
inv.add(fileentry)
1090
inv.get_entry(b"fileid").revision = b"filerev"
1091
inv.get_entry(b"fileid").executable = True
1092
inv.get_entry(b"fileid").text_sha1 = "ffff"
1093
inv.get_entry(b"fileid").text_size = 1
1094
inv.get_entry(b"dirid").revision = b"filerev"
1080
inv["fileid"].revision = "filerev"
1081
inv["fileid"].executable = True
1082
inv["fileid"].text_sha1 = "ffff"
1083
inv["fileid"].text_size = 1
1084
inv["dirid"].revision = "filerev"
1095
1085
chk_bytes = self.get_chk_bytes()
1096
1086
chk_inv = CHKInventory.from_inventory(chk_bytes, inv)
1097
1087
bytes = ''.join(chk_inv.to_lines())
1098
new_inv = CHKInventory.deserialise(chk_bytes, bytes, (b"revid",))
1088
new_inv = CHKInventory.deserialise(chk_bytes, bytes, ("revid",))
1099
1089
self.assertEqual(inv.root.file_id, new_inv.path2id(''))
1100
self.assertEqual(b'dirid', new_inv.path2id('dir'))
1101
self.assertEqual(b'fileid', new_inv.path2id('dir/file'))
1090
self.assertEqual('dirid', new_inv.path2id('dir'))
1091
self.assertEqual('fileid', new_inv.path2id('dir/file'))
1103
1093
def test_create_by_apply_delta_sets_root(self):
1104
1094
inv = Inventory()
1219
1209
def test_file_entry_to_bytes(self):
1220
1210
inv = CHKInventory(None)
1221
ie = inventory.InventoryFile(b'file-id', 'filename', 'parent-id')
1211
ie = inventory.InventoryFile('file-id', 'filename', 'parent-id')
1222
1212
ie.executable = True
1223
ie.revision = b'file-rev-id'
1213
ie.revision = 'file-rev-id'
1224
1214
ie.text_sha1 = 'abcdefgh'
1225
1215
ie.text_size = 100
1226
1216
bytes = inv._entry_to_bytes(ie)
1227
self.assertEqual(b'file: file-id\nparent-id\nfilename\n'
1228
b'file-rev-id\nabcdefgh\n100\nY', bytes)
1217
self.assertEqual('file: file-id\nparent-id\nfilename\n'
1218
'file-rev-id\nabcdefgh\n100\nY', bytes)
1229
1219
ie2 = inv._bytes_to_entry(bytes)
1230
1220
self.assertEqual(ie, ie2)
1231
1221
self.assertIsInstance(ie2.name, unicode)
1232
self.assertEqual(('filename', b'file-id', b'file-rev-id'),
1222
self.assertEqual(('filename', 'file-id', 'file-rev-id'),
1233
1223
inv._bytes_to_utf8name_key(bytes))
1235
1225
def test_file2_entry_to_bytes(self):
1236
1226
inv = CHKInventory(None)
1237
1227
# \u30a9 == 'omega'
1238
ie = inventory.InventoryFile(b'file-id', u'\u03a9name', b'parent-id')
1228
ie = inventory.InventoryFile('file-id', u'\u03a9name', 'parent-id')
1239
1229
ie.executable = False
1240
ie.revision = b'file-rev-id'
1230
ie.revision = 'file-rev-id'
1241
1231
ie.text_sha1 = '123456'
1242
1232
ie.text_size = 25
1243
1233
bytes = inv._entry_to_bytes(ie)
1244
self.assertEqual(b'file: file-id\nparent-id\n\xce\xa9name\n'
1245
b'file-rev-id\n123456\n25\nN', bytes)
1234
self.assertEqual('file: file-id\nparent-id\n\xce\xa9name\n'
1235
'file-rev-id\n123456\n25\nN', bytes)
1246
1236
ie2 = inv._bytes_to_entry(bytes)
1247
1237
self.assertEqual(ie, ie2)
1248
1238
self.assertIsInstance(ie2.name, unicode)
1249
self.assertEqual((b'\xce\xa9name', b'file-id', b'file-rev-id'),
1239
self.assertEqual(('\xce\xa9name', 'file-id', 'file-rev-id'),
1250
1240
inv._bytes_to_utf8name_key(bytes))
1252
1242
def test_dir_entry_to_bytes(self):
1253
1243
inv = CHKInventory(None)
1254
ie = inventory.InventoryDirectory(b'dir-id', 'dirname', b'parent-id')
1255
ie.revision = b'dir-rev-id'
1244
ie = inventory.InventoryDirectory('dir-id', 'dirname', 'parent-id')
1245
ie.revision = 'dir-rev-id'
1256
1246
bytes = inv._entry_to_bytes(ie)
1257
self.assertEqual(b'dir: dir-id\nparent-id\ndirname\ndir-rev-id', bytes)
1247
self.assertEqual('dir: dir-id\nparent-id\ndirname\ndir-rev-id', bytes)
1258
1248
ie2 = inv._bytes_to_entry(bytes)
1259
1249
self.assertEqual(ie, ie2)
1260
1250
self.assertIsInstance(ie2.name, unicode)
1261
self.assertEqual(('dirname', b'dir-id', b'dir-rev-id'),
1251
self.assertEqual(('dirname', 'dir-id', 'dir-rev-id'),
1262
1252
inv._bytes_to_utf8name_key(bytes))
1264
1254
def test_dir2_entry_to_bytes(self):
1265
1255
inv = CHKInventory(None)
1266
ie = inventory.InventoryDirectory(b'dir-id', u'dir\u03a9name',
1256
ie = inventory.InventoryDirectory('dir-id', u'dir\u03a9name',
1268
ie.revision = b'dir-rev-id'
1258
ie.revision = 'dir-rev-id'
1269
1259
bytes = inv._entry_to_bytes(ie)
1270
self.assertEqual(b'dir: dir-id\n\ndir\xce\xa9name\n'
1271
b'dir-rev-id', bytes)
1260
self.assertEqual('dir: dir-id\n\ndir\xce\xa9name\n'
1261
'dir-rev-id', bytes)
1272
1262
ie2 = inv._bytes_to_entry(bytes)
1273
1263
self.assertEqual(ie, ie2)
1274
1264
self.assertIsInstance(ie2.name, unicode)
1275
1265
self.assertIs(ie2.parent_id, None)
1276
self.assertEqual(('dir\xce\xa9name', b'dir-id', b'dir-rev-id'),
1266
self.assertEqual(('dir\xce\xa9name', 'dir-id', 'dir-rev-id'),
1277
1267
inv._bytes_to_utf8name_key(bytes))
1279
1269
def test_symlink_entry_to_bytes(self):