/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: Jan Hudec
  • Date: 2006-11-25 20:38:39 UTC
  • mto: (2199.1.1 jam-integration)
  • mto: This revision was merged to the branch mainline in revision 2200.
  • Revision ID: bulb@ucw.cz-20061125203839-9nuhv32z63hb8811
Option --pull for merge command.

Option --pull was added to merge command, that, if the merge would be
trivial, ie. if the common ancestor is equal to the local tip, causes pull of
the remote instead of creating the merger.

Simple test for this option is included.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005 Canonical Ltd
 
2
#
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
16
 
 
17
from cStringIO import StringIO
 
18
 
 
19
from bzrlib.tests import TestCase
 
20
from bzrlib.inventory import Inventory, InventoryEntry
 
21
from bzrlib.xml4 import serializer_v4
 
22
import bzrlib.xml5
 
23
 
 
24
_working_inventory_v4 = """<inventory file_id="TREE_ROOT">
 
25
<entry file_id="bar-20050901064931-73b4b1138abc9cd2" kind="file" name="bar" parent_id="TREE_ROOT" />
 
26
<entry file_id="foo-20050801201819-4139aa4a272f4250" kind="directory" name="foo" parent_id="TREE_ROOT" />
 
27
<entry file_id="bar-20050824000535-6bc48cfad47ed134" kind="file" name="bar" parent_id="foo-20050801201819-4139aa4a272f4250" />
 
28
</inventory>"""
 
29
 
 
30
 
 
31
_revision_v4 = """<revision committer="Martin Pool &lt;mbp@sourcefrog.net&gt;"
 
32
    inventory_id="mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9"
 
33
    inventory_sha1="e79c31c1deb64c163cf660fdedd476dd579ffd41"
 
34
    revision_id="mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9"
 
35
    timestamp="1125907235.211783886"
 
36
    timezone="36000">
 
37
<message>- start splitting code for xml (de)serialization away from objects
 
38
  preparatory to supporting multiple formats by a single library
 
39
</message>
 
40
<parents>
 
41
<revision_ref revision_id="mbp@sourcefrog.net-20050905063503-43948f59fa127d92" revision_sha1="7bdf4cc8c5bdac739f8cf9b10b78cf4b68f915ff" />
 
42
</parents>
 
43
</revision>
 
44
"""
 
45
 
 
46
_revision_v5 = """<revision committer="Martin Pool &lt;mbp@sourcefrog.net&gt;"
 
47
    inventory_sha1="e79c31c1deb64c163cf660fdedd476dd579ffd41"
 
48
    revision_id="mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9"
 
49
    timestamp="1125907235.211783886"
 
50
    timezone="36000">
 
51
<message>- start splitting code for xml (de)serialization away from objects
 
52
  preparatory to supporting multiple formats by a single library
 
53
</message>
 
54
<parents>
 
55
<revision_ref revision_id="mbp@sourcefrog.net-20050905063503-43948f59fa127d92"/>
 
56
</parents>
 
57
</revision>
 
58
"""
 
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
 
 
75
_committed_inv_v5 = """<inventory>
 
76
<file file_id="bar-20050901064931-73b4b1138abc9cd2" 
 
77
      name="bar" parent_id="TREE_ROOT" 
 
78
      revision="mbp@foo-123123"/>
 
79
<directory name="subdir"
 
80
           file_id="foo-20050801201819-4139aa4a272f4250"
 
81
           parent_id="TREE_ROOT" 
 
82
           revision="mbp@foo-00"/>
 
83
<file executable="yes" file_id="bar-20050824000535-6bc48cfad47ed134" 
 
84
      name="bar" parent_id="foo-20050801201819-4139aa4a272f4250" 
 
85
      revision="mbp@foo-00"/>
 
86
</inventory>
 
87
"""
 
88
 
 
89
_basis_inv_v5 = """<inventory revision_id="mbp@sourcefrog.net-20050905063503-43948f59fa127d92">
 
90
<file file_id="bar-20050901064931-73b4b1138abc9cd2" 
 
91
      name="bar" parent_id="TREE_ROOT" 
 
92
      revision="mbp@foo-123123"/>
 
93
<directory name="subdir"
 
94
           file_id="foo-20050801201819-4139aa4a272f4250"
 
95
           parent_id="TREE_ROOT" 
 
96
           revision="mbp@foo-00"/>
 
97
<file file_id="bar-20050824000535-6bc48cfad47ed134" 
 
98
      name="bar" parent_id="foo-20050801201819-4139aa4a272f4250" 
 
99
      revision="mbp@foo-00"/>
 
100
</inventory>
 
101
"""
 
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
 
 
133
class TestSerializer(TestCase):
 
