/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

Add a new method ``Tree.revision_tree`` which allows access to cached
trees for arbitrary revisions. This allows the in development dirstate
tree format to provide access to the callers to cached copies of 
inventory data which are cheaper to access than inventories from the
repository. (Robert Collins, Martin Pool)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2005 by 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
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
7
 
 
 
7
#
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
11
# GNU General Public License for more details.
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
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
19
from bzrlib.tests import TestCase
20
20
from bzrlib.inventory import Inventory, InventoryEntry
21
21
from bzrlib.xml4 import serializer_v4
22
 
from bzrlib.xml5 import serializer_v5
 
22
import bzrlib.xml5
23
23
 
24
24
_working_inventory_v4 = """<inventory file_id="TREE_ROOT">
25
25
<entry file_id="bar-20050901064931-73b4b1138abc9cd2" kind="file" name="bar" parent_id="TREE_ROOT" />
57
57
</revision>
58
58
"""
59
59
 
 
60
_revision_v5_utc = """\
 
61
<revision committer="Martin Pool &lt;mbp@sourcefrog.net&gt;"
 
62
    inventory_sha1="e79c31c1deb64c163cf660fdedd476dd579ffd41"
 
63
    revision_id="mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9"
 
64
    timestamp="1125907235.211783886"
 
65
    timezone="0">
 
66
<message>- start splitting code for xml (de)serialization away from objects
 
67
  preparatory to supporting multiple formats by a single library
 
68
</message>
 
69
<parents>
 
70
<revision_ref revision_id="mbp@sourcefrog.net-20050905063503-43948f59fa127d92"/>
 
71
</parents>
 
72
</revision>
 
73
"""
 
74
 
60
75
_committed_inv_v5 = """<inventory>
61
76
<file file_id="bar-20050901064931-73b4b1138abc9cd2" 
62
77
      name="bar" parent_id="TREE_ROOT" 
65
80
           file_id="foo-20050801201819-4139aa4a272f4250"
66
81
           parent_id="TREE_ROOT" 
67
82
           revision="mbp@foo-00"/>
68
 
<file file_id="bar-20050824000535-6bc48cfad47ed134" 
 
83
<file executable="yes" file_id="bar-20050824000535-6bc48cfad47ed134" 
69
84
      name="bar" parent_id="foo-20050801201819-4139aa4a272f4250" 
70
85
      revision="mbp@foo-00"/>
71
86
</inventory>
85
100
</inventory>
86
101
"""
87
102
 
 
103
 
 
104
# DO NOT REFLOW THIS. Its the exact revision we want.
 
105
_expected_rev_v5 = """<revision committer="Martin Pool &lt;mbp@sourcefrog.net&gt;" format="5" inventory_sha1="e79c31c1deb64c163cf660fdedd476dd579ffd41" revision_id="mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9" timestamp="1125907235.211783886" timezone="36000">
 
106
<message>- start splitting code for xml (de)serialization away from objects
 
107
  preparatory to supporting multiple formats by a single library
 
108
</message>
 
109
<parents>
 
110
<revision_ref revision_id="mbp@sourcefrog.net-20050905063503-43948f59fa127d92" />
 
111
</parents>
 
112
</revision>
 
113
"""
 
114
 
 
115
 
 
116
# DO NOT REFLOW THIS. Its the exact inventory we want.
 
117
_expected_inv_v5 = """<inventory format="5">
 
118
<file file_id="bar-20050901064931-73b4b1138abc9cd2" name="bar" revision="mbp@foo-123123" />
 
119
<directory file_id="foo-20050801201819-4139aa4a272f4250" name="subdir" revision="mbp@foo-00" />
 
120
<file executable="yes" file_id="bar-20050824000535-6bc48cfad47ed134" name="bar" parent_id="foo-20050801201819-4139aa4a272f4250" revision="mbp@foo-00" />
 
121
</inventory>
 
122
"""
 
123
 
 
124
 
 
125
_expected_inv_v5_root = """<inventory file_id="f&lt;" format="5" revision_id="mother!">
 
126
<file file_id="bar-20050901064931-73b4b1138abc9cd2" name="bar" parent_id="f&lt;" revision="mbp@foo-123123" />
 
127
<directory file_id="foo-20050801201819-4139aa4a272f4250" name="subdir" parent_id="f&lt;" revision="mbp@foo-00" />
 
128
<file executable="yes" file_id="bar-20050824000535-6bc48cfad47ed134" name="bar" parent_id="foo-20050801201819-4139aa4a272f4250" revision="mbp@foo-00" />
 
129
</inventory>
 
130
"""
 
131
 
 
132
 
88
133
class TestSerializer(TestCase):
89
134
    """Test XML serialization"""
90
135
    def test_canned_inventory(self):
110
155
    def test_unpack_revision_5(self):
111
156
        """Test unpacking a canned revision v5"""
112
157
        inp = StringIO(_revision_v5)
113
 
        rev = serializer_v5.read_revision(inp)
 
158
        rev = bzrlib.xml5.serializer_v5.read_revision(inp)
114
159
        eq = self.assertEqual
115
160
        eq(rev.committer,
116
161
           "Martin Pool <mbp@sourcefrog.net>")
