source: tailor/vcpx/tests/tailor.py @ 1045

Revision 1045, 9.3 KB checked in by lele@…, 7 years ago (diff)

Parametrize the temporary directory used by tests

Line 
1# -*- mode: python; coding: utf-8 -*-
2# :Progetto: vcpx -- Operational tests
3# :Creato:   lun 08 ago 2005 22:17:10 CEST
4# :Autore:   Lele Gaifax <lele@nautilus.homeip.net>
5# :Licenza:  GNU General Public License
6#
7
8"""\
9#!tailor
10'''
11[DEFAULT]
12target-module = None
13source-repository = %(tailor_repo)s
14encoding = None
15target-repository = None
16use-svn-propset = False
17source-module = None
18update = True
19subdir = test
20debug = False
21remove-first-log-line = False
22patch-name-format = None
23verbose = False
24state-file = tailor.state
25start-revision = Version 0.9.17
26
27[darcs2bzr]
28target = bzr:tailor
29root-directory = %(testdir)s/darcs2bzr
30source = darcs:tailor
31patch-name-format = %(revision)s
32
33[bzr2darcs]
34source = bzr:tailor
35root-directory = %(testdir)s/bzr2darcs
36target = darcs:bzrtailor
37patch-name-format = %(revision)s
38start-revision = INITIAL
39
40[darcs:tailor]
41
42[bzr:tailor]
43python-path = /opt/src/bzr.dev
44repository = %(testdir)s/darcs2bzr
45
46[darcs:bzrtailor]
47
48
49[darcs2cdv]
50target = cdv:tailor
51root-directory = %(testdir)s/darcs2cdv
52source = darcs:tailor
53
54[cdv:tailor]
55
56
57[darcs2hg]
58target = hg:tailor
59root-directory = %(testdir)s/darcs2hg
60source = darcs:tailor
61
62[hg:tailor]
63
64
65[darcs2svn]
66target = svn:tailor
67root-directory = %(testdir)s/darcs2svn
68source = darcs:svntailor
69start-revision = INITIAL
70
71[svn2darcs]
72target = darcs:svntailor
73root-directory = %(testdir)s/svn2darcs
74source = svn:tailor
75start-revision = 1
76
77[svn:tailor]
78repository = file://%(testdir)s/svnrepo
79module = tailor
80subdir = svnside
81use-propset = True
82
83[darcs:svntailor]
84repository = /home/lele/public_html/projects/tailor
85subdir = darcside
86
87
88[darcs2monotone]
89target = monotone:tailor
90root-directory = %(testdir)s/darcs2monotone
91source = darcs:tailor
92
93[monotone2darcs]
94source = monotone:tailor
95root-directory = %(testdir)s/monotone2darcs
96target = darcs:mtntailor
97start-revision = INITIAL
98
99[monotone:tailor]
100keyid = tailor
101passphrase = fin che la barca va
102repository = %(testdir)s/tailor-mtn.db
103module = tailor.test
104subdir = mntside
105
106[darcs:mtntailor]
107subdir = darcside
108
109
110[cvs2darcs]
111target = darcs:pxlib
112root-directory = %(testdir)s/cvs2darcs
113source = cvs:pxlib
114start-revision = R-0-5-1
115subdir = pxlib
116
117[darcs:pxlib]
118
119[cvs:pxlib]
120repository = :pserver:anonymous@cvs.sf.net:/cvsroot/pxlib
121module = pxlib
122encoding = iso-8859-1
123
124
125[cvs2hglib]
126root-directory = %(testdir)s/cvs2hglib
127source = cvs:cmsmini
128target = hglib:cmsmini
129start-revision = INITIAL
130subdir = cmsmini
131before-commit = remap_authors
132
133[cvs:cmsmini]
134repository = :ext:anoncvs@savannah.nongnu.org:/cvsroot/cmsmini
135module = cmsmini
136
137[hglib:cmsmini]
138
139
140[cvs2bzr]
141root-directory = %(testdir)s/cvs2bzr
142source = cvs:atse
143target = bzr:atse
144start-revision = spamies-improvement-branch INITIAL
145subdir = atse
146
147[cvs:atse]
148repository = :pserver:anonymous@cvs.sourceforge.net:/cvsroot/collective
149module = ATSchemaEditorNG
150
151[bzr:atse]
152python-path = /opt/src/bzr.dev
153
154
155[svndump2darcs]
156source = svndump:simple
157target = darcs:simple
158root-directory = %(testdir)s/svndump2darcs
159subdir = simple
160start-revision = INITIAL
161
162[svndump:simple]
163repository = %(tailor_repo)s/vcpx/tests/data/simple.svndump
164subdir = plain
165
166[darcs:simple]
167subdir = .
168
169
170[svndump2hg]
171source = svndump:pyobjc
172target = hg:pyobjc
173root-directory = %(testdir)s/svndump2hg
174start-revision = INITIAL
175
176[svndump:pyobjc]
177repository = %(tailor_repo)s/pyobjc.svndump
178subdir = plain
179
180[hg:pyobjc]
181subdir = hg
182
183
184[svndump2hg-partial]
185source = svndump:simple-partial
186target = hg:simple-partial
187root-directory = %(testdir)s/svndump2hg-partial
188start-revision = INITIAL
189
190[svndump:simple-partial]
191repository = %(tailor_repo)s/vcpx/tests/data/simple.svndump
192#repository = /usr/local/tmp/docit.svndump
193module = subdir
194subdir = plain
195
196[hg:simple-partial]
197subdir = hg
198
199
200[cvs2svn]
201source = cvs:cmfeditions-houston-sprint
202target = svn:cmfeditions
203start-revision = houston-sprint-branch INITIAL
204root-directory = %(testdir)s/cvs2svn
205
206[cvs:cmfeditions-houston-sprint]
207repository = :pserver:anonymous@cvs.sourceforge.net:/cvsroot/collective
208module = CMFEditions
209subdir = cvside
210
211[svn:cmfeditions]
212repository = file://%(testdir)s/cmfeditions.svnrepo
213module = cmfeditions
214subdir = svnside
215
216
217[svn2hg]
218source = svn:plonebook
219target = hg:plonebook
220start-revision = 1101
221root-directory = %(testdir)s/svn2hg
222
223[svn:plonebook]
224repository = http://docit.bice.dyndns.org
225module = /Plone/PloneBook2/it
226
227[hg:plonebook]
228
229[svn2hg_with_externals]
230source = svn:plonebook_we
231target = hg:plonebook
232start-revision = HEAD
233root-directory = %(testdir)s/svn2hg_we
234
235[svn:plonebook_we]
236repository = http://docit.bice.dyndns.org
237module = /Plone/PloneBook2/it
238ignore-externals = False
239'''
240
241def remap_authors(context, changeset):
242    if changeset.author == 'tizziano':
243        changeset.author = 'tiziano'
244    return True
245"""
246
247from unittest import TestCase
248from cStringIO import StringIO
249from vcpx.config import Config
250from vcpx.tailor import Tailorizer
251from vcpx.shwrap import ExternalCommand, PIPE
252
253class OperationalTest(TestCase):
254
255    TESTDIR = '/tmp/tailor-tests'
256
257    def setUp(self):
258        from os import mkdir, getcwd
259        from os.path import exists, split, join
260        from atexit import register
261        from shutil import rmtree
262
263        tailor_repo = getcwd()
264        while tailor_repo and not exists(join(tailor_repo, '_darcs')):
265            tailor_repo = split(tailor_repo)[0]
266        assert exists(join(tailor_repo, '_darcs')), "Tailor Darcs repository not found!"
267        self.tailor_repo = tailor_repo
268        self.config = Config(StringIO(__doc__), {'tailor_repo': tailor_repo,
269                                                 'testdir': self.TESTDIR})
270        if not exists(self.TESTDIR):
271            mkdir(self.TESTDIR)
272            register(rmtree, self.TESTDIR)
273
274    def diffWhenPossible(self, tailorizer):
275        "Diff the resulting sides"
276
277        dwd = tailorizer.workingDir()
278        if not dwd.shared_basedirs:
279            cmd = ["diff", "-r", "-u"]
280            if tailorizer.source.METADIR:
281                cmd.extend(["-x", tailorizer.source.METADIR])
282            if tailorizer.target.METADIR:
283                cmd.extend(["-x", tailorizer.target.METADIR])
284            d = ExternalCommand(command=cmd)
285            out = d.execute(dwd.source.basedir, dwd.target.basedir,
286                            stdout=PIPE)[0]
287            return out.read()
288        else:
289            return ""
290
291    def tailorize(self, project):
292        "The actual test"
293
294        tailorizer = Tailorizer(project, self.config)
295        self.assert_(not tailorizer.exists(),
296                     "For test purposes, better start from scratch!")
297        tailorizer()
298        self.assertEqual(self.diffWhenPossible(tailorizer), "")
299
300class Darcs(OperationalTest):
301    "Test darcs backend"
302
303    def testConfiguration(self):
304        "Test basic configuration"
305
306        from os.path import expanduser
307
308        p = Tailorizer('darcs2svn', self.config)
309        self.assertEqual(p.source.subdir, 'darcside')
310        self.assertEqual(p.rootdir, '%s/darcs2svn' % self.TESTDIR)
311        self.assertEqual(p.source.repository, self.tailor_repo)
312        self.assertEqual(p.target.repository,
313                         'file://%s/svnrepo' % self.TESTDIR)
314        self.assertEqual(p.state_file.filename,
315                         '%s/darcs2svn/tailor.state' % self.TESTDIR)
316
317        tailorizer = Tailorizer('cvs2darcs', self.config)
318        self.assertEqual(tailorizer.subdir, 'pxlib')
319        self.assertEqual(tailorizer.source.subdir, 'pxlib')
320
321    def testDarcsAndBazaarng(self):
322        "Test darcs to bazaar-ng and the other way around"
323
324        self.tailorize('darcs2bzr')
325        self.tailorize('bzr2darcs')
326
327    def testDarcsToMercurial(self):
328        "Test darcs to mercurial"
329
330        self.tailorize('darcs2hg')
331
332    def testDarcsToCodeville(self):
333        "Test darcs to codeville"
334
335        self.tailorize('darcs2cdv')
336
337    def testDarcsAndSubversion(self):
338        "Test darcs to subversion and the other way around"
339
340        self.tailorize('darcs2svn')
341        self.tailorize('svn2darcs')
342
343    def testDarcsAndMonotone(self):
344        "Test darcs to monotone and the other way around"
345
346        self.tailorize('darcs2monotone')
347        self.tailorize('monotone2darcs')
348
349
350class Cvs(OperationalTest):
351    "Test the CVS source backend"
352
353    def testCvsToDarcs(self):
354        "Test CVS to darcs"
355
356        self.tailorize('cvs2darcs')
357
358    def testCvsToMercurial(self):
359        "Test CVS to mercurial"
360
361        self.tailorize('cvs2hglib')
362
363    def testCvsToBazaarng(self):
364        "Test CVS to bazaar-ng"
365
366        self.tailorize('cvs2bzr')
367
368    def testCvsToSubversion(self):
369        "Test CVS branch to Subversion"
370
371        self.tailorize('cvs2svn')
372
373
374class Svn(OperationalTest):
375    "Test the subversion backend"
376
377    def testExternals(self):
378        "Exercise svn to mercurial with and without svn:externals"
379
380        from os.path import exists
381
382        external = self.TESTDIR + '/svn2hg%s/test/make/docutils.make'
383        self.tailorize('svn2hg')
384        self.failIf(exists(external % ''))
385
386        self.tailorize('svn2hg_with_externals')
387        self.failUnless(exists(external % '_we'))
388
389
390class Svndump(OperationalTest):
391    "Test the svndump source backend (deprecated)"
392
393    def testSvndumpToDarcs(self):
394        "Test subversion dump to darcs"
395
396        self.tailorize('svndump2darcs')
397
398    def testSvndumpToMercurial(self):
399        "Test subversion dump to mercurial"
400
401        self.tailorize('svndump2hg')
402
403    def testPartialSvndumpToMercurial(self):
404        "Test partial subversion dump to mercurial"
405
406        self.tailorize('svndump2hg-partial')
Note: See TracBrowser for help on using the repository browser.