/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 tests/test_mapping.py

  • Committer: Vincent Ladeuil
  • Date: 2010-01-25 15:55:48 UTC
  • mto: (4985.1.4 add-attr-cleanup)
  • mto: This revision was merged to the branch mainline in revision 4988.
  • Revision ID: v.ladeuil+lp@free.fr-20100125155548-0l352pujvt5bzl5e
Deploy addAttrCleanup on the whole test suite.

Several use case worth mentioning:

- setting a module or any other object attribute is the majority
by far. In some cases the setting itself is deferred but most of
the time we want to set at the same time we add the cleanup.

- there multiple occurrences of protecting hooks or ui factory
which are now useless (the test framework takes care of that now),

- there was some lambda uses that can now be avoided.

That first cleanup already simplifies things a lot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007 Jelmer Vernooij <jelmer@samba.org>
2
 
# -*- encoding: utf-8 -*-
3
 
#
4
 
# This program is free software; you can redistribute it and/or modify
5
 
# it under the terms of the GNU General Public License as published by
6
 
# the Free Software Foundation; either version 2 of the License, or
7
 
# (at your option) any later version.
8
 
#
9
 
# This program is distributed in the hope that it will be useful,
10
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 
# GNU General Public License for more details.
13
 
#
14
 
# You should have received a copy of the GNU General Public License
15
 
# along with this program; if not, write to the Free Software
16
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
 
 
18
 
from bzrlib.inventory import (
19
 
    InventoryDirectory,
20
 
    InventoryFile,
21
 
    )
22
 
from bzrlib.revision import (
23
 
    Revision,
24
 
    )
25
 
 
26
 
from dulwich.objects import (
27
 
    Blob,
28
 
    Commit,
29
 
    Tree,
30
 
    )
31
 
 
32
 
from bzrlib.plugins.git import tests
33
 
from bzrlib.plugins.git.mapping import (
34
 
    BzrGitMappingv1,
35
 
    directory_to_tree,
36
 
    escape_file_id,
37
 
    unescape_file_id,
38
 
    )
39
 
 
40
 
 
41
 
class TestRevidConversionV1(tests.TestCase):
42
 
 
43
 
    def test_simple_git_to_bzr_revision_id(self):
44
 
        self.assertEqual("git-v1:"
45
 
                         "c6a4d8f1fa4ac650748e647c4b1b368f589a7356",
46
 
                         BzrGitMappingv1().revision_id_foreign_to_bzr(
47
 
                            "c6a4d8f1fa4ac650748e647c4b1b368f589a7356"))
48
 
 
49
 
    def test_simple_bzr_to_git_revision_id(self):
50
 
        self.assertEqual(("c6a4d8f1fa4ac650748e647c4b1b368f589a7356", 
51
 
                         BzrGitMappingv1()),
52
 
                         BzrGitMappingv1().revision_id_bzr_to_foreign(
53
 
                            "git-v1:"
54
 
                            "c6a4d8f1fa4ac650748e647c4b1b368f589a7356"))
55
 
 
56
 
    def test_is_control_file(self):
57
 
        mapping = BzrGitMappingv1()
58
 
        if mapping.roundtripping:
59
 
            self.assertTrue(mapping.is_control_file(".bzrdummy"))
60
 
            self.assertTrue(mapping.is_control_file(".bzrfileids"))
61
 
        self.assertFalse(mapping.is_control_file(".bzrfoo"))
62
 
 
63
 
    def test_generate_file_id(self):
64
 
        mapping = BzrGitMappingv1()
65
 
        self.assertIsInstance(mapping.generate_file_id("la"), str)
66
 
        self.assertIsInstance(mapping.generate_file_id(u"é"), str)
67
 
 
68
 
 
69
 
class FileidTests(tests.TestCase):
70
 
 
71
 
    def test_escape_space(self):
72
 
        self.assertEquals("bla_s", escape_file_id("bla "))
73
 
 
74
 
    def test_escape_underscore(self):
75
 
        self.assertEquals("bla__", escape_file_id("bla_"))
76
 
 
77
 
    def test_escape_underscore_space(self):
78
 
        self.assertEquals("bla___s", escape_file_id("bla_ "))
79
 
 
80
 
    def test_unescape_underscore(self):
81
 
        self.assertEquals("bla ", unescape_file_id("bla_s"))
82
 
 
83
 
    def test_unescape_underscore_space(self):
