Ejemplo n.º 1
0
def inject_fixture(request, arg, value):
    """Inject fixture into pytest fixture request.

    :param request: pytest fixture request
    :param arg: argument name
    :param value: argument value
    """
    fd_kwargs = {
        'fixturemanager': request._fixturemanager,
        'baseid': None,
        'argname': arg,
        'func': lambda: value,
        'scope': "function",
        'params': None,
    }

    if 'yieldctx' in get_args(pytest_fixtures.FixtureDef.__init__):
        fd_kwargs['yieldctx'] = False

    fd = pytest_fixtures.FixtureDef(**fd_kwargs)
    fd.cached_result = (value, 0, None)

    old_fd = get_request_fixture_defs(request).get(arg)
    add_fixturename = arg not in request.fixturenames

    old_value = get_fixture_value_raw(request,
                                      arg)  # Compatibility with pytest < 3.3.2

    def fin():
        request._fixturemanager._arg2fixturedefs[arg].remove(fd)
        get_request_fixture_defs(request)[arg] = old_fd

        if add_fixturename:
            get_request_fixture_names(request).remove(arg)

        set_fixture_value(request, arg,
                          old_value)  # Compatibility with pytest < 3.3.2

    request.addfinalizer(fin)

    # inject fixture definition
    request._fixturemanager._arg2fixturedefs.setdefault(arg, []).insert(0, fd)
    # inject fixture value in request cache
    get_request_fixture_defs(request)[arg] = fd
    set_fixture_value(request, arg, value)
    if add_fixturename:
        get_request_fixture_names(request).append(arg)
Ejemplo n.º 2
0
def inject_fixture(request, arg, value):
    """Inject fixture into pytest fixture request.

    :param request: pytest fixture request
    :param arg: argument name
    :param value: argument value
    """
    fd_kwargs = {
        'fixturemanager': request._fixturemanager,
        'baseid': None,
        'argname': arg,
        'func': lambda: value,
        'scope': "function",
        'params': None,
    }

    if 'yieldctx' in get_args(pytest_fixtures.FixtureDef.__init__):
        fd_kwargs['yieldctx'] = False

    fd = pytest_fixtures.FixtureDef(**fd_kwargs)
    fd.cached_result = (value, 0, None)

    old_fd = getattr(request, "_fixturedefs", {}).get(arg)
    old_value = request._funcargs.get(arg)
    add_fixturename = arg not in request.fixturenames

    def fin():
        request._fixturemanager._arg2fixturedefs[arg].remove(fd)
        getattr(request, "_fixturedefs", {})[arg] = old_fd
        request._funcargs[arg] = old_value
        if add_fixturename:
            request.fixturenames.remove(arg)

    request.addfinalizer(fin)

    # inject fixture definition
    request._fixturemanager._arg2fixturedefs.setdefault(arg, []).insert(0, fd)
    # inject fixture value in request cache
    getattr(request, "_fixturedefs", {})[arg] = fd
    request._funcargs[arg] = value
    if add_fixturename:
        request.fixturenames.append(arg)
Ejemplo n.º 3
0
def inject_fixture(request, arg, value):
    """Inject fixture into pytest fixture request.

    :param request: pytest fixture request
    :param arg: argument name
    :param value: argument value
    """
    fd_kwargs = {
        "fixturemanager": request._fixturemanager,
        "baseid": None,
        "argname": arg,
        "func": lambda: value,
        "scope": "function",
        "params": None,
    }

    if "yieldctx" in get_args(pytest_fixtures.FixtureDef.__init__):
        fd_kwargs["yieldctx"] = False

    fd = pytest_fixtures.FixtureDef(**fd_kwargs)
    fd.cached_result = (value, 0, None)

    old_fd = request._fixture_defs.get(arg)
    add_fixturename = arg not in request.fixturenames

    def fin():
        request._fixturemanager._arg2fixturedefs[arg].remove(fd)
        request._fixture_defs[arg] = old_fd

        if add_fixturename:
            request._pyfuncitem._fixtureinfo.names_closure.remove(arg)

    request.addfinalizer(fin)

    # inject fixture definition
    request._fixturemanager._arg2fixturedefs.setdefault(arg, []).insert(0, fd)
    # inject fixture value in request cache
    request._fixture_defs[arg] = fd
    if add_fixturename:
        request._pyfuncitem._fixtureinfo.names_closure.append(arg)