diff tests/comprehensive/test_custom_layout.py @ 1092:cd0d14e25757

layouts: add custom layout for those of us that need weird mappings This adds a config-driven custom layout, targeted at the case where you need to fetch a small subset of a large number of subversion branches, or where your subversion layout doesn't match the standard trunk/branches/tags layout very well.
author David Schleimer <dschleimer@fb.com>
date Mon, 26 Aug 2013 16:40:31 -0700
parents
children ff4e102932ed
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/tests/comprehensive/test_custom_layout.py
@@ -0,0 +1,65 @@
+import os
+import pickle
+import sys
+import unittest
+
+from mercurial import hg
+from mercurial import ui
+
+# wrapped in a try/except because of weirdness in how
+# run.py works as compared to nose.
+try:
+    import test_util
+except ImportError:
+    sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
+    import test_util
+
+from hgsubversion import wrappers
+
+
+def _do_case(self, name, stupid):
+    subdir = test_util.subdir.get(name, '')
+    config = {
+        'hgsubversion.stupid': stupid and '1' or '0',
+        }
+    repo, repo_path = self.load_and_fetch(name,
+                                          subdir=subdir,
+                                          layout='auto',
+                                          config=config)
+    assert test_util.repolen(self.repo) > 0, \
+        'Repo had no changes, maybe you need to add a subdir entry in test_util?'
+    wc2_path = self.wc_path + '_custom'
+    checkout_path = repo_path
+    if subdir:
+        checkout_path += '/' + subdir
+    u = ui.ui()
+    if stupid:
+        u.setconfig('hgsubversion', 'stupid', '1')
+    u.setconfig('hgsubversion', 'layout', 'custom')
+    for branch, path in test_util.custom.get(name, {}).iteritems():
+        u.setconfig('hgsubversionbranch', branch, path)
+    test_util.hgclone(u,
+                      test_util.fileurl(checkout_path),
+                      wc2_path,
+                      update=False)
+    self.repo2 = hg.repository(ui.ui(), wc2_path)
+    self.assertEqual(self.repo.heads(), self.repo2.heads())
+
+
+def buildmethod(case, name, stupid):
+    m = lambda self: self._do_case(case, stupid)
+    m.__name__ = name
+    replay = stupid and 'stupid' or 'regular'
+    m.__doc__ = 'Test custom produces same as standard on %s. (%s)' % (case,
+                                                                       replay)
+    return m
+
+attrs = {'_do_case': _do_case,
+         }
+for case in test_util.custom:
+    name = 'test_' + case[:-len('.svndump')].replace('-', '_')
+    attrs[name] = buildmethod(case, name, stupid=False)
+    name += '_stupid'
+    attrs[name] = buildmethod(case, name, stupid=True)
+
+CustomPullTests = type('CustomPullTests', (test_util.TestBase,), attrs)