84
 
        self.assertEquals("bla _", unescape_file_id("bla_s__"))
85
 
 
86
 
 
87
 
class TestImportCommit(tests.TestCase):
88
 
 
89
 
    def test_commit(self):
90
 
        c = Commit()
91
 
        c.tree = "cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
92
 
        c.message = "Some message"
93
 
        c.committer = "Committer"
94
 
        c.commit_time = 4
95
 
        c.author_time = 5
96
 
        c.commit_timezone = 60 * 5
97
 
        c.author_timezone = 60 * 3
98
 
        c.author = "Author"
99
 
        mapping = BzrGitMappingv1()
100
 
        rev, roundtrip_revid, verifiers = mapping.import_commit(c,
101
 
            mapping.revision_id_foreign_to_bzr)
102
 
        self.assertEquals(None, roundtrip_revid)
103
 
        self.assertEquals({}, verifiers)
104
 
        self.assertEquals("Some message", rev.message)
105
 
        self.assertEquals("Committer", rev.committer)
106
 
        self.assertEquals("Author", rev.properties['author'])
107
 
        self.assertEquals(300, rev.timezone)
108
 
        self.assertEquals((), rev.parent_ids)
109
 
        self.assertEquals("5", rev.properties['author-timestamp'])
110
 
        self.assertEquals("180", rev.properties['author-timezone'])
111
 
        self.assertEquals("git-v1:" + c.id, rev.revision_id)
112
 
 
113
 
    def test_explicit_encoding(self):
114
 
        c = Commit()
115
 
        c.tree = "cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
116
 
        c.message = "Some message"
117
 
        c.committer = "Committer"
118
 
        c.commit_time = 4
119
 
        c.author_time = 5
120
 
        c.commit_timezone = 60 * 5
121
 
        c.author_timezone = 60 * 3
122
 
        c.author = u"Authér".encode("iso8859-1")
123
 
        c.encoding = "iso8859-1"
124
 
        mapping = BzrGitMappingv1()
125
 
        rev, roundtrip_revid, verifiers = mapping.import_commit(c,
126
 
            mapping.revision_id_foreign_to_bzr)
127
 
        self.assertEquals(None, roundtrip_revid)
128
 
        self.assertEquals({}, verifiers)
129
 
        self.assertEquals(u"Authér", rev.properties['author'])
130
 
        self.assertEquals("iso8859-1", rev.properties["git-explicit-encoding"])
131
 
        self.assertTrue("git-implicit-encoding" not in rev.properties)
132
 
 
133
 
    def test_implicit_encoding_fallback(self):
134
 
        c = Commit()
135
 
        c.tree = "cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
136
 
        c.message = "Some message"
137
 
        c.committer = "Committer"
138
 
        c.commit_time = 4
139
 
        c.author_time = 5
140
 
        c.commit_timezone = 60 * 5
141
 
        c.author_timezone = 60 * 3
142
 
        c.author = u"Authér".encode("latin1")
143
 
        mapping = BzrGitMappingv1()
144
 
        rev, roundtrip_revid, verifiers = mapping.import_commit(c,
145
 
            mapping.revision_id_foreign_to_bzr)
146
 
        self.assertEquals(None, roundtrip_revid)
147
 
        self.assertEquals({}, verifiers)
148
 
        self.assertEquals(u"Authér", rev.properties['author'])
149
 
        self.assertEquals("latin1", rev.properties["git-implicit-encoding"])
150
 
        self.assertTrue("git-explicit-encoding" not in rev.properties)
151
 
 
152
 
    def test_implicit_encoding_utf8(self):
153
 
        c = Commit()
154
 
        c.tree = "cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
155
 
        c.message = "Some message"
156
 
        c.committer = "Committer"
157
 
        c.commit_time = 4
158
 
        c.author_time = 5
159
 
        c.commit_timezone = 60 * 5
160
 
        c.author_timezone = 60 * 3
161
 
        c.author = u"Authér".encode("utf-8")
162
 
        mapping = BzrGitMappingv1()
163
 
        rev, roundtrip_revid, verifiers = mapping.import_commit(c,
164
 
            mapping.revision_id_foreign_to_bzr)
165
 
        self.assertEquals(None, roundtrip_revid)
166
 
        self.assertEquals({}, verifiers)
167
 
        self.assertEquals(u"Authér", rev.properties['author'])
168
 
        self.assertTrue("git-explicit-encoding" not in rev.properties)
