changeset 886:d3ff5807f1bd

fold test_startrev and test_verify into a new test; test_verify_and_startrev
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
date Sat, 12 May 2012 11:12:57 +0200
parents 99a15c6a283c
children f95c429124f3
files tests/comprehensive/test_verify.py tests/comprehensive/test_verify_and_startrev.py tests/run.py tests/test_startrev.py tests/test_util.py
diffstat 4 files changed, 41 insertions(+), 79 deletions(-) [+]
line wrap: on
line diff
rename from tests/comprehensive/test_verify.py
rename to tests/comprehensive/test_verify_and_startrev.py
--- a/tests/comprehensive/test_verify.py
+++ b/tests/comprehensive/test_verify_and_startrev.py
@@ -16,14 +16,45 @@ from mercurial import ui
 
 from hgsubversion import svncommands
 
+# these fixtures contain no files at HEAD and would result in empty clones
+_skipshallow = set([
+    'binaryfiles.svndump',
+    'binaryfiles-broken.svndump',
+    'emptyrepo.svndump',
+])
+
 def _do_case(self, name, stupid, layout):
     subdir = test_util.subdir.get(name, '')
-    repo = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid, layout=layout)
+    repo, svnpath = self.load_and_fetch(name, subdir=subdir, stupid=stupid,
+                                        layout=layout)
     assert len(self.repo) > 0
     for i in repo:
         ctx = repo[i]
         self.assertEqual(svncommands.verify(repo.ui, repo, rev=ctx.node()), 0)
 
+    # check a startrev clone
+    if layout == 'single' and name not in _skipshallow:
+        self.wc_path += '_shallow'
+        shallowrepo = self.fetch(svnpath, subdir=subdir, stupid=stupid,
+                                 layout='single', startrev='HEAD')
+
+        self.assertEqual(len(shallowrepo), 1,
+                         "shallow clone should have just one revision, not %d"
+                         % len(shallowrepo))
+
+        fulltip = repo['tip']
+        shallowtip = shallowrepo['tip']
+
+        self.assertEqual(0, svncommands.verify(repo.ui, shallowrepo,
+                                               rev=shallowtip.node()))
+
+        # viewing diff's of lists of files is easier on the eyes
+        self.assertMultiLineEqual('\n'.join(fulltip), '\n'.join(shallowtip))
+
+        for f in fulltip:
+            self.assertMultiLineEqual(fulltip[f].data(), shallowtip[f].data())
+
+
 def buildmethod(case, name, stupid, layout):
     m = lambda self: self._do_case(case, stupid, layout)
     m.__name__ = name
--- a/tests/run.py
+++ b/tests/run.py
@@ -25,7 +25,6 @@ def tests():
     import test_push_eol
     import test_rebuildmeta
     import test_single_dir_clone
-    import test_startrev
     import test_svnwrap
     import test_tags
     import test_template_keywords
@@ -37,7 +36,7 @@ def tests():
     sys.path.append(os.path.join(os.path.dirname(__file__), 'comprehensive'))
 
     import test_stupid_pull
-    import test_verify
+    import test_verify_and_startrev
 
     return locals()
 
deleted file mode 100644
--- a/tests/test_startrev.py
+++ /dev/null
@@ -1,71 +0,0 @@
-import test_util
-
-import os
-import unittest
-
-def _do_case(self, name, subdir, stupid):
-    wc_base = self.wc_path
-    self.wc_path = wc_base + '_full'
-    headclone = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid,
-                                             layout='single', startrev='HEAD')
-    self.wc_path = wc_base + '_head'
-    fullclone = self._load_fixture_and_fetch(name, subdir=subdir, stupid=stupid,
-                                             layout='single')
-
-    fulltip = fullclone['tip']
-    headtip = headclone['tip']
-    # viewing diff's of lists of files is easier on the eyes
-    self.assertMultiLineEqual('\n'.join(fulltip), '\n'.join(headtip))
-
-    for f in fulltip:
-        self.assertMultiLineEqual(fulltip[f].data(), headtip[f].data())
-
-    self.assertNotEqual(len(fullclone), 0, "full clone shouldn't be empty")
-    self.assertEqual(len(headclone), 1,
-                     "shallow clone should have just one revision, not %d"
-                     % len(headclone))
-
-def buildmethod(case, name, subdir, stupid):
-    m = lambda self: self._do_case(case, subdir.strip('/'), stupid)
-    m.__name__ = name
-    m.__doc__ = ('Test clone with startrev on %s%s with %s replay.' %
-                 (case, subdir, (stupid and 'stupid') or 'real'))
-    return m
-
-
-# these fixtures contain no files at HEAD and would result in empty clones
-nofiles = set([
-    'binaryfiles.svndump',
-    'binaryfiles-broken.svndump',
-    'emptyrepo.svndump',
-])
-
-# these fixtures contain no files in trunk at HEAD and would result in an empty
-# shallow clone if cloning trunk, so we use another subdirectory
-subdirmap = {
-    'commit-to-tag.svndump': '/branches/magic',
-    'pushexternals.svndump': '',
-    'tag_name_same_as_branch.svndump': '/branches/magic',
-}
-
-attrs = {'_do_case': _do_case,
-         }
-
-for case in [f for f in os.listdir(test_util.FIXTURES) if f.endswith('.svndump')]:
-    if case in nofiles:
-        continue
-
-    subdir = test_util.subdir.get(case, '') + subdirmap.get(case, '/trunk')
-
-    bname = 'test_' + case[:-len('.svndump')]
-    attrs[bname] = buildmethod(case, bname, subdir, False)
-    name = bname + '_stupid'
-    attrs[name] = buildmethod(case, name, subdir, True)
-
-StartRevTests = type('StartRevTests', (test_util.TestBase,), attrs)
-
-
-def suite():
-    all_tests = [unittest.TestLoader().loadTestsFromTestCase(StartRevTests),
-          ]
-    return unittest.TestSuite(all_tests)
--- a/tests/test_util.py
+++ b/tests/test_util.py
@@ -297,15 +297,13 @@ class TestBase(unittest.TestCase):
         proc.communicate()
         return path
 
-    def load_and_fetch(self, fixture_name, subdir=None, stupid=False,
-                       layout='auto', startrev=0, externals=None,
-                       noupdate=True):
+    def fetch(self, repo_path, subdir=None, stupid=False, layout='auto', startrev=0,
+              externals=None, noupdate=True, dest=None):
         if layout == 'single':
             if subdir is None:
                 subdir = 'trunk'
         elif subdir is None:
             subdir = ''
-        repo_path = self.load_svndump(fixture_name)
         projectpath = repo_path
         if subdir:
             projectpath += '/' + subdir
@@ -326,7 +324,12 @@ class TestBase(unittest.TestCase):
 
         dispatch(cmd)
 
-        return hg.repository(testui(), self.wc_path), repo_path
+        return hg.repository(testui(), self.wc_path)
+
+    def load_and_fetch(self, fixture_name, *args, **opts):
+        repo_path = self.load_svndump(fixture_name)
+
+        return self.fetch(repo_path, *args, **opts), repo_path
 
     def _load_fixture_and_fetch(self, *args, **kwargs):
         repo, repo_path = self.load_and_fetch(*args, **kwargs)