60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
import py
 | 
						|
from py.__.test.outcome import Failed, Passed
 | 
						|
 | 
						|
 | 
						|
class TestCaseUnit(py.test.collect.Function):
 | 
						|
    """ compatibility Unit executor for TestCase methods
 | 
						|
        honouring setUp and tearDown semantics.
 | 
						|
    """
 | 
						|
    def execute(self, session):
 | 
						|
        boundmethod = self.obj 
 | 
						|
        instance = boundmethod.im_self 
 | 
						|
        instance.setUp()
 | 
						|
        try:
 | 
						|
            boundmethod()
 | 
						|
        finally:
 | 
						|
            instance.tearDown()
 | 
						|
        return Passed()
 | 
						|
 | 
						|
class TestCase(object):
 | 
						|
    """compatibility class of unittest's TestCase. """
 | 
						|
    Function = TestCaseUnit
 | 
						|
 | 
						|
    def setUp(self):
 | 
						|
        pass
 | 
						|
 | 
						|
    def tearDown(self):
 | 
						|
        pass
 | 
						|
 | 
						|
    def fail(self, msg=None):
 | 
						|
        """ fail immediate with given message. """
 | 
						|
        raise Failed(msg=msg)
 | 
						|
 | 
						|
    def assertRaises(self, excclass, func, *args, **kwargs):
 | 
						|
        py.test.raises(excclass, func, *args, **kwargs)
 | 
						|
    failUnlessRaises = assertRaises
 | 
						|
 | 
						|
    # dynamically construct (redundant) methods
 | 
						|
    aliasmap = [
 | 
						|
        ('x',   'not x', 'assert_, failUnless'),
 | 
						|
        ('x',   'x',     'failIf'),
 | 
						|
        ('x,y', 'x!=y',  'failUnlessEqual,assertEqual, assertEquals'),
 | 
						|
        ('x,y', 'x==y',  'failIfEqual,assertNotEqual, assertNotEquals'),
 | 
						|
        ]
 | 
						|
    items = []
 | 
						|
    for sig, expr, names in aliasmap:
 | 
						|
        names = map(str.strip, names.split(','))
 | 
						|
        sigsubst = expr.replace('y', '%s').replace('x', '%s')
 | 
						|
        for name in names:
 | 
						|
            items.append("""
 | 
						|
                def %(name)s(self, %(sig)s, msg=""):
 | 
						|
                    __tracebackhide__ = True
 | 
						|
                    if %(expr)s:
 | 
						|
                        raise Failed(msg=msg + (%(sigsubst)r %% (%(sig)s)))
 | 
						|
            """ % locals() )
 | 
						|
 | 
						|
    source = "".join(items)
 | 
						|
    exec py.code.Source(source).compile()
 | 
						|
 | 
						|
__all__ = ['TestCase']
 |