169
 
        self.assertTrue("git-implicit-encoding" not in rev.properties)
170
 
 
171
 
 
172
 
class RoundtripRevisionsFromBazaar(tests.TestCase):
173
 
 
174
 
    def setUp(self):
175
 
        super(RoundtripRevisionsFromBazaar, self).setUp()
176
 
        self.mapping = BzrGitMappingv1()
177
 
        self._parent_map = {}
178
 
        self._lookup_parent = self._parent_map.__getitem__
179
 
 
180
 
    def assertRoundtripRevision(self, orig_rev):
181
 
        commit = self.mapping.export_commit(orig_rev, "mysha",
182
 
            self._lookup_parent, True, "testamentsha")
183
 
        rev, roundtrip_revid, verifiers = self.mapping.import_commit(
184
 
            commit, self.mapping.revision_id_foreign_to_bzr)
185
 
        self.assertEquals(rev.revision_id,
186
 
            self.mapping.revision_id_foreign_to_bzr(commit.id))
187
 
        if self.mapping.roundtripping:
188
 
            self.assertEquals({"testament3-sha1": "testamentsha"} , verifiers)
189
 
            self.assertEquals(orig_rev.revision_id, roundtrip_revid)
190
 
            self.assertEquals(orig_rev.properties, rev.properties)
191
 
            self.assertEquals(orig_rev.committer, rev.committer)
192
 
            self.assertEquals(orig_rev.timestamp, rev.timestamp)
193
 
            self.assertEquals(orig_rev.timezone, rev.timezone)
194
 
            self.assertEquals(orig_rev.message, rev.message)
195
 
            self.assertEquals(list(orig_rev.parent_ids), list(rev.parent_ids))
196
 
        else:
197
 
            self.assertEquals({}, verifiers)
198
 
 
199
 
    def test_simple_commit(self):
200
 
        r = Revision(self.mapping.revision_id_foreign_to_bzr("edf99e6c56495c620f20d5dacff9859ff7119261"))
201
 
        r.message = "MyCommitMessage"
202
 
        r.parent_ids = []
203
 
        r.committer = "Jelmer Vernooij <jelmer@apache.org>"
204
 
        r.timestamp = 453543543
205
 
        r.timezone = 0
206
 
        r.properties = {}
207
 
        self.assertRoundtripRevision(r)
208
 
 
209
 
    def test_revision_id(self):
210
 
        r = Revision("myrevid")
211
 
        r.message = "MyCommitMessage"
212
 
        r.parent_ids = []
213
 
        r.committer = "Jelmer Vernooij <jelmer@apache.org>"
214
 
        r.timestamp = 453543543
215
 
        r.timezone = 0
216
 
        r.properties = {}
217
 
        self.assertRoundtripRevision(r)
218
 
 
219
 
    def test_ghost_parent(self):
220
 
        r = Revision("myrevid")
221
 
        r.message = "MyCommitMessage"
222
 
        r.parent_ids = ["iamaghost"]
223
 
        r.committer = "Jelmer Vernooij <jelmer@apache.org>"
224
 
        r.timestamp = 453543543
225
 
        r.timezone = 0
226
 
        r.properties = {}
227
 
        self.assertRoundtripRevision(r)
228
 
 
229
 
    def test_custom_property(self):
230
 
        r = Revision("myrevid")
231
 
        r.message = "MyCommitMessage"
232
 
        r.parent_ids = []
233
 
        r.properties = {"fool": "bar"}
234
 
        r.committer = "Jelmer Vernooij <jelmer@apache.org>"
235
 
        r.timestamp = 453543543
236
 
        r.timezone = 0
237
 
        self.assertRoundtripRevision(r)
238
 
 
239
 
 
240
 
class RoundtripRevisionsFromGit(tests.TestCase):
241
 
 
242
 
    def setUp(self):
243
 
        super(RoundtripRevisionsFromGit, self).setUp()
244
 
        self.mapping = BzrGitMappingv1()
245
 
 
246
 
    def assertRoundtripTree(self, tree):
247
 
        raise NotImplementedError(self.assertRoundtripTree)
248
 
 
249
 
    def assertRoundtripBlob(self, blob):
250
 
        raise NotImplementedError(self.assertRoundtripBlob)
251
 
 
252
 
    def assertRoundtripCommit(self, commit1):
