~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_xml.py

  • Committer: wang
  • Date: 2006-10-29 13:41:32 UTC
  • mto: (2104.4.1 wang_65714)
  • mto: This revision was merged to the branch mainline in revision 2109.
  • Revision ID: wang@ubuntu-20061029134132-3d7f4216f20c4aef
Replace python's difflib by patiencediff because the worst case 
performance is cubic for difflib and people commiting large data 
files are often hurt by this. The worst case performance of patience is 
quadratic. Fix bug 65714.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005 by Canonical Ltd
 
1
# Copyright (C) 2005 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
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>
86
101
"""
87
102
 
88
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
 
89
133
class TestSerializer(TestCase):
90
134
    """Test XML serialization"""
91
135
    def test_canned_inventory(self):
120
164
        eq(rev.parent_ids[0],
121
165
           "mbp@sourcefrog.net-20050905063503-43948f59fa127d92")
122
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
 
123
178
    def test_unpack_inventory_5(self):
124
179
        """Unpack canned new-style inventory"""
125
180
        inp = StringIO(_committed_inv_v5)
150
205
        inv = bzrlib.xml5.serializer_v5.read_inventory(inp)
151
206
        outp = StringIO()
152
207
        bzrlib.xml5.serializer_v5.write_inventory(inv, outp)
153
 
        inv2 = bzrlib.xml5.serializer_v5.read_inventory(StringIO(outp.getvalue()))
154
 
        self.assertEqual(inv, inv2)
 
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)
155
233
 
156
234
    def test_repack_revision_5(self):
157
235
        """Round-trip revision to XML v5"""
158
 
        inp = StringIO(_revision_v5)
159
 
        rev = bzrlib.xml5.serializer_v5.read_revision(inp)
160
 
        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))
164
 
        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)
165
240
 
166
241
    def test_pack_revision_5(self):
167
242
        """Pack revision to XML v5"""
172
247
        outfile_contents = outp.getvalue()
173
248
        self.assertEqual(outfile_contents[-1], '\n')
174
249
        self.assertEqualDiff(outfile_contents, bzrlib.xml5.serializer_v5.write_revision_to_string(rev))
 
250
        self.assertEqualDiff(outfile_contents, _expected_rev_v5)
175
251
 
176
252
    def test_empty_property_value(self):
177
253
        """Create an empty property value check that it serializes correctly"""