70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
| """
 | |
| automatically discover and run traditional "unittest.py" style tests.
 | |
| """
 | |
| import py
 | |
| import sys
 | |
| 
 | |
| def pytest_pycollect_makeitem(collector, name, obj):
 | |
|     if 'unittest' not in sys.modules:
 | |
|         return # nobody derived unittest.TestCase
 | |
|     try:
 | |
|         isunit = issubclass(obj, py.std.unittest.TestCase)
 | |
|     except KeyboardInterrupt:
 | |
|         raise
 | |
|     except Exception:
 | |
|         pass
 | |
|     else:
 | |
|         if isunit:
 | |
|             return UnitTestCase(name, parent=collector)
 | |
| 
 | |
| class UnitTestCase(py.test.collect.Class):
 | |
|     def collect(self):
 | |
|         return [UnitTestCaseInstance("()", self)]
 | |
| 
 | |
|     def setup(self):
 | |
|         pass
 | |
| 
 | |
|     def teardown(self):
 | |
|         pass
 | |
| 
 | |
| _dummy = object()
 | |
| class UnitTestCaseInstance(py.test.collect.Instance):
 | |
|     def collect(self):
 | |
|         loader = py.std.unittest.TestLoader()
 | |
|         names = loader.getTestCaseNames(self.obj.__class__)
 | |
|         l = []
 | |
|         for name in names:
 | |
|             callobj = getattr(self.obj, name)
 | |
|             if py.builtin.callable(callobj):
 | |
|                 l.append(UnitTestFunction(name, parent=self))
 | |
|         return l
 | |
| 
 | |
|     def _getobj(self):
 | |
|         x = self.parent.obj
 | |
|         return self.parent.obj(methodName='run')
 | |
| 
 | |
| class UnitTestFunction(py.test.collect.Function):
 | |
|     def __init__(self, name, parent, args=(), obj=_dummy, sort_value=None):
 | |
|         super(UnitTestFunction, self).__init__(name, parent)
 | |
|         self._args = args
 | |
|         if obj is not _dummy:
 | |
|             self._obj = obj
 | |
|         self._sort_value = sort_value
 | |
|         if hasattr(self.parent, 'newinstance'):
 | |
|             self.parent.newinstance()
 | |
|             self.obj = self._getobj()
 | |
| 
 | |
|     def runtest(self):
 | |
|         target = self.obj
 | |
|         args = self._args
 | |
|         target(*args)
 | |
| 
 | |
|     def setup(self):
 | |
|         instance = py.builtin._getimself(self.obj)
 | |
|         instance.setUp()
 | |
| 
 | |
|     def teardown(self):
 | |
|         instance = py.builtin._getimself(self.obj)
 | |
|         instance.tearDown()
 | |
| 
 |