def METHOD_NAME(runner_class, runner_class_name=None):
    """Check if a runner class supports the Runner API constraints."""
    if not runner_class_name:
        runner_class_name = make_scoped_class_name(runner_class)
    if not inspect.isclass(runner_class):
        raise InvalidClassError("is not a class")
    elif not issubclass(runner_class, ITestRunner):
        message = "is not a subclass-of 'behave.api.runner:ITestRunner'"
        raise InvalidClassError(message)
    run_method = getattr(runner_class, "run", None)
    if not callable(run_method):
        raise InvalidClassError("run() is not callable")
    undefined_steps = getattr(runner_class, "undefined_steps", None)
    if undefined_steps is None:
        raise InvalidClassError("undefined_steps: missing attribute or property")
    # MAYBE:
    # elif not callable(undefined_steps):
    #     raise InvalidClassError("undefined_steps is not callable")