13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
from cStringIO import StringIO
19
19
from bzrlib import (
28
26
from bzrlib.tests import TestCase
29
27
from bzrlib.inventory import Inventory, InventoryEntry
144
_expected_inv_v6 = """<inventory format="6" revision_id="rev_outer">
145
<directory file_id="tree-root-321" name="" revision="rev_outer" />
146
<directory file_id="dir-id" name="dir" parent_id="tree-root-321" revision="rev_outer" />
147
<file file_id="file-id" name="file" parent_id="tree-root-321" revision="rev_outer" text_sha1="A" text_size="1" />
148
<symlink file_id="link-id" name="link" parent_id="tree-root-321" revision="rev_outer" symlink_target="a" />
152
142
_expected_inv_v7 = """<inventory format="7" revision_id="rev_outer">
153
143
<directory file_id="tree-root-321" name="" revision="rev_outer" />
154
144
<directory file_id="dir-id" name="dir" parent_id="tree-root-321" revision="rev_outer" />
291
281
_inventory_v5a, revision_id='test-rev-id')
292
282
self.assertEqual('test-rev-id', inv.root.revision)
294
def test_unpack_inventory_5a_cache_and_copy(self):
295
# Passing an entry_cache should get populated with the objects
296
# But the returned objects should be copies if return_from_cache is
298
entry_cache = fifo_cache.FIFOCache()
299
inv = bzrlib.xml5.serializer_v5.read_inventory_from_string(
300
_inventory_v5a, revision_id='test-rev-id',
301
entry_cache=entry_cache, return_from_cache=False)
302
for entry in inv.iter_just_entries():
303
key = (entry.file_id, entry.revision)
304
if entry.file_id is inv.root.file_id:
305
# The root id is inferred for xml v5
306
self.assertFalse(key in entry_cache)
308
self.assertIsNot(entry, entry_cache[key])
310
def test_unpack_inventory_5a_cache_no_copy(self):
311
# Passing an entry_cache should get populated with the objects
312
# The returned objects should be exact if return_from_cache is
314
entry_cache = fifo_cache.FIFOCache()
315
inv = bzrlib.xml5.serializer_v5.read_inventory_from_string(
316
_inventory_v5a, revision_id='test-rev-id',
317
entry_cache=entry_cache, return_from_cache=True)
318
for entry in inv.iter_just_entries():
319
key = (entry.file_id, entry.revision)
320
if entry.file_id is inv.root.file_id:
321
# The root id is inferred for xml v5
322
self.assertFalse(key in entry_cache)
324
self.assertIs(entry, entry_cache[key])
326
284
def test_unpack_inventory_5b(self):
327
285
inv = bzrlib.xml5.serializer_v5.read_inventory_from_string(
328
286
_inventory_v5b, revision_id='test-rev-id')
419
377
for path, ie in inv.iter_entries():
420
378
self.assertEqual(ie, inv2[ie.file_id])
422
def test_roundtrip_inventory_v6(self):
423
inv = self.get_sample_inventory()
424
txt = xml6.serializer_v6.write_inventory_to_string(inv)
425
lines = xml6.serializer_v6.write_inventory_to_lines(inv)
426
self.assertEqual(bzrlib.osutils.split_lines(txt), lines)
427
self.assertEqualDiff(_expected_inv_v6, txt)
428
inv2 = xml6.serializer_v6.read_inventory_from_string(txt)
429
self.assertEqual(4, len(inv2))
430
for path, ie in inv.iter_entries():
431
self.assertEqual(ie, inv2[ie.file_id])
433
380
def test_wrong_format_v7(self):
434
381
"""Can't accidentally open a file with wrong serializer"""
435
382
s_v6 = bzrlib.xml6.serializer_v6
546
493
self.assertEqual(len(expected), len(actual))
495
def test_registry(self):
496
self.assertIs(serializer_v4,
497
xml_serializer.format_registry.get('4'))
498
self.assertIs(bzrlib.xml5.serializer_v5,
499
xml_serializer.format_registry.get('5'))
500
self.assertIs(bzrlib.xml6.serializer_v6,
501
xml_serializer.format_registry.get('6'))
502
self.assertIs(bzrlib.xml7.serializer_v7,
503
xml_serializer.format_registry.get('7'))
504
self.assertIs(bzrlib.xml8.serializer_v8,
505
xml_serializer.format_registry.get('8'))
549
508
class TestEncodeAndEscape(TestCase):
550
509
"""Whitebox testing of the _encode_and_escape function."""
554
512
# Keep the cache clear before and after the test
555
513
bzrlib.xml8._ensure_utf8_re()
556
514
bzrlib.xml8._clear_cache()