cleanup: move creation of python colitems to a default pytest_pycollect_makeitem hook impl
--HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									9910db2ca6
								
							
						
					
					
						commit
						118eebb190
					
				|  | @ -119,3 +119,31 @@ def setsession(config): | ||||||
|         elif val("dist") != "no": |         elif val("dist") != "no": | ||||||
|             from _py.test.dist.dsession import  DSession |             from _py.test.dist.dsession import  DSession | ||||||
|             config.setsessionclass(DSession) |             config.setsessionclass(DSession) | ||||||
|  |        | ||||||
|  | # pycollect related hooks and code, should move to pytest_pycollect.py | ||||||
|  |   | ||||||
|  | def pytest_pycollect_makeitem(__multicall__, collector, name, obj): | ||||||
|  |     res = __multicall__.execute() | ||||||
|  |     if res is not None: | ||||||
|  |         return res | ||||||
|  |     if collector._istestclasscandidate(name, obj): | ||||||
|  |         res = collector._deprecated_join(name) | ||||||
|  |         if res is not None: | ||||||
|  |             return res  | ||||||
|  |         return collector.Class(name, parent=collector) | ||||||
|  |     elif collector.funcnamefilter(name) and hasattr(obj, '__call__'): | ||||||
|  |         res = collector._deprecated_join(name) | ||||||
|  |         if res is not None: | ||||||
|  |             return res  | ||||||
|  |         if is_generator(obj): | ||||||
|  |             # XXX deprecation warning  | ||||||
|  |             return collector.Generator(name, parent=collector) | ||||||
|  |         else: | ||||||
|  |             return collector._genfunctions(name, obj)  | ||||||
|  | 
 | ||||||
|  | def is_generator(func): | ||||||
|  |     try: | ||||||
|  |         return py.code.getrawcode(func).co_flags & 32 # generator function  | ||||||
|  |     except AttributeError: # builtin functions have no bytecode | ||||||
|  |         # assume them to not be generators | ||||||
|  |         return False  | ||||||
|  |  | ||||||
|  | @ -18,7 +18,7 @@ import sys | ||||||
| 
 | 
 | ||||||
| def pytest_pycollect_makeitem(collector, name, obj): | def pytest_pycollect_makeitem(collector, name, obj): | ||||||
|     if 'unittest' not in sys.modules: |     if 'unittest' not in sys.modules: | ||||||
|         return # nobody could have possibly derived a subclass  |         return # nobody derived unittest.TestCase | ||||||
|     try: |     try: | ||||||
|         isunit = issubclass(obj, py.std.unittest.TestCase) |         isunit = issubclass(obj, py.std.unittest.TestCase) | ||||||
|     except TypeError: |     except TypeError: | ||||||
|  |  | ||||||
|  | @ -120,24 +120,8 @@ class PyCollectorMixin(PyobjMixin, py.test.collect.Collector): | ||||||
|             return self.join(name) |             return self.join(name) | ||||||
| 
 | 
 | ||||||
|     def makeitem(self, name, obj): |     def makeitem(self, name, obj): | ||||||
|         res = self.config.hook.pytest_pycollect_makeitem( |         return self.config.hook.pytest_pycollect_makeitem( | ||||||
|             collector=self, name=name, obj=obj) |             collector=self, name=name, obj=obj) | ||||||
|         if res is not None: |  | ||||||
|             return res |  | ||||||
|         if self._istestclasscandidate(name, obj): |  | ||||||
|             res = self._deprecated_join(name) |  | ||||||
|             if res is not None: |  | ||||||
|                 return res  |  | ||||||
|             return self.Class(name, parent=self) |  | ||||||
|         elif self.funcnamefilter(name) and hasattr(obj, '__call__'): |  | ||||||
|             res = self._deprecated_join(name) |  | ||||||
|             if res is not None: |  | ||||||
|                 return res  |  | ||||||
|             if is_generator(obj): |  | ||||||
|                 # XXX deprecation warning  |  | ||||||
|                 return self.Generator(name, parent=self) |  | ||||||
|             else: |  | ||||||
|                 return self._genfunctions(name, obj)  |  | ||||||
| 
 | 
 | ||||||
|     def _istestclasscandidate(self, name, obj): |     def _istestclasscandidate(self, name, obj): | ||||||
|         if self.classnamefilter(name) and \ |         if self.classnamefilter(name) and \ | ||||||
|  | @ -147,7 +131,6 @@ class PyCollectorMixin(PyobjMixin, py.test.collect.Collector): | ||||||
|                 return False |                 return False | ||||||
|             return True |             return True | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
|     def _genfunctions(self, name, funcobj): |     def _genfunctions(self, name, funcobj): | ||||||
|         module = self.getparent(Module).obj |         module = self.getparent(Module).obj | ||||||
|         clscol = self.getparent(Class) |         clscol = self.getparent(Class) | ||||||
|  | @ -162,12 +145,6 @@ class PyCollectorMixin(PyobjMixin, py.test.collect.Collector): | ||||||
|         return funcargs.FunctionCollector(name=name,  |         return funcargs.FunctionCollector(name=name,  | ||||||
|             parent=self, calls=metafunc._calls) |             parent=self, calls=metafunc._calls) | ||||||
| 
 | 
 | ||||||
| def is_generator(func): |  | ||||||
|     try: |  | ||||||
|         return py.code.getrawcode(func).co_flags & 32 # generator function  |  | ||||||
|     except AttributeError: # builtin functions have no bytecode |  | ||||||
|         # assume them to not be generators |  | ||||||
|         return False  |  | ||||||
|          |          | ||||||
| class Module(py.test.collect.File, PyCollectorMixin): | class Module(py.test.collect.File, PyCollectorMixin): | ||||||
|     def _getobj(self): |     def _getobj(self): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue