208
209
eq(len(rev.parent_ids), 1)
209
210
eq(rev.timezone, 36000)
210
211
eq(rev.parent_ids[0],
211
"mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
212
b"mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
213
214
def test_unpack_revision_5_utc(self):
214
215
inp = BytesIO(_revision_v5_utc)
219
220
eq(len(rev.parent_ids), 1)
220
221
eq(rev.timezone, 0)
221
222
eq(rev.parent_ids[0],
222
"mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
223
b"mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
224
225
def test_unpack_inventory_5(self):
225
226
"""Unpack canned new-style inventory"""
227
228
inv = breezy.bzr.xml5.serializer_v5.read_inventory(inp)
228
229
eq = self.assertEqual
230
ie = inv.get_entry('bar-20050824000535-6bc48cfad47ed134')
231
ie = inv.get_entry(b'bar-20050824000535-6bc48cfad47ed134')
231
232
eq(ie.kind, 'file')
232
eq(ie.revision, 'mbp@foo-00')
233
eq(ie.revision, b'mbp@foo-00')
233
234
eq(ie.name, 'bar')
234
235
eq(inv.get_entry(ie.parent_id).kind, 'directory')
239
240
inv = breezy.bzr.xml5.serializer_v5.read_inventory(inp)
240
241
eq = self.assertEqual
242
eq(inv.revision_id, 'mbp@sourcefrog.net-20050905063503-43948f59fa127d92')
243
ie = inv.get_entry('bar-20050824000535-6bc48cfad47ed134')
243
eq(inv.revision_id, b'mbp@sourcefrog.net-20050905063503-43948f59fa127d92')
244
ie = inv.get_entry(b'bar-20050824000535-6bc48cfad47ed134')
244
245
eq(ie.kind, 'file')
245
eq(ie.revision, 'mbp@foo-00')
246
eq(ie.revision, b'mbp@foo-00')
246
247
eq(ie.name, 'bar')
247
248
eq(inv.get_entry(ie.parent_id).kind, 'directory')
249
250
def test_unpack_inventory_5a(self):
250
251
inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(
251
_inventory_v5a, revision_id='test-rev-id')
252
self.assertEqual('test-rev-id', inv.root.revision)
252
_inventory_v5a, revision_id=b'test-rev-id')
253
self.assertEqual(b'test-rev-id', inv.root.revision)
254
255
def test_unpack_inventory_5a_cache_and_copy(self):
255
256
# Passing an entry_cache should get populated with the objects
258
259
entry_cache = fifo_cache.FIFOCache()
259
260
inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(
260
_inventory_v5a, revision_id='test-rev-id',
261
_inventory_v5a, revision_id=b'test-rev-id',
261
262
entry_cache=entry_cache, return_from_cache=False)
262
263
for entry in inv.iter_just_entries():
263
264
key = (entry.file_id, entry.revision)
274
275
entry_cache = fifo_cache.FIFOCache()
275
276
inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(
276
_inventory_v5a, revision_id='test-rev-id',
277
_inventory_v5a, revision_id=b'test-rev-id',
277
278
entry_cache=entry_cache, return_from_cache=True)
278
279
for entry in inv.iter_just_entries():
279
280
key = (entry.file_id, entry.revision)
286
287
def test_unpack_inventory_5b(self):
287
288
inv = breezy.bzr.xml5.serializer_v5.read_inventory_from_string(
288
_inventory_v5b, revision_id='test-rev-id')
289
self.assertEqual('a-rev-id', inv.root.revision)
289
_inventory_v5b, revision_id=b'test-rev-id')
290
self.assertEqual(b'a-rev-id', inv.root.revision)
291
292
def test_repack_inventory_5(self):
292
293
inp = BytesIO(_committed_inv_v5)
337
338
breezy.bzr.xml5.serializer_v5.write_revision(rev, outp)
338
339
outfile_contents = outp.getvalue()
339
self.assertEqual(outfile_contents[-1], '\n')
340
self.assertEqual(outfile_contents[-1:], b'\n')
340
341
self.assertEqualDiff(outfile_contents, breezy.bzr.xml5.serializer_v5.write_revision_to_string(rev))
341
342
self.assertEqualDiff(outfile_contents, _expected_rev_v5)
459
460
"""Parsed revision_ids should all be utf-8 strings, not unicode."""
460
461
s_v5 = breezy.bzr.xml5.serializer_v5
461
462
rev = s_v5.read_revision_from_string(_revision_utf8_v5)
462
self.assertEqual('erik@b\xc3\xa5gfors-02', rev.revision_id)
463
self.assertIsInstance(rev.revision_id, str)
464
self.assertEqual(['erik@b\xc3\xa5gfors-01'], rev.parent_ids)
463
self.assertEqual(b'erik@b\xc3\xa5gfors-02', rev.revision_id)
464
self.assertIsInstance(rev.revision_id, bytes)
465
self.assertEqual([b'erik@b\xc3\xa5gfors-01'], rev.parent_ids)
465
466
for parent_id in rev.parent_ids:
466
self.assertIsInstance(parent_id, str)
467
self.assertIsInstance(parent_id, bytes)
467
468
self.assertEqual(u'Include \xb5nicode characters\n', rev.message)
468
self.assertIsInstance(rev.message, unicode)
469
self.assertIsInstance(rev.message, text_type)
470
471
# ie.revision should either be None or a utf-8 revision id
471
472
inv = s_v5.read_inventory_from_string(_inventory_utf8_v5)
481
482
(u's\xb5bdir/b\xe5r', fid_bar2, fid_sub, rev_id_2),
483
484
self.assertEqual(rev_id_2, inv.revision_id)
484
self.assertIsInstance(inv.revision_id, str)
485
self.assertIsInstance(inv.revision_id, bytes)
486
487
actual = list(inv.iter_entries_by_dir())
487
488
for ((exp_path, exp_file_id, exp_parent_id, exp_rev_id),
488
489
(act_path, act_ie)) in zip(expected, actual):
489
490
self.assertEqual(exp_path, act_path)
490
self.assertIsInstance(act_path, unicode)
491
self.assertIsInstance(act_path, text_type)
491
492
self.assertEqual(exp_file_id, act_ie.file_id)
492
self.assertIsInstance(act_ie.file_id, str)
493
self.assertIsInstance(act_ie.file_id, bytes)
493
494
self.assertEqual(exp_parent_id, act_ie.parent_id)
494
495
if exp_parent_id is not None:
495
self.assertIsInstance(act_ie.parent_id, str)
496
self.assertIsInstance(act_ie.parent_id, bytes)
496
497
self.assertEqual(exp_rev_id, act_ie.revision)
497
498
if exp_rev_id is not None:
498
self.assertIsInstance(act_ie.revision, str)
499
self.assertIsInstance(act_ie.revision, bytes)
500
501
self.assertEqual(len(expected), len(actual))
514
515
# are being used in xml attributes, and by returning it now, we have to
515
516
# do fewer string operations later.
516
517
val = breezy.bzr.xml_serializer.encode_and_escape('foo bar')
517
self.assertEqual('foo bar"', val)
518
self.assertEqual(b'foo bar"', val)
518
519
# The second time should be cached
519
520
val2 = breezy.bzr.xml_serializer.encode_and_escape('foo bar')
520
521
self.assertIs(val2, val)
522
523
def test_ascii_with_xml(self):
523
self.assertEqual('&'"<>"',
524
self.assertEqual(b'&'"<>"',
524
525
breezy.bzr.xml_serializer.encode_and_escape('&\'"<>'))
526
527
def test_utf8_with_xml(self):
527
528
# u'\xb5\xe5&\u062c'
528
utf8_str = '\xc2\xb5\xc3\xa5&\xd8\xac'
529
self.assertEqual('µå&ج"',
529
utf8_str = b'\xc2\xb5\xc3\xa5&\xd8\xac'
530
self.assertEqual(b'µå&ج"',
530
531
breezy.bzr.xml_serializer.encode_and_escape(utf8_str))
532
533
def test_unicode(self):
533
534
uni_str = u'\xb5\xe5&\u062c'
534
self.assertEqual('µå&ج"',
535
self.assertEqual(b'µå&ج"',
535
536
breezy.bzr.xml_serializer.encode_and_escape(uni_str))