1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverimport unittest
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverclass BrokenTest(unittest.TestCase.failureException):
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def __repr__(self):
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        name, reason = self.args
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return '%s: %s: %s works now' % (
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            (self.__class__.__name__, name, reason))
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverdef broken(reason, *exceptions):
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    '''Indicates a failing (or erroneous) test case fails that should succeed.
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    If the test fails with an exception, list the exception type in args'''
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    def wrapper(test_method):
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        def replacement(*args, **kwargs):
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            try:
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                test_method(*args, **kwargs)
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            except exceptions or unittest.TestCase.failureException:
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                pass
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            else:
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                raise BrokenTest(test_method.__name__, reason)
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        replacement.__doc__ = test_method.__doc__
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        replacement.__name__ = 'XXX_' + test_method.__name__
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        replacement.todo = reason
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return replacement
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    return wrapper
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
28