~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/selftest/test_xml.py

Exclude more files from dumb-rsync upload

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 Canonical Ltd
2
 
#
 
1
# Copyright (C) 2005 by Canonical Ltd
 
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
16
16
 
17
17
from cStringIO import StringIO
18
18
 
19
 
from bzrlib.tests import TestCase
 
19
from bzrlib.selftest import TestCase
20
20
from bzrlib.inventory import Inventory, InventoryEntry
21
21
from bzrlib.xml4 import serializer_v4
22
 
import bzrlib.xml5
 
22
from bzrlib.xml5 import serializer_v5
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" />
32
32
    inventory_id="mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9"
33
33
    inventory_sha1="e79c31c1deb64c163cf660fdedd476dd579ffd41"
34
34
    revision_id="mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9"
35
 
    timestamp="1125907235.212"
 
35
    timestamp="1125907235.211783886"
36
36
    timezone="36000">
37
37
<message>- start splitting code for xml (de)serialization away from objects
38
38
  preparatory to supporting multiple formats by a single library
46
46
_revision_v5 = """<revision committer="Martin Pool &lt;mbp@sourcefrog.net&gt;"
47
47
    inventory_sha1="e79c31c1deb64c163cf660fdedd476dd579ffd41"
48
48
    revision_id="mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9"
49
 
    timestamp="1125907235.212"
 
49
    timestamp="1125907235.211783886"
50
50
    timezone="36000">
51
51
<message>- start splitting code for xml (de)serialization away from objects
52
52
  preparatory to supporting multiple formats by a single library
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.212"
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
60
_committed_inv_v5 = """<inventory>
76
61
<file file_id="bar-20050901064931-73b4b1138abc9cd2" 
77
62
      name="bar" parent_id="TREE_ROOT" 
80
65
           file_id="foo-20050801201819-4139aa4a272f4250"
81
66
           parent_id="TREE_ROOT" 
82
67
           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
68
<file file_id="bar-20050824000535-6bc48cfad47ed134" 
98
69
      name="bar" parent_id="foo-20050801201819-4139aa4a272f4250" 
99
70
      revision="mbp@foo-00"/>
100
71
</inventory>
101
72
"""
102
73
 
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.212" 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
74
class TestSerializer(TestCase):
134
75
    """Test XML serialization"""
135
76
    def test_canned_inventory(self):
155
96
    def test_unpack_revision_5(self):
156
97
        """Test unpacking a canned revision v5"""
157
98
        inp = StringIO(_revision_v5)
158
 
        rev = bzrlib.xml5.serializer_v5.read_revision(inp)
 
99
        rev = serializer_v5.read_revision(inp)
159
100
        eq = self.assertEqual
160
101
        eq(rev.committer,
161
102
           "Martin Pool <mbp@sourcefrog.net>")
164
105
        eq(rev.parent_ids[0],
165
106
           "mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
166
107
 
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
108
    def test_unpack_inventory_5(self):
179
109
        """Unpack canned new-style inventory"""
180
110
        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')
 
111
        inv = serializer_v5.read_inventory(inp)
 
112
        eq = self.assertEqual
 
113
        eq(len(inv), 4)
197
114
        ie = inv['bar-20050824000535-6bc48cfad47ed134']
198
115
        eq(ie.kind, 'file')
199
116
        eq(ie.revision, 'mbp@foo-00')
202
119
 
203
120
    def test_repack_inventory_5(self):
204
121
        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)
 
122
        inv = serializer_v5.read_inventory(inp)
 
123
        outp = StringIO()
 
124
        serializer_v5.write_inventory(inv, outp)
 
125
        inv2 = serializer_v5.read_inventory(StringIO(outp.getvalue()))
 
126
        self.assertEqual(inv, inv2)
233
127
 
234
128
    def test_repack_revision_5(self):
235
129
        """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)
 
130
        inp = StringIO(_revision_v5)
 
131
        rev = serializer_v5.read_revision(inp)
 
132
        outp = StringIO()
 
133
        serializer_v5.write_revision(rev, outp)
 
134
        outfile_contents = outp.getvalue()
 
135
        rev2 = serializer_v5.read_revision(StringIO(outfile_contents))
 
136
        self.assertEqual(rev, rev2)
240
137
 
241
138
    def test_pack_revision_5(self):
242
139
        """Pack revision to XML v5"""
243
140
        # fixed 20051025, revisions should have final newline
244
 
        rev = bzrlib.xml5.serializer_v5.read_revision_from_string(_revision_v5)
 
141
        rev = serializer_v5.read_revision_from_string(_revision_v5)
245
142
        outp = StringIO()
246
 
        bzrlib.xml5.serializer_v5.write_revision(rev, outp)
 
143
        serializer_v5.write_revision(rev, outp)
247
144
        outfile_contents = outp.getvalue()
248
145
        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)
 
146
        self.assertEqualDiff(outfile_contents, serializer_v5.write_revision_to_string(rev))