/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 bzrlib/tests/test_xml.py

  • Committer: John Arbash Meinel
  • Date: 2008-07-09 21:42:24 UTC
  • mto: This revision was merged to the branch mainline in revision 3543.
  • Revision ID: john@arbash-meinel.com-20080709214224-r75k87r6a01pfc3h
Restore a real weave merge to 'bzr merge --weave'.

To do so efficiently, we only add the simple LCAs to the final weave
object, unless we run into complexities with the merge graph.
This gives the same effective result as adding all the texts,
with the advantage of not having to extract all of them.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005 Canonical Ltd
2
2
#
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
12
12
#
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
16
16
 
17
17
from cStringIO import StringIO
18
18
 
19
19
from bzrlib import (
20
 
    errors,
21
 
    fifo_cache,
22
 
    inventory,
23
 
    xml6,
 
20
    errors, 
 
21
    inventory, 
24
22
    xml7,
25
23
    xml8,
26
 
    serializer,
 
24
    xml_serializer,
27
25
    )
28
26
from bzrlib.tests import TestCase
29
27
from bzrlib.inventory import Inventory, InventoryEntry
82
80
"""
83
81
 
84
82
_committed_inv_v5 = """<inventory>
85
 
<file file_id="bar-20050901064931-73b4b1138abc9cd2"
86
 
      name="bar" parent_id="TREE_ROOT"
 
83
<file file_id="bar-20050901064931-73b4b1138abc9cd2" 
 
84
      name="bar" parent_id="TREE_ROOT" 
87
85
      revision="mbp@foo-123123"
88
86
      text_sha1="A" text_size="1"/>
89
87
<directory name="subdir"
90
88
           file_id="foo-20050801201819-4139aa4a272f4250"
91
 
           parent_id="TREE_ROOT"
 
89
           parent_id="TREE_ROOT" 
92
90
           revision="mbp@foo-00"/>
93
 
<file executable="yes" file_id="bar-20050824000535-6bc48cfad47ed134"
94
 
      name="bar" parent_id="foo-20050801201819-4139aa4a272f4250"
 
91
<file executable="yes" file_id="bar-20050824000535-6bc48cfad47ed134" 
 
92
      name="bar" parent_id="foo-20050801201819-4139aa4a272f4250" 
95
93
      revision="mbp@foo-00"
96
94
      text_sha1="B" text_size="0"/>
97
95
</inventory>
98
96
"""
99
97
 
100
98
_basis_inv_v5 = """<inventory revision_id="mbp@sourcefrog.net-20050905063503-43948f59fa127d92">
101
 
<file file_id="bar-20050901064931-73b4b1138abc9cd2"
102
 
      name="bar" parent_id="TREE_ROOT"
 
99
<file file_id="bar-20050901064931-73b4b1138abc9cd2" 
 
100
      name="bar" parent_id="TREE_ROOT" 
103
101
      revision="mbp@foo-123123"/>
104
102
<directory name="subdir"
105
103
           file_id="foo-20050801201819-4139aa4a272f4250"
106
 
           parent_id="TREE_ROOT"
 
104
           parent_id="TREE_ROOT" 
107
105
           revision="mbp@foo-00"/>
108
 
<file file_id="bar-20050824000535-6bc48cfad47ed134"
109
 
      name="bar" parent_id="foo-20050801201819-4139aa4a272f4250"
 
106
<file file_id="bar-20050824000535-6bc48cfad47ed134" 
 
107
      name="bar" parent_id="foo-20050801201819-4139aa4a272f4250" 
110
108
      revision="mbp@foo-00"/>
111
109
</inventory>
112
110
"""
141
139
</inventory>
142
140
"""
143
141
 
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" />
149
 
</inventory>
150
 
"""
151
 
 
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)
293
283
 
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
297
 
        # False
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)
307
 
            else:
308
 
                self.assertIsNot(entry, entry_cache[key])
309
 
 
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
313
 
        # True
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)
323
 
            else:
324
 
                self.assertIs(entry, entry_cache[key])
325
 
 
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')
336
294
        self.assertEqualDiff(_expected_inv_v5, outp.getvalue())
337
295
        inv2 = bzrlib.xml5.serializer_v5.read_inventory(StringIO(outp.getvalue()))
338
296
        self.assertEqual(inv, inv2)
339
 
 
 
297
    
340
298
    def assertRoundTrips(self, xml_string):
341
299
        inp = StringIO(xml_string)
342
300
        inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
394
352
    def get_sample_inventory(self):
395
353
        inv = Inventory('tree-root-321', revision_id='rev_outer')
396
354
        inv.add(inventory.InventoryFile('file-id', 'file', 'tree-root-321'))
397
 
        inv.add(inventory.InventoryDirectory('dir-id', 'dir',
 
355
        inv.add(inventory.InventoryDirectory('dir-id', 'dir', 
398
356
                                             'tree-root-321'))
399
357
        inv.add(inventory.InventoryLink('link-id', 'link', 'tree-root-321'))
400
358
        inv['tree-root-321'].revision = 'rev_outer'
419
377
        for path, ie in inv.iter_entries():
420
378
            self.assertEqual(ie, inv2[ie.file_id])
421
379
 
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])
432
 
 
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
436
383
        s_v7 = xml7.serializer_v7
437
 
        self.assertRaises(errors.UnexpectedInventoryFormat,
 
384
        self.assertRaises(errors.UnexpectedInventoryFormat, 
438
385
                          s_v7.read_inventory_from_string, _expected_inv_v5)
439
 
        self.assertRaises(errors.UnexpectedInventoryFormat,
 
386
        self.assertRaises(errors.UnexpectedInventoryFormat, 
440
387
                          s_v6.read_inventory_from_string, _expected_inv_v7)
441
388
 
442
389
    def test_tree_reference(self):
458
405
        self.assertEqual('tree-root-321', inv2['nested-id'].parent_id)
459
406
        self.assertEqual('rev-outer', inv2['nested-id'].revision)
460
407
        self.assertEqual('rev-inner', inv2['nested-id'].reference_revision)
461
 
        self.assertRaises(errors.UnsupportedInventoryKind,
 
408
        self.assertRaises(errors.UnsupportedInventoryKind, 
462
409
                          s_v6.read_inventory_from_string,
463
410
                          txt.replace('format="7"', 'format="6"'))
464
 
        self.assertRaises(errors.UnsupportedInventoryKind,
 
411
        self.assertRaises(errors.UnsupportedInventoryKind, 
465
412
                          s_v5.read_inventory_from_string,
466
413
                          txt.replace('format="7"', 'format="5"'))
467
414
 
545
492
 
546
493
        self.assertEqual(len(expected), len(actual))
547
494
 
 
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'))
 
506
 
548
507
 
549
508
class TestEncodeAndEscape(TestCase):
550
509
    """Whitebox testing of the _encode_and_escape function."""
551
510
 
552
511
    def setUp(self):
553
 
        TestCase.setUp(self)
554
512
        # Keep the cache clear before and after the test
555
513
        bzrlib.xml8._ensure_utf8_re()
556
514
        bzrlib.xml8._clear_cache()