summaryrefslogtreecommitdiffstats
path: root/python/mozversioncontrol/test/conftest.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--python/mozversioncontrol/test/conftest.py74
1 files changed, 74 insertions, 0 deletions
diff --git a/python/mozversioncontrol/test/conftest.py b/python/mozversioncontrol/test/conftest.py
new file mode 100644
index 0000000000..5c9317dafc
--- /dev/null
+++ b/python/mozversioncontrol/test/conftest.py
@@ -0,0 +1,74 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+from __future__ import absolute_import
+
+import os
+import subprocess
+
+import pytest
+
+
+SETUP = {
+ "hg": [
+ """
+ echo "foo" > foo
+ echo "bar" > bar
+ hg init
+ hg add *
+ hg commit -m "Initial commit"
+ """,
+ """
+ echo "[paths]\ndefault = ../remoterepo" > .hg/hgrc
+ """,
+ ],
+ "git": [
+ """
+ echo "foo" > foo
+ echo "bar" > bar
+ git init
+ git add *
+ git commit -am "Initial commit"
+ """,
+ """
+ git remote add upstream ../remoterepo
+ git fetch upstream
+ git branch -u upstream/master
+ """,
+ ],
+}
+
+
+def shell(cmd):
+ subprocess.check_call(cmd, shell=True)
+
+
+@pytest.yield_fixture(params=["git", "hg"])
+def repo(tmpdir, request):
+ vcs = request.param
+ steps = SETUP[vcs]
+
+ if hasattr(request.module, "STEPS"):
+ steps.extend(request.module.STEPS[vcs])
+
+ # tmpdir and repo are py.path objects
+ # http://py.readthedocs.io/en/latest/path.html
+ repo = tmpdir.mkdir("repo")
+ repo.vcs = vcs
+
+ # This creates a step iterator. Each time next() is called
+ # on it, the next set of instructions will be executed.
+ repo.step = (shell(cmd) for cmd in steps)
+
+ oldcwd = os.getcwd()
+ os.chdir(repo.strpath)
+
+ next(repo.step)
+
+ repo.copy(tmpdir.join("remoterepo"))
+
+ next(repo.step)
+
+ yield repo
+ os.chdir(oldcwd)