134
    """Test XML serialization"""
 
135
    def test_canned_inventory(self):
 
136
        """Test unpacked a canned inventory v4 file."""
 
137
        inp = StringIO(_working_inventory_v4)
 
138
        inv = serializer_v4.read_inventory(inp)
 
139
        self.assertEqual(len(inv), 4)
 
140
        self.assert_('bar-20050901064931-73b4b1138abc9cd2' in inv)
 
141
 
 
142
    def test_unpack_revision(self):
 
143
        """Test unpacking a canned revision v4"""
 
144
        inp = StringIO(_revision_v4)
 
145
        rev = serializer_v4.read_revision(inp)
 
146
        eq = self.assertEqual
 
147
        eq(rev.committer,
 
148
           "Martin Pool <mbp@sourcefrog.net>")
 
149
        eq(rev.inventory_id,
 
150
           "mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9")
 
151
        eq(len(rev.parent_ids), 1)
 
152
        eq(rev.parent_ids[0],
 
153
           "mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
 
154
 
 
155
    def test_unpack_revision_5(self):
 
156
        """Test unpacking a canned revision v5"""
 
157
        inp = StringIO(_revision_v5)
 
158
        rev = bzrlib.xml5.serializer_v5.read_revision(inp)
 
159
        eq = self.assertEqual
 
160
        eq(rev.committer,
 
161
           "Martin Pool <mbp@sourcefrog.net>")
 
162
        eq(len(rev.parent_ids), 1)
 
163
        eq(rev.timezone, 36000)
 
164
        eq(rev.parent_ids[0],
 
165
           "mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
 
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
 
 
178
    def test_unpack_inventory_5(self):
 
179
        """Unpack canned new-style inventory"""
 
180
        inp = StringIO(_committed_inv_v5)
 
181
        inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
 
182
        eq = self.assertEqual
 
183
        eq(len(inv), 4)
 
184
        ie = inv['bar-20050824000535-6bc48cfad47ed134']
 
185
        eq(ie.kind, 'file')
 
186
        eq(ie.revision, 'mbp@foo-00')
 
187
        eq(ie.name, 'bar')
 
188
        eq(inv[ie.parent_id].kind, 'directory')
 
189
 
 
190
    def test_unpack_basis_inventory_5(self):
 
191
        """Unpack canned new-style inventory"""
 
192
        inp = StringIO(_basis_inv_v5)
 
193
        inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
 
194
        eq = self.assertEqual
 
195
        eq(len(inv), 4)
 
196
        eq(inv.revision_id, 'mbp@sourcefrog.net-20050905063503-43948f59fa127d92')
 
197
        ie = inv['bar-20050824000535-6bc48cfad47ed134']
 
198
        eq(ie.kind, 'file')
 
199
        eq(ie.revision, 'mbp@foo-00')
 
200
        eq(ie.name, 'bar')
 
201
        eq(inv[ie.parent_id].kind, 'directory')
 
202
 
 
203
    def test_repack_inventory_5(self):
 
204
        inp = StringIO(_committed_inv_v5)
 
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)
 
233
 
 
234
    def test_repack_revision_5(self):
 
235
        """Round-trip revision to XML v5"""
 
236
        self.check_repack_revision(_revision_v5)
 
237
 
 
238
    def test_repack_revision_5_utc(self):
 
239
        self.check_repack_revision(_revision_v5_utc)
 
240
 
 
241
    def test_pack_revision_5(self):
 
242
        """Pack revision to XML v5"""
 
243
        # fixed 20051025, revisions should have final newline
 
244
        rev = bzrlib.xml5.serializer_v5.read_revision_from_string(_revision_v5)
 
245
        outp = StringIO()
 
246
        bzrlib.xml5.serializer_v5.write_revision(rev, outp)
 
247
        outfile_contents = outp.getvalue()
 
248
        self.assertEqual(outfile_contents[-1], '\n')
 
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)