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.selftest import TestCase
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
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"/>
74
89
class TestSerializer(TestCase):
75
90
"""Test XML serialization"""
76
91
def test_canned_inventory(self):
96
111
def test_unpack_revision_5(self):
97
112
"""Test unpacking a canned revision v5"""
98
113
inp = StringIO(_revision_v5)
99
rev = serializer_v5.read_revision(inp)
114
rev = bzrlib.xml5.serializer_v5.read_revision(inp)
100
115
eq = self.assertEqual
101
116
eq(rev.committer,
102
117
"Martin Pool <mbp@sourcefrog.net>")
108
123
def test_unpack_inventory_5(self):
109
124
"""Unpack canned new-style inventory"""
110
125
inp = StringIO(_committed_inv_v5)
111
inv = serializer_v5.read_inventory(inp)
112
eq = self.assertEqual
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')
114
142
ie = inv['bar-20050824000535-6bc48cfad47ed134']
115
143
eq(ie.kind, 'file')
116
144
eq(ie.revision, 'mbp@foo-00')
120
148
def test_repack_inventory_5(self):
121
149
inp = StringIO(_committed_inv_v5)
122
inv = serializer_v5.read_inventory(inp)
150
inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
123
151
outp = StringIO()
124
serializer_v5.write_inventory(inv, outp)
125
inv2 = serializer_v5.read_inventory(StringIO(outp.getvalue()))
152
bzrlib.xml5.serializer_v5.write_inventory(inv, outp)
153
inv2 = bzrlib.xml5.serializer_v5.read_inventory(StringIO(outp.getvalue()))
126
154
self.assertEqual(inv, inv2)
128
156
def test_repack_revision_5(self):
157
"""Round-trip revision to XML v5"""
129
158
inp = StringIO(_revision_v5)
130
rev = serializer_v5.read_revision(inp)
159
rev = bzrlib.xml5.serializer_v5.read_revision(inp)
131
160
outp = StringIO()
132
serializer_v5.write_revision(rev, outp)
133
rev2 = serializer_v5.read_revision(StringIO(outp.getvalue()))
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))
134
164
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)