diff options
Diffstat (limited to '')
-rw-r--r-- | python/mozversioncontrol/test/conftest.py | 74 |
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) |