changeset 1047:3092b3c109a8

tests: split single directory tests that push & clone in two modules
author Dan Villiom Podlaski Christiansen <danchr@gmail.com>
date Thu, 08 Aug 2013 09:22:10 +0200
parents 36fe4b316a6b
children 903c9c9dfe6a
files tests/run.py tests/test_single_dir_clone.py tests/test_single_dir_push.py
diffstat 3 files changed, 202 insertions(+), 189 deletions(-) [+]
line wrap: on
line diff
--- a/tests/run.py
+++ b/tests/run.py
@@ -28,6 +28,7 @@ def tests():
     import test_push_eol
     import test_push_autoprops
     import test_single_dir_clone
+    import test_single_dir_push
     import test_svnwrap
     import test_tags
     import test_template_keywords
--- a/tests/test_single_dir_clone.py
+++ b/tests/test_single_dir_clone.py
@@ -10,7 +10,7 @@ from mercurial import hg
 from mercurial import node
 from mercurial import ui
 
-class TestSingleDir(test_util.TestBase):
+class TestSingleDirClone(test_util.TestBase):
     def test_clone_single_dir_simple(self):
         repo = self._load_fixture_and_fetch('branch_from_tag.svndump',
                                             stupid=False,
@@ -86,191 +86,3 @@ class TestSingleDir(test_util.TestBase):
         expect = '' # Not honestly sure what this should be...
         test = 4
         self.assertEqual(self.repo[test]['.hgsvnexternals'].data(), expect)
-
-    def test_push_single_dir(self):
-        # Tests simple pushing from default branch to a single dir repo
-        repo, repo_path = self.load_and_fetch('branch_from_tag.svndump',
-                                              stupid=False,
-                                              layout='single',
-                                              subdir='')
-        def file_callback(repo, memctx, path):
-            if path == 'adding_file':
-                return context.memfilectx(path=path,
-                                          data='foo',
-                                          islink=False,
-                                          isexec=False,
-                                          copied=False)
-            elif path == 'adding_binary':
-                return context.memfilectx(path=path,
-                                          data='\0binary',
-                                          islink=False,
-                                          isexec=False,
-                                          copied=False)
-            raise IOError(errno.EINVAL, 'Invalid operation: ' + path)
-        ctx = context.memctx(repo,
-                             (repo['tip'].node(), node.nullid),
-                             'automated test',
-                             ['adding_file', 'adding_binary'],
-                             file_callback,
-                             'an_author',
-                             '2009-10-19 18:49:30 -0500',
-                             {'branch': 'default', })
-        repo.commitctx(ctx)
-        hg.update(repo, repo['tip'].node())
-        self.pushrevisions()
-        self.assertTrue('adding_file' in test_util.svnls(repo_path, ''))
-        self.assertEqual('application/octet-stream',
-                         test_util.svnpropget(repo_path, 'adding_binary',
-                                              'svn:mime-type'))
-        # Now add another commit and test mime-type being reset
-        changes = [('adding_binary', 'adding_binary', 'no longer binary')]
-        self.commitchanges(changes)
-        self.pushrevisions()
-        self.assertEqual('', test_util.svnpropget(repo_path, 'adding_binary',
-                                                  'svn:mime-type'))
-
-    def test_push_single_dir_at_subdir(self):
-        repo = self._load_fixture_and_fetch('branch_from_tag.svndump',
-                                            stupid=False,
-                                            layout='single',
-                                            subdir='trunk')
-        def filectxfn(repo, memctx, path):
-            return context.memfilectx(path=path,
-                                      data='contents of %s' % path,
-                                      islink=False,
-                                      isexec=False,
-                                      copied=False)
-        ctx = context.memctx(repo,
-                             (repo['tip'].node(), node.nullid),
-                             'automated test',
-                             ['bogus'],
-                             filectxfn,
-                             'an_author',
-                             '2009-10-19 18:49:30 -0500',
-                             {'branch': 'localhacking', })
-        n = repo.commitctx(ctx)
-        self.assertEqual(self.repo['tip']['bogus'].data(),
-                         'contents of bogus')
-        before = repo['tip'].hex()
-        hg.update(repo, self.repo['tip'].hex())
-        self.pushrevisions()
-        self.assertNotEqual(before, self.repo['tip'].hex())
-        self.assertEqual(self.repo['tip']['bogus'].data(),
-                         'contents of bogus')
-
-    def test_push_single_dir_one_incoming_and_two_outgoing(self):
-        # Tests simple pushing from default branch to a single dir repo
-        # Pushes two outgoing over one incoming svn rev
-        # (used to cause an "unknown revision")
-        # This can happen if someone committed to svn since our last pull (race).
-        repo, repo_path = self.load_and_fetch('branch_from_tag.svndump',
-                                              stupid=False,
-                                              layout='single',
-                                              subdir='trunk')
-        self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed'})
-        def file_callback(repo, memctx, path):
-            return context.memfilectx(path=path,
-                                      data='data of %s' % path,
-                                      islink=False,
-                                      isexec=False,
-                                      copied=False)
-        for fn in ['one', 'two']:
-            ctx = context.memctx(repo,
-                                 (repo['tip'].node(), node.nullid),
-                                 'automated test',
-                                 [fn],
-                                 file_callback,
-                                 'an_author',
-                                 '2009-10-19 18:49:30 -0500',
-                                 {'branch': 'default', })
-            repo.commitctx(ctx)
-        hg.update(repo, repo['tip'].node())
-        self.pushrevisions(expected_extra_back=1)
-        self.assertTrue('trunk/one' in test_util.svnls(repo_path, ''))
-        self.assertTrue('trunk/two' in test_util.svnls(repo_path, ''))
-
-    def test_push_single_dir_branch(self):
-        # Tests local branches pushing to a single dir repo. Creates a fork at
-        # tip. The default branch adds a file called default, while branch foo
-        # adds a file called foo, then tries to push the foo branch and default
-        # branch in that order.
-        repo, repo_path = self.load_and_fetch('branch_from_tag.svndump',
-                                              stupid=False,
-                                              layout='single',
-                                              subdir='')
-        def file_callback(data):
-            def cb(repo, memctx, path):
-                if path == data:
-                    return context.memfilectx(path=path,
-                                              data=data,
-                                              islink=False,
-                                              isexec=False,
-                                              copied=False)
-                raise IOError(errno.EINVAL, 'Invalid operation: ' + path)
-            return cb
-
-        def commit_to_branch(name, parent):
-            repo.commitctx(context.memctx(repo,
-                                          (parent, node.nullid),
-                                          'automated test (%s)' % name,
-                                          [name],
-                                          file_callback(name),
-                                          'an_author',
-                                          '2009-10-19 18:49:30 -0500',
-                                          {'branch': name, }))
-
-        parent = repo['tip'].node()
-        commit_to_branch('default', parent)
-        commit_to_branch('foo', parent)
-        hg.update(repo, repo['foo'].node())
-        self.pushrevisions()
-        repo = self.repo # repo is outdated after the rebase happens, refresh
-        self.assertTrue('foo' in test_util.svnls(repo_path, ''))
-        self.assertEqual(repo.branchtags().keys(), ['default'])
-        # Have to cross to another branch head, so hg.update doesn't work
-        commands.update(ui.ui(),
-                        self.repo,
-                        self.repo.branchheads('default')[1],
-                        clean=True)
-        self.pushrevisions()
-        self.assertTrue('default' in test_util.svnls(repo_path, ''))
-        self.assertEquals(len(self.repo.branchheads('default')), 1)
-
-    @test_util.requiresoption('branch')
-    def test_push_single_dir_renamed_branch(self, stupid=False):
-        # Tests pulling and pushing with a renamed branch
-        # Based on test_push_single_dir
-        repo_path = self.load_svndump('branch_from_tag.svndump')
-        cmd = ['clone', '--layout=single', '--branch=flaf']
-        if stupid:
-            cmd.append('--stupid')
-        cmd += [test_util.fileurl(repo_path), self.wc_path]
-        test_util.dispatch(cmd)
-
-        def file_callback(repo, memctx, path):
-            if path == 'adding_file':
-                return context.memfilectx(path=path,
-                                          data='foo',
-                                          islink=False,
-                                          isexec=False,
-                                          copied=False)
-            raise IOError(errno.EINVAL, 'Invalid operation: ' + path)
-        ctx = context.memctx(self.repo,
-                             (self.repo['tip'].node(), node.nullid),
-                             'automated test',
-                             ['adding_file'],
-                             file_callback,
-                             'an_author',
-                             '2009-10-19 18:49:30 -0500',
-                             {'branch': 'default', })
-        self.repo.commitctx(ctx)
-        hg.update(self.repo, self.repo['tip'].node())
-        self.pushrevisions()
-        self.assertTrue('adding_file' in test_util.svnls(repo_path, ''))
-
-        self.assertEquals(set(['flaf']),
-                          set(self.repo[i].branch() for i in self.repo))
-
-    @test_util.requiresoption('branch')
-    def test_push_single_dir_renamed_branch_stupid(self):
-        self.test_push_single_dir_renamed_branch(True)
new file mode 100644
--- /dev/null
+++ b/tests/test_single_dir_push.py
@@ -0,0 +1,200 @@
+import test_util
+
+import errno
+import shutil
+import unittest
+
+from mercurial import commands
+from mercurial import context
+from mercurial import hg
+from mercurial import node
+from mercurial import ui
+
+class TestSingleDirPush(test_util.TestBase):
+    def test_push_single_dir(self):
+        # Tests simple pushing from default branch to a single dir repo
+        repo, repo_path = self.load_and_fetch('branch_from_tag.svndump',
+                                              stupid=False,
+                                              layout='single',
+                                              subdir='')
+        def file_callback(repo, memctx, path):
+            if path == 'adding_file':
+                return context.memfilectx(path=path,
+                                          data='foo',
+                                          islink=False,
+                                          isexec=False,
+                                          copied=False)
+            elif path == 'adding_binary':
+                return context.memfilectx(path=path,
+                                          data='\0binary',
+                                          islink=False,
+                                          isexec=False,
+                                          copied=False)
+            raise IOError(errno.EINVAL, 'Invalid operation: ' + path)
+        ctx = context.memctx(repo,
+                             (repo['tip'].node(), node.nullid),
+                             'automated test',
+                             ['adding_file', 'adding_binary'],
+                             file_callback,
+                             'an_author',
+                             '2009-10-19 18:49:30 -0500',
+                             {'branch': 'default', })
+        repo.commitctx(ctx)
+        hg.update(repo, repo['tip'].node())
+        self.pushrevisions()
+        self.assertTrue('adding_file' in test_util.svnls(repo_path, ''))
+        self.assertEqual('application/octet-stream',
+                         test_util.svnpropget(repo_path, 'adding_binary',
+                                              'svn:mime-type'))
+        # Now add another commit and test mime-type being reset
+        changes = [('adding_binary', 'adding_binary', 'no longer binary')]
+        self.commitchanges(changes)
+        self.pushrevisions()
+        self.assertEqual('', test_util.svnpropget(repo_path, 'adding_binary',
+                                                  'svn:mime-type'))
+
+    def test_push_single_dir_at_subdir(self):
+        repo = self._load_fixture_and_fetch('branch_from_tag.svndump',
+                                            stupid=False,
+                                            layout='single',
+                                            subdir='trunk')
+        def filectxfn(repo, memctx, path):
+            return context.memfilectx(path=path,
+                                      data='contents of %s' % path,
+                                      islink=False,
+                                      isexec=False,
+                                      copied=False)
+        ctx = context.memctx(repo,
+                             (repo['tip'].node(), node.nullid),
+                             'automated test',
+                             ['bogus'],
+                             filectxfn,
+                             'an_author',
+                             '2009-10-19 18:49:30 -0500',
+                             {'branch': 'localhacking', })
+        n = repo.commitctx(ctx)
+        self.assertEqual(self.repo['tip']['bogus'].data(),
+                         'contents of bogus')
+        before = repo['tip'].hex()
+        hg.update(repo, self.repo['tip'].hex())
+        self.pushrevisions()
+        self.assertNotEqual(before, self.repo['tip'].hex())
+        self.assertEqual(self.repo['tip']['bogus'].data(),
+                         'contents of bogus')
+
+    def test_push_single_dir_one_incoming_and_two_outgoing(self):
+        # Tests simple pushing from default branch to a single dir repo
+        # Pushes two outgoing over one incoming svn rev
+        # (used to cause an "unknown revision")
+        # This can happen if someone committed to svn since our last pull (race).
+        repo, repo_path = self.load_and_fetch('branch_from_tag.svndump',
+                                              stupid=False,
+                                              layout='single',
+                                              subdir='trunk')
+        self.add_svn_rev(repo_path, {'trunk/alpha': 'Changed'})
+        def file_callback(repo, memctx, path):
+            return context.memfilectx(path=path,
+                                      data='data of %s' % path,
+                                      islink=False,
+                                      isexec=False,
+                                      copied=False)
+        for fn in ['one', 'two']:
+            ctx = context.memctx(repo,
+                                 (repo['tip'].node(), node.nullid),
+                                 'automated test',
+                                 [fn],
+                                 file_callback,
+                                 'an_author',
+                                 '2009-10-19 18:49:30 -0500',
+                                 {'branch': 'default', })
+            repo.commitctx(ctx)
+        hg.update(repo, repo['tip'].node())
+        self.pushrevisions(expected_extra_back=1)
+        self.assertTrue('trunk/one' in test_util.svnls(repo_path, ''))
+        self.assertTrue('trunk/two' in test_util.svnls(repo_path, ''))
+
+    def test_push_single_dir_branch(self):
+        # Tests local branches pushing to a single dir repo. Creates a fork at
+        # tip. The default branch adds a file called default, while branch foo
+        # adds a file called foo, then tries to push the foo branch and default
+        # branch in that order.
+        repo, repo_path = self.load_and_fetch('branch_from_tag.svndump',
+                                              stupid=False,
+                                              layout='single',
+                                              subdir='')
+        def file_callback(data):
+            def cb(repo, memctx, path):
+                if path == data:
+                    return context.memfilectx(path=path,
+                                              data=data,
+                                              islink=False,
+                                              isexec=False,
+                                              copied=False)
+                raise IOError(errno.EINVAL, 'Invalid operation: ' + path)
+            return cb
+
+        def commit_to_branch(name, parent):
+            repo.commitctx(context.memctx(repo,
+                                          (parent, node.nullid),
+                                          'automated test (%s)' % name,
+                                          [name],
+                                          file_callback(name),
+                                          'an_author',
+                                          '2009-10-19 18:49:30 -0500',
+                                          {'branch': name, }))
+
+        parent = repo['tip'].node()
+        commit_to_branch('default', parent)
+        commit_to_branch('foo', parent)
+        hg.update(repo, repo['foo'].node())
+        self.pushrevisions()
+        repo = self.repo # repo is outdated after the rebase happens, refresh
+        self.assertTrue('foo' in test_util.svnls(repo_path, ''))
+        self.assertEqual(repo.branchtags().keys(), ['default'])
+        # Have to cross to another branch head, so hg.update doesn't work
+        commands.update(ui.ui(),
+                        self.repo,
+                        self.repo.branchheads('default')[1],
+                        clean=True)
+        self.pushrevisions()
+        self.assertTrue('default' in test_util.svnls(repo_path, ''))
+        self.assertEquals(len(self.repo.branchheads('default')), 1)
+
+    @test_util.requiresoption('branch')
+    def test_push_single_dir_renamed_branch(self, stupid=False):
+        # Tests pulling and pushing with a renamed branch
+        # Based on test_push_single_dir
+        repo_path = self.load_svndump('branch_from_tag.svndump')
+        cmd = ['clone', '--layout=single', '--branch=flaf']
+        if stupid:
+            cmd.append('--stupid')
+        cmd += [test_util.fileurl(repo_path), self.wc_path]
+        test_util.dispatch(cmd)
+
+        def file_callback(repo, memctx, path):
+            if path == 'adding_file':
+                return context.memfilectx(path=path,
+                                          data='foo',
+                                          islink=False,
+                                          isexec=False,
+                                          copied=False)
+            raise IOError(errno.EINVAL, 'Invalid operation: ' + path)
+        ctx = context.memctx(self.repo,
+                             (self.repo['tip'].node(), node.nullid),
+                             'automated test',
+                             ['adding_file'],
+                             file_callback,
+                             'an_author',
+                             '2009-10-19 18:49:30 -0500',
+                             {'branch': 'default', })
+        self.repo.commitctx(ctx)
+        hg.update(self.repo, self.repo['tip'].node())
+        self.pushrevisions()
+        self.assertTrue('adding_file' in test_util.svnls(repo_path, ''))
+
+        self.assertEquals(set(['flaf']),
+                          set(self.repo[i].branch() for i in self.repo))
+
+    @test_util.requiresoption('branch')
+    def test_push_single_dir_renamed_branch_stupid(self):
+        self.test_push_single_dir_renamed_branch(True)