119
164
        eq(rev.parent_ids[0],
120
165
           "mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
121
166
 
 
167
    def test_unpack_revision_5_utc(self):
 
168
        inp = StringIO(_revision_v5_utc)
 
169
        rev = bzrlib.xml5.serializer_v5.read_revision(inp)
 
170
        eq = self.assertEqual
 
171
        eq(rev.committer,
 
172
           "Martin Pool <mbp@sourcefrog.net>")
 
173
        eq(len(rev.parent_ids), 1)
 
174
        eq(rev.timezone, 0)
 
175
        eq(rev.parent_ids[0],
 
176
           "mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
 
177
 
122
178
    def test_unpack_inventory_5(self):
123
179
        """Unpack canned new-style inventory"""
124
180
        inp = StringIO(_committed_inv_v5)
125
 
        inv = serializer_v5.read_inventory(inp)
 
181
        inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
126
182
        eq = self.assertEqual
127
183
        eq(len(inv), 4)
128
184
        ie = inv['bar-20050824000535-6bc48cfad47ed134']
134
190
    def test_unpack_basis_inventory_5(self):
135
191
        """Unpack canned new-style inventory"""
136
192
        inp = StringIO(_basis_inv_v5)
137
 
        inv = serializer_v5.read_inventory(inp)
 
193
        inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
138
194
        eq = self.assertEqual
139
195
        eq(len(inv), 4)
140
196
        eq(inv.revision_id, 'mbp@sourcefrog.net-20050905063503-43948f59fa127d92')
146
202
 
147
203
    def test_repack_inventory_5(self):
148
204
        inp = StringIO(_committed_inv_v5)
149
 
        inv = serializer_v5.read_inventory(inp)
150
 
        outp = StringIO()
151
 
        serializer_v5.write_inventory(inv, outp)
152
 
        inv2 = serializer_v5.read_inventory(StringIO(outp.getvalue()))
153
 
        self.assertEqual(inv, inv2)
 
205
        inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
 
206
        outp = StringIO()
 
207
        bzrlib.xml5.serializer_v5.write_inventory(inv, outp)
 
208
        self.assertEqualDiff(_expected_inv_v5, outp.getvalue())
 
209
        inv2 = bzrlib.xml5.serializer_v5.read_inventory(StringIO(outp.getvalue()))
 
210
        self.assertEqual(inv, inv2)
 
211
    
 
212
    def assertRoundTrips(self, xml_string):
 
213
        inp = StringIO(xml_string)
 
214
        inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
 
215
        outp = StringIO()
 
216
        bzrlib.xml5.serializer_v5.write_inventory(inv, outp)
 
217
        self.assertEqualDiff(xml_string, outp.getvalue())
 
218
        inv2 = bzrlib.xml5.serializer_v5.read_inventory(StringIO(outp.getvalue()))
 
219
        self.assertEqual(inv, inv2)
 
220
 
 
221
    def tests_serialize_inventory_v5_with_root(self):
 
222
        self.assertRoundTrips(_expected_inv_v5_root)
 
223
 
 
224
    def check_repack_revision(self, txt):
 
225
        """Check that repacking a revision yields the same information"""
 
226
        inp = StringIO(txt)
 
227
        rev = bzrlib.xml5.serializer_v5.read_revision(inp)
 
228
        outp = StringIO()
 
229
        bzrlib.xml5.serializer_v5.write_revision(rev, outp)
 
230
        outfile_contents = outp.getvalue()
 
231
        rev2 = bzrlib.xml5.serializer_v5.read_revision(StringIO(outfile_contents))
 
232
        self.assertEqual(rev, rev2)
154
233
 
155
234
    def test_repack_revision_5(self):
156
235
        """Round-trip revision to XML v5"""
157
 
        inp = StringIO(_revision_v5)
158
 
        rev = serializer_v5.read_revision(inp)
159
 
        outp = StringIO()
160
 
        serializer_v5.write_revision(rev, outp)
161
 
        outfile_contents = outp.getvalue()
162
 
        rev2 = serializer_v5.read_revision(StringIO(outfile_contents))
163
 
        self.assertEqual(rev, rev2)
 
236
        self.check_repack_revision(_revision_v5)
 
237
 
 
238
    def test_repack_revision_5_utc(self):
 
239
        self.check_repack_revision(_revision_v5_utc)
164
240
 
165
241
    def test_pack_revision_5(self):
166
242
        """Pack revision to XML v5"""
167
243
        # fixed 20051025, revisions should have final newline
168
 
        rev = serializer_v5.read_revision_from_string(_revision_v5)
 
244
        rev = bzrlib.xml5.serializer_v5.read_revision_from_string(_revision_v5)
169
245
        outp = StringIO()
170
 
        serializer_v5.write_revision(rev, outp)
 
246
        bzrlib.xml5.serializer_v5.write_revision(rev, outp)
171
247
        outfile_contents = outp.getvalue()
172
248
        self.assertEqual(outfile_contents[-1], '\n')
173
 
        self.assertEqualDiff(outfile_contents, serializer_v5.write_revision_to_string(rev))
 
249
        self.assertEqualDiff(outfile_contents, bzrlib.xml5.serializer_v5.write_revision_to_string(rev))
 
250
        self.assertEqualDiff(outfile_contents, _expected_rev_v5)
 
251
 
 
252
    def test_empty_property_value(self):
 
253
        """Create an empty property value check that it serializes correctly"""
 
254
        s_v5 = bzrlib.xml5.serializer_v5
 
255
        rev = s_v5.read_revision_from_string(_revision_v5)
 
256
        outp = StringIO()
 
257
        props = {'empty':'', 'one':'one'}
 
258
        rev.properties = props
 
259
        txt = s_v5.write_revision_to_string(rev)
 
260
        new_rev = s_v5.read_revision_from_string(txt)
 
261
        self.assertEqual(props, new_rev.properties)