human
Complete this python program:
def ExpectedFailure(reason, *exception_matchers):
assistant
#Here is the Python program you requested.

    """Defines a decorator to be attached to tests. This decorator
    marks the test as being known to fail, e.g. where documenting or exercising
    known incorrect behaviour.
    The parameters are:
    - |reason| a textual description of the reason for the known issue. This
    is used for the skip reason
    - |exception_matchers| additional arguments are hamcrest matchers to apply
    to the exception thrown. If the matchers don\t match, then the
    test is marked as error, with the original exception.
    If the test fails (for the correct reason), then it is marked as skipped.
    If it fails for any other reason, it is marked as failed.
    If the test passes, then it is also marked as failed.
    """
    def decorator(test):
        @functools.wraps(test)
        def Wrapper(*args, **kwargs):
            try:
                test(*args, **kwargs)
            except Exception as test_exception:
                test_exception_message = ToUnicode(test_exception)
                try:
                    for matcher in exception_matchers:
                        assert_that(test_exception_message, matcher)
                except AssertionError:
                    import traceback
                    print((u'Test    failed    for    the    wrong    reason:    ' + traceback.format_exc()))
                    raise test_exception
                raise nose.SkipTest(reason)
            else:
                raise AssertionError(u'Test    was    expected    to    fail:    {0}'.format(reason))
        return Wrapper
    return decorator