view svnwrap/tests/test_svnwrap.py @ 7:79b0e059319d

Reorganized the testing infrastructure a bit so that svnwrap is really separate from the rest of the project. Also made it easier to add more tests in the future without making the directory full of annoying files.
author Augie Fackler <durin42@gmail.com>
date Fri, 03 Oct 2008 09:41:25 -0500
parents test_svnwrap.py@f2636cfed115
children bfbce70a9a57
line wrap: on
line source

import os
import shutil
import tempfile
import unittest

from nose import tools

import svnwrap

class TestBasicRepoLayout(unittest.TestCase):
    def setUp(self):
        self.oldwd = os.getcwd()
        self.tmpdir = tempfile.mkdtemp('svnwrap_test')
        self.repo_path = '%s/testrepo' % self.tmpdir
        wc_path = '%s/testrepo_wc' % self.tmpdir
        os.spawnvp(os.P_WAIT, 'svnadmin', ['svnadmin', 'create',
                                           self.repo_path,])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'checkout',
                                      'file://%s' % self.repo_path,
                                      wc_path,])
        os.chdir(wc_path)
        for d in ['branches', 'tags', 'trunk']:
            os.mkdir(os.path.join(wc_path, d))
        #r1
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'add', 'branches', 'tags', 'trunk'])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Empty dirs.'])
        #r2
        files = ['alpha', 'beta', 'delta']
        for f in files:
            open(os.path.join(wc_path, 'trunk', f), 'w').write('This is %s.\n' % f)
        os.chdir('trunk')
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'add']+files)
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Initial Files.'])
        os.chdir('..')
        #r3
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'cp', 'trunk', 'tags/rev1'])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Tag rev 1.'])
        #r4
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'cp', 'trunk', 'branches/crazy'])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Branch to crazy.'])

        #r5
        open(os.path.join(wc_path, 'trunk', 'gamma'), 'w').write('This is %s.\n'
                                                                 % 'gamma')
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'add', 'trunk/gamma', ])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Add gamma'])

        #r6
        open(os.path.join(wc_path, 'branches', 'crazy', 'omega'),
             'w').write('This is %s.\n' % 'omega')
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'add', 'branches/crazy/omega', ])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Add omega'])

        #r7
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'cp', 'trunk', 'branches/more_crazy'])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Branch to more_crazy.'])

        self.repo = svnwrap.SubversionRepo('file://%s' % self.repo_path)

    def tearDown(self):
        shutil.rmtree(self.tmpdir)
        os.chdir(self.oldwd)


    def test_num_revs(self):
        revs = list(self.repo.revisions())
        tools.eq_(len(revs), 7)
        r = revs[1]
        tools.eq_(r.revnum, 2)
        tools.eq_(sorted(r.paths.keys()),
                  ['trunk/alpha', 'trunk/beta', 'trunk/delta'])
        for r in revs:
            for p in r.paths:
                # make sure these paths are always non-absolute for sanity
                if p:
                    assert p[0] != '/'
        revs = list(self.repo.revisions(start=3))
        tools.eq_(len(revs), 4)


    def test_branches(self):
        tools.eq_(self.repo.branches.keys(), ['crazy', 'more_crazy'])
        tools.eq_(self.repo.branches['crazy'], ('trunk', 2, 4))
        tools.eq_(self.repo.branches['more_crazy'], ('trunk', 5, 7))


    def test_tags(self):
        tags = self.repo.tags
        tools.eq_(tags.keys(), ['rev1'])
        tools.eq_(tags['rev1'], ('trunk', 2))

class TestRootAsSubdirOfRepo(TestBasicRepoLayout):
    def setUp(self):
        self.oldwd = os.getcwd()
        self.tmpdir = tempfile.mkdtemp('svnwrap_test')
        self.repo_path = '%s/testrepo' % self.tmpdir
        wc_path = '%s/testrepo_wc' % self.tmpdir
        os.spawnvp(os.P_WAIT, 'svnadmin', ['svnadmin', 'create',
                                           self.repo_path,])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'checkout',
                                      'file://%s' % self.repo_path,
                                      wc_path,])
        self.repo_path += '/dummyproj'
        os.chdir(wc_path)
        os.mkdir('dummyproj')
        os.chdir('dummyproj')
        wc_path += '/dummyproj'
        for d in ['branches', 'tags', 'trunk']:
            os.mkdir(os.path.join(wc_path, d))
        #r1
        os.chdir('..')
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'add', 'dummyproj'])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Empty dirs.'])
        os.chdir('dummyproj')
        #r2
        files = ['alpha', 'beta', 'delta']
        for f in files:
            open(os.path.join(wc_path, 'trunk', f), 'w').write('This is %s.\n' % f)
        os.chdir('trunk')
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'add']+files)
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Initial Files.'])
        os.chdir('..')
        #r3
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'cp', 'trunk', 'tags/rev1'])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Tag rev 1.'])
        #r4
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'cp', 'trunk', 'branches/crazy'])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Branch to crazy.'])

        #r5
        open(os.path.join(wc_path, 'trunk', 'gamma'), 'w').write('This is %s.\n'
                                                                 % 'gamma')
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'add', 'trunk/gamma', ])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Add gamma'])

        #r6
        open(os.path.join(wc_path, 'branches', 'crazy', 'omega'),
             'w').write('This is %s.\n' % 'omega')
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'add', 'branches/crazy/omega', ])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Add omega'])

        #r7
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'cp', 'trunk', 'branches/more_crazy'])
        os.spawnvp(os.P_WAIT, 'svn', ['svn', 'ci', '-m', 'Branch to more_crazy.'])

        self.repo = svnwrap.SubversionRepo('file://%s' % (self.repo_path))