1
1
# Copyright (C) 2005 by Canonical Ltd
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.
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.
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
17
17
from cStringIO import StringIO
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
from bzrlib.xml5 import serializer_v5
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" />
74
_basis_inv_v5 = """<inventory revision_id="mbp@sourcefrog.net-20050905063503-43948f59fa127d92">
75
<file file_id="bar-20050901064931-73b4b1138abc9cd2"
76
name="bar" parent_id="TREE_ROOT"
77
revision="mbp@foo-123123"/>
78
<directory name="subdir"
79
file_id="foo-20050801201819-4139aa4a272f4250"
81
revision="mbp@foo-00"/>
82
<file file_id="bar-20050824000535-6bc48cfad47ed134"
83
name="bar" parent_id="foo-20050801201819-4139aa4a272f4250"
84
revision="mbp@foo-00"/>
89
74
class TestSerializer(TestCase):
90
75
"""Test XML serialization"""
91
76
def test_canned_inventory(self):
111
96
def test_unpack_revision_5(self):
112
97
"""Test unpacking a canned revision v5"""
113
98
inp = StringIO(_revision_v5)
114
rev = bzrlib.xml5.serializer_v5.read_revision(inp)
99
rev = serializer_v5.read_revision(inp)
115
100
eq = self.assertEqual
116
101
eq(rev.committer,
117
102
"Martin Pool <mbp@sourcefrog.net>")
123
108
def test_unpack_inventory_5(self):
124
109
"""Unpack canned new-style inventory"""
125
110
inp = StringIO(_committed_inv_v5)
126
inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
127
eq = self.assertEqual
129
ie = inv['bar-20050824000535-6bc48cfad47ed134']
131
eq(ie.revision, 'mbp@foo-00')
133
eq(inv[ie.parent_id].kind, 'directory')
135
def test_unpack_basis_inventory_5(self):
136
"""Unpack canned new-style inventory"""
137
inp = StringIO(_basis_inv_v5)
138
inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
139
eq = self.assertEqual
141
eq(inv.revision_id, 'mbp@sourcefrog.net-20050905063503-43948f59fa127d92')
111
inv = serializer_v5.read_inventory(inp)
112
eq = self.assertEqual
142
114
ie = inv['bar-20050824000535-6bc48cfad47ed134']
143
115
eq(ie.kind, 'file')
144
116
eq(ie.revision, 'mbp@foo-00')
148
120
def test_repack_inventory_5(self):
149
121
inp = StringIO(_committed_inv_v5)
150
inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
122
inv = serializer_v5.read_inventory(inp)
151
123
outp = StringIO()
152
bzrlib.xml5.serializer_v5.write_inventory(inv, outp)
153
inv2 = bzrlib.xml5.serializer_v5.read_inventory(StringIO(outp.getvalue()))
124
serializer_v5.write_inventory(inv, outp)
125
inv2 = serializer_v5.read_inventory(StringIO(outp.getvalue()))
154
126
self.assertEqual(inv, inv2)
156
128
def test_repack_revision_5(self):
157
"""Round-trip revision to XML v5"""
158
129
inp = StringIO(_revision_v5)
159
rev = bzrlib.xml5.serializer_v5.read_revision(inp)
130
rev = serializer_v5.read_revision(inp)
160
131
outp = StringIO()
161
bzrlib.xml5.serializer_v5.write_revision(rev, outp)
162
outfile_contents = outp.getvalue()
163
rev2 = bzrlib.xml5.serializer_v5.read_revision(StringIO(outfile_contents))
132
serializer_v5.write_revision(rev, outp)
133
rev2 = serializer_v5.read_revision(StringIO(outp.getvalue()))
164
134
self.assertEqual(rev, rev2)
166
def test_pack_revision_5(self):
167
"""Pack revision to XML v5"""
168
# fixed 20051025, revisions should have final newline
169
rev = bzrlib.xml5.serializer_v5.read_revision_from_string(_revision_v5)
171
bzrlib.xml5.serializer_v5.write_revision(rev, outp)
172
outfile_contents = outp.getvalue()
173
self.assertEqual(outfile_contents[-1], '\n')
174
self.assertEqualDiff(outfile_contents, bzrlib.xml5.serializer_v5.write_revision_to_string(rev))
176
def test_empty_property_value(self):
177
"""Create an empty property value check that it serializes correctly"""
178
s_v5 = bzrlib.xml5.serializer_v5
179
rev = s_v5.read_revision_from_string(_revision_v5)
181
props = {'empty':'', 'one':'one'}
182
rev.properties = props
183
txt = s_v5.write_revision_to_string(rev)
184
new_rev = s_v5.read_revision_from_string(txt)
185
self.assertEqual(props, new_rev.properties)