253
 
        rev, roundtrip_revid, verifiers = self.mapping.import_commit(
254
 
            commit1, self.mapping.revision_id_foreign_to_bzr)
255
 
        commit2 = self.mapping.export_commit(rev, "12341212121212", None,
256
 
            True, None)
257
 
        self.assertEquals(commit1.committer, commit2.committer)
258
 
        self.assertEquals(commit1.commit_time, commit2.commit_time)
259
 
        self.assertEquals(commit1.commit_timezone, commit2.commit_timezone)
260
 
        self.assertEquals(commit1.author, commit2.author)
261
 
        self.assertEquals(commit1.author_time, commit2.author_time)
262
 
        self.assertEquals(commit1.author_timezone, commit2.author_timezone)
263
 
        self.assertEquals(commit1.message, commit2.message)
264
 
        self.assertEquals(commit1.encoding, commit2.encoding)
265
 
 
266
 
    def test_commit(self):
267
 
        c = Commit()
268
 
        c.tree = "cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
269
 
        c.message = "Some message"
270
 
        c.committer = "Committer <Committer>"
271
 
        c.commit_time = 4
272
 
        c.commit_timezone = -60 * 3
273
 
        c.author_time = 5
274
 
        c.author_timezone = 60 * 2
275
 
        c.author = "Author <author>"
276
 
        self.assertRoundtripCommit(c)
277
 
 
278
 
    def test_commit_zero_utc_timezone(self):
279
 
        c = Commit()
280
 
        c.tree = "cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
281
 
        c.message = "Some message"
282
 
        c.committer = "Committer <Committer>"
283
 
        c.commit_time = 4
284
 
        c.commit_timezone = 0
285
 
        c._commit_timezone_neg_utc = True
286
 
        c.author_time = 5
287
 
        c.author_timezone = 60 * 2
288
 
        c.author = "Author <author>"
289
 
        self.assertRoundtripCommit(c)
290
 
 
291
 
    def test_commit_encoding(self):
292
 
        c = Commit()
293
 
        c.tree = "cc9462f7f8263ef5adfbeff2fb936bb36b504cba"
294
 
        c.message = "Some message"
295
 
        c.committer = "Committer <Committer>"
296
 
        c.encoding = 'iso8859-1'
297
 
        c.commit_time = 4
298
 
        c.commit_timezone = -60 * 3
299
 
        c.author_time = 5
300
 
        c.author_timezone = 60 * 2
301
 
        c.author = "Author <author>"
302
 
        self.assertRoundtripCommit(c)
303
 
 
304
 
 
305
 
class DirectoryToTreeTests(tests.TestCase):
306
 
 
307
 
    def test_empty(self):
308
 
        ie = InventoryDirectory('foo', 'foo', 'foo')
309
 
        t = directory_to_tree(ie, None, {}, None)
310
 
        self.assertEquals(None, t)
311
 
 
312
 
    def test_empty_dir(self):
313
 
        ie = InventoryDirectory('foo', 'foo', 'foo')
314
 
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
315
 
        ie.children['bar'] = child_ie
316
 
        t = directory_to_tree(ie, lambda x: None, {}, None)
317
 
        self.assertEquals(None, t)
318
 
 
319
 
    def test_empty_dir_dummy_files(self):
320
 
        ie = InventoryDirectory('foo', 'foo', 'foo')
321
 
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
322
 
        ie.children['bar'] = child_ie
323
 
        t = directory_to_tree(ie, lambda x: None, {}, ".mydummy")
324
 
        self.assertTrue(".mydummy" in t)
325
 
 
326
 
    def test_empty_root(self):
327
 
        ie = InventoryDirectory('foo', 'foo', None)
328
 
        child_ie = InventoryDirectory('bar', 'bar', 'bar')
329
 
        ie.children['bar'] = child_ie
330
 
        t = directory_to_tree(ie, lambda x: None, {}, None)
331
 
        self.assertEquals(Tree(), t)
332
 
 
333
 
    def test_with_file(self):
334
 
        ie = InventoryDirectory('foo', 'foo', 'foo')
335
 
        child_ie = InventoryFile('bar', 'bar', 'bar')
336
 
        ie.children['bar'] = child_ie
337
 
        b = Blob.from_string("bla")
338
 
        t1 = directory_to_tree(ie, lambda x: b.id, {}, None)
339
 
        t2 = Tree()
340
 
        t2.add(0100644, "bar", b.id)
341
 
        self.assertEquals(t1, t2)