[py-svn] r37898 - in py/trunk/py/test: . testing
hpk at codespeak.net
hpk at codespeak.net
Sun Feb 4 13:29:28 CET 2007
Author: hpk
Date: Sun Feb 4 13:29:26 2007
New Revision: 37898
Modified:
py/trunk/py/test/config.py
py/trunk/py/test/conftesthandle.py
py/trunk/py/test/testing/test_config.py
py/trunk/py/test/testing/test_conftesthandle.py
Log:
provide a high-level helper for getting
at a pathlist specified in a conftest (and
the paths can be relative to the conftest.py file they
are contained in)
Modified: py/trunk/py/test/config.py
==============================================================================
--- py/trunk/py/test/config.py (original)
+++ py/trunk/py/test/config.py Sun Feb 4 13:29:26 2007
@@ -84,6 +84,19 @@
col = self.conftest.rget("Directory", pkgpath)(pkgpath)
col._config = self
return col
+
+ def getvalue_pathlist(self, name, path=None):
+ """ return a matching value, which needs to be sequence
+ of filenames that will be returned as a list of Path
+ objects (they can be relative to the location
+ where they were found).
+ """
+ try:
+ mod, relroots = self.conftest.rget_with_confmod(name, path)
+ except KeyError:
+ return None
+ modpath = py.path.local(mod.__file__).dirpath()
+ return [modpath.join(x, abs=True) for x in relroots]
def addoptions(self, groupname, *specs):
""" add a named group of options to the current testing session.
@@ -163,6 +176,7 @@
def _reparse(self, args):
""" this is used from tests that want to re-invoke parse(). """
+ #assert args # XXX should not be empty
global config_per_process
oldconfig = py.test.config
try:
Modified: py/trunk/py/test/conftesthandle.py
==============================================================================
--- py/trunk/py/test/conftesthandle.py (original)
+++ py/trunk/py/test/conftesthandle.py Sun Feb 4 13:29:26 2007
@@ -41,63 +41,39 @@
except KeyError:
dp = path.dirpath()
if dp == path:
- return [self.importconfig(defaultconftestpath)]
+ return [importconfig(defaultconftestpath)]
clist = self.getconftestmodules(dp)
conftestpath = path.join("conftest.py")
if conftestpath.check(file=1):
- clist.append(self.importconfig(conftestpath))
+ clist.append(importconfig(conftestpath))
self._path2confmods[path] = clist
# be defensive: avoid changes from caller side to
# affect us by always returning a copy of the actual list
return clist[:]
- def getconftest(self, path):
- """ Return a direct module of that path
- """
- if isinstance(path, str):
- path = py.path.local(path)
- try:
- conftestmod = self.getconftestmodules(path)[-1]
- if py.path.local(conftestmod.__file__).dirpath() != path:
- raise AttributeError
- return conftestmod
- except KeyError:
- raise AttributeError
- # we raise here AttributeError to unify error reporting in case
- # of lack of variable in conftest or lack of file, but we do not want to
- # hide ImportError
-
- # XXX no real use case, may probably go
- #def lget(self, name, path=None):
- # modules = self.getconftestmodules(path)
- # return self._get(name, modules)
-
def rget(self, name, path=None):
+ mod, value = self.rget_with_confmod(name, path)
+ return value
+
+ def rget_with_confmod(self, name, path=None):
modules = self.getconftestmodules(path)
modules.reverse()
- return self._get(name, modules)
-
- def rget_path(self, name, path):
- """ can raise AttributeError
- """
- return getattr(self.getconftest(path), name)
-
- def _get(self, name, modules):
for mod in modules:
try:
- return getattr(mod, name)
+ return mod, getattr(mod, name)
except AttributeError:
continue
raise KeyError, name
- def importconfig(self, configpath):
- # We could have used caching here, but it's redundant since
- # they're cached on path anyway, so we use it only when doing rget_path
- if not configpath.dirpath('__init__.py').check(file=1):
- # HACK: we don't want any "globally" imported conftest.py,
- # prone to conflicts and subtle problems
- modname = str(configpath).replace('.', configpath.sep)
- mod = configpath.pyimport(modname=modname)
- else:
- mod = configpath.pyimport()
- return mod
+def importconfig(configpath):
+ # We could have used caching here, but it's redundant since
+ # they're cached on path anyway, so we use it only when doing rget_path
+ assert configpath.check(), configpath
+ if not configpath.dirpath('__init__.py').check(file=1):
+ # HACK: we don't want any "globally" imported conftest.py,
+ # prone to conflicts and subtle problems
+ modname = str(configpath).replace('.', configpath.sep)
+ mod = configpath.pyimport(modname=modname)
+ else:
+ mod = configpath.pyimport()
+ return mod
Modified: py/trunk/py/test/testing/test_config.py
==============================================================================
--- py/trunk/py/test/testing/test_config.py (original)
+++ py/trunk/py/test/testing/test_config.py Sun Feb 4 13:29:26 2007
@@ -256,7 +256,19 @@
assert not config.is_boxed()
config = py.test.config._reparse([tmpdir, '--box'])
assert config.is_boxed()
-
+
+ def test_getvalue_pathlist(self):
+ tmpdir = self.tmpdir
+ somepath = tmpdir.join("x", "y", "z")
+ p = tmpdir.join("conftest.py")
+ p.write("pathlist = ['.', %r]" % str(somepath))
+ config = py.test.config._reparse([p])
+ assert config.getvalue_pathlist('notexist') is None
+ pl = config.getvalue_pathlist('pathlist')
+ print pl
+ assert len(pl) == 2
+ assert pl[0] == tmpdir
+ assert pl[1] == somepath
class TestConfigColitems:
def setup_class(cls):
Modified: py/trunk/py/test/testing/test_conftesthandle.py
==============================================================================
--- py/trunk/py/test/testing/test_conftesthandle.py (original)
+++ py/trunk/py/test/testing/test_conftesthandle.py Sun Feb 4 13:29:26 2007
@@ -65,14 +65,14 @@
#conftest.lget("a") == 1
#conftest.lget("b") == 1
- def test_value_access_path(self):
+ def test_value_access_with_confmod(self):
topdir = self.basedir.join("adir", "b")
topdir.ensure("xx", dir=True)
conftest = Conftest(topdir)
- assert conftest.rget_path("a", topdir) == 1.5
- assert conftest.rget_path("a", topdir.dirpath()) == 1
- py.test.raises(AttributeError, "conftest.rget_path('a', topdir.join('xx'))")
- #assert py.path.local(mod.__file__).dirpath() == topdir
+ mod, value = conftest.rget_with_confmod("a", topdir)
+ assert value == 1.5
+ path = py.path.local(mod.__file__)
+ assert path == self.basedir.join("adir", "b", "conftest.py")
class TestConftestValueAccessInPackage(TestConftestValueAccessGlobal):
def setup_class(cls):
More information about the pytest-commit
mailing list