#1642 Fix rootdir option
This commit is contained in:
parent
a7c39c894b
commit
83034bbd48
|
@ -990,11 +990,15 @@ class Config(object):
|
||||||
|
|
||||||
def _initini(self, args):
|
def _initini(self, args):
|
||||||
ns, unknown_args = self._parser.parse_known_and_unknown_args(args, namespace=self.option.copy())
|
ns, unknown_args = self._parser.parse_known_and_unknown_args(args, namespace=self.option.copy())
|
||||||
r = determine_setup(ns.inifilename, ns.file_or_dir + unknown_args, warnfunc=self.warn)
|
rootdir = ns.rootdir if ns.rootdir else None
|
||||||
|
r = determine_setup(ns.inifilename, ns.file_or_dir + unknown_args, warnfunc=self.warn, rootdir_cmd_arg=rootdir)
|
||||||
self.rootdir, self.inifile, self.inicfg = r
|
self.rootdir, self.inifile, self.inicfg = r
|
||||||
self._parser.extra_info['rootdir'] = self.rootdir
|
self._parser.extra_info['rootdir'] = self.rootdir
|
||||||
self._parser.extra_info['inifile'] = self.inifile
|
self._parser.extra_info['inifile'] = self.inifile
|
||||||
self.invocation_dir = py.path.local()
|
self.invocation_dir = py.path.local()
|
||||||
|
if ns.rootdir:
|
||||||
|
self.invocation_dir = self.rootdir
|
||||||
|
sys.path.append(str(self.rootdir))
|
||||||
self._parser.addini('addopts', 'extra command line options', 'args')
|
self._parser.addini('addopts', 'extra command line options', 'args')
|
||||||
self._parser.addini('minversion', 'minimally required pytest version')
|
self._parser.addini('minversion', 'minimally required pytest version')
|
||||||
self._override_ini = ns.override_ini or ()
|
self._override_ini = ns.override_ini or ()
|
||||||
|
@ -1323,7 +1327,7 @@ def get_dirs_from_args(args):
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
def determine_setup(inifile, args, warnfunc=None):
|
def determine_setup(inifile, args, warnfunc=None, rootdir_cmd_arg=None):
|
||||||
dirs = get_dirs_from_args(args)
|
dirs = get_dirs_from_args(args)
|
||||||
if inifile:
|
if inifile:
|
||||||
iniconfig = py.iniconfig.IniConfig(inifile)
|
iniconfig = py.iniconfig.IniConfig(inifile)
|
||||||
|
@ -1346,6 +1350,11 @@ def determine_setup(inifile, args, warnfunc=None):
|
||||||
is_fs_root = os.path.splitdrive(str(rootdir))[1] == '/'
|
is_fs_root = os.path.splitdrive(str(rootdir))[1] == '/'
|
||||||
if is_fs_root:
|
if is_fs_root:
|
||||||
rootdir = ancestor
|
rootdir = ancestor
|
||||||
|
if rootdir_cmd_arg:
|
||||||
|
rootdir_abs_path = py.path.local(rootdir_cmd_arg)
|
||||||
|
if not os.path.isdir(str(rootdir_abs_path)):
|
||||||
|
raise UsageError("Directory '{}' not found. Check your '--rootdir' option.".format(rootdir_abs_path))
|
||||||
|
rootdir = rootdir_abs_path
|
||||||
return rootdir, inifile, inicfg or {}
|
return rootdir, inifile, inicfg or {}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -33,9 +33,6 @@ def pytest_addoption(parser):
|
||||||
parser.addini("testpaths", "directories to search for tests when no files or directories are given in the "
|
parser.addini("testpaths", "directories to search for tests when no files or directories are given in the "
|
||||||
"command line.",
|
"command line.",
|
||||||
type="args", default=[])
|
type="args", default=[])
|
||||||
parser.addini("rootdir", "define root directory for tests. If this parameter defined command argument "
|
|
||||||
"'--rootdir' will not work",
|
|
||||||
type="args", default=[])
|
|
||||||
# parser.addini("dirpatterns",
|
# parser.addini("dirpatterns",
|
||||||
# "patterns specifying possible locations of test files",
|
# "patterns specifying possible locations of test files",
|
||||||
# type="linelist", default=["**/test_*.txt",
|
# type="linelist", default=["**/test_*.txt",
|
||||||
|
@ -60,7 +57,7 @@ def pytest_addoption(parser):
|
||||||
dest="rootdir",
|
dest="rootdir",
|
||||||
help="Define root directory for tests. Can be relative path: 'root_dir', './root_dir', "
|
help="Define root directory for tests. Can be relative path: 'root_dir', './root_dir', "
|
||||||
"'root_dir/another_dir/'; absolute path: '/home/user/root_dir'; path with variables: "
|
"'root_dir/another_dir/'; absolute path: '/home/user/root_dir'; path with variables: "
|
||||||
"'$HOME/root_dir'. If parameter 'rootdir' defined in *.ini file this argument will not work")
|
"'$HOME/root_dir'.")
|
||||||
|
|
||||||
group = parser.getgroup("collect", "collection")
|
group = parser.getgroup("collect", "collection")
|
||||||
group.addoption('--collectonly', '--collect-only', action="store_true",
|
group.addoption('--collectonly', '--collect-only', action="store_true",
|
||||||
|
@ -292,16 +289,6 @@ class Session(nodes.FSCollector):
|
||||||
self._norecursepatterns = config.getini("norecursedirs")
|
self._norecursepatterns = config.getini("norecursedirs")
|
||||||
self.startdir = py.path.local()
|
self.startdir = py.path.local()
|
||||||
|
|
||||||
rootdir_ini = config.getini('rootdir')
|
|
||||||
self.rootdir = rootdir_ini[0] if rootdir_ini else config.option.rootdir
|
|
||||||
if self.rootdir:
|
|
||||||
rootdir_abs_path = py.path.local(self.rootdir)
|
|
||||||
if not os.path.isdir(str(rootdir_abs_path)):
|
|
||||||
raise UsageError("Directory '{}' not found. Check your '--rootdir' option.".format(rootdir_abs_path))
|
|
||||||
config.invocation_dir = rootdir_abs_path
|
|
||||||
config.rootdir = rootdir_abs_path
|
|
||||||
sys.path.append(str(rootdir_abs_path))
|
|
||||||
|
|
||||||
self.config.pluginmanager.register(self, name="session")
|
self.config.pluginmanager.register(self, name="session")
|
||||||
|
|
||||||
def _makeid(self):
|
def _makeid(self):
|
||||||
|
|
|
@ -266,21 +266,3 @@ def test_rootdir_option_arg(testdir):
|
||||||
|
|
||||||
result = testdir.runpytest("--rootdir=root")
|
result = testdir.runpytest("--rootdir=root")
|
||||||
result.stdout.fnmatch_lines(["*1 passed*"])
|
result.stdout.fnmatch_lines(["*1 passed*"])
|
||||||
|
|
||||||
|
|
||||||
def test_rootdir_option_ini_file(testdir):
|
|
||||||
rootdir = testdir.mkdir("root")
|
|
||||||
rootdir.join("spoon.py").write("spoon_number = 1")
|
|
||||||
testsdir = rootdir.mkdir("tests")
|
|
||||||
testsdir.join("test_one.py").write("from spoon import spoon_number\ndef test_one():\n assert spoon_number")
|
|
||||||
|
|
||||||
result = testdir.runpytest()
|
|
||||||
result.stdout.fnmatch_lines(["*No module named*spoon*"])
|
|
||||||
testdir.makeini("""
|
|
||||||
[pytest]
|
|
||||||
rootdir=root
|
|
||||||
""")
|
|
||||||
result = testdir.runpytest()
|
|
||||||
result.stdout.fnmatch_lines(["*1 passed*"])
|
|
||||||
result = testdir.runpytest("--rootdir=ignored_argument")
|
|
||||||
result.stdout.fnmatch_lines(["*1 passed*"])
|
|
||||||
|
|
Loading…
Reference in New Issue