diff --git a/CHANGELOG b/CHANGELOG index f75588a81..937e491bc 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -32,6 +32,8 @@ Changes between 2.0.1 and 2.0.2 - fixed typos in the docs (thanks Victor Garcia, Brianna Laugher) and particular thanks to Laura Creighton who also revieved parts of the documentation. +- more precise (avoiding of) deprecation warnings for node.Class|Function accesses + Changes between 2.0.0 and 2.0.1 ---------------------------------------------- diff --git a/_pytest/main.py b/_pytest/main.py index d1ccc4307..a257ea56f 100644 --- a/_pytest/main.py +++ b/_pytest/main.py @@ -121,9 +121,6 @@ class HookProxy: def compatproperty(name): def fget(self): - #print "retrieving %r property from %s" %(name, self.fspath) - py.log._apiwarn("2.0", "use pytest.%s for " - "test collection and item classes" % name) return getattr(pytest, name) return property(fget, None, None, "deprecated attribute %r, use pytest.%s" % (name,name)) @@ -157,6 +154,14 @@ class Node(object): File = compatproperty("File") Item = compatproperty("Item") + def _getcustomclass(self, name): + cls = getattr(self, name) + if cls != getattr(pytest, name): + py.log._apiwarn("2.0", "use of node.%s is deprecated, " + "use pytest_pycollect_makeitem(...) to create custom " + "collection nodes" % name) + return cls + def __repr__(self): return "<%s %r>" %(self.__class__.__name__, getattr(self, 'name', None)) diff --git a/_pytest/python.py b/_pytest/python.py index 7a8c41723..61a3f63c9 100644 --- a/_pytest/python.py +++ b/_pytest/python.py @@ -73,7 +73,8 @@ def pytest_pycollect_makeitem(__multicall__, collector, name, obj): if collector._istestclasscandidate(name, obj): #if hasattr(collector.obj, 'unittest'): # return # we assume it's a mixin class for a TestCase derived one - return collector.Class(name, parent=collector) + Class = collector._getcustomclass("Class") + return Class(name, parent=collector) elif collector.funcnamefilter(name) and hasattr(obj, '__call__'): if is_generator(obj): return Generator(name, parent=collector) @@ -213,16 +214,18 @@ class PyCollectorMixin(PyobjMixin, pytest.Collector): extra.append(cls()) plugins = self.getplugins() + extra gentesthook.pcall(plugins, metafunc=metafunc) + Function = self._getcustomclass("Function") if not metafunc._calls: - return self.Function(name, parent=self) + return Function(name, parent=self) l = [] for callspec in metafunc._calls: subname = "%s[%s]" %(name, callspec.id) - function = self.Function(name=subname, parent=self, + function = Function(name=subname, parent=self, callspec=callspec, callobj=funcobj, keywords={callspec.id:True}) l.append(function) return l + class Module(pytest.File, PyCollectorMixin): def _getobj(self): return self._memoizedcall('_obj', self._importtestmodule) @@ -272,7 +275,7 @@ class Module(pytest.File, PyCollectorMixin): class Class(PyCollectorMixin, pytest.Collector): def collect(self): - return [self.Instance(name="()", parent=self)] + return [self._getcustomclass("Instance")(name="()", parent=self)] def setup(self): setup_class = getattr(self.obj, 'setup_class', None) diff --git a/testing/test_collection.py b/testing/test_collection.py index a5e79e867..3ee040dd3 100644 --- a/testing/test_collection.py +++ b/testing/test_collection.py @@ -15,15 +15,10 @@ class TestCollector: """) recwarn.clear() assert modcol.Module == pytest.Module - recwarn.pop(DeprecationWarning) assert modcol.Class == pytest.Class - recwarn.pop(DeprecationWarning) assert modcol.Item == pytest.Item - recwarn.pop(DeprecationWarning) assert modcol.File == pytest.File - recwarn.pop(DeprecationWarning) assert modcol.Function == pytest.Function - recwarn.pop(DeprecationWarning) def test_check_equality(self, testdir): modcol = testdir.getmodulecol("""