Exemple #1
0
def test_copy(provider: ServiceProvider, keep_singletons_cache: bool,
              scope: Scope):
    class C:
        pass

    world.test.singleton('factory', lambda: C())
    provider.register(A, scope=scope)

    cloned = provider.clone(keep_singletons_cache)
    if keep_singletons_cache:
        with world.test.clone(keep_singletons=True):
            assert isinstance(
                world.test.maybe_provide_from(cloned, A).unwrapped, A)
    else:
        with world.test.clone(keep_singletons=False):
            assert isinstance(
                world.test.maybe_provide_from(cloned, A).unwrapped, A)

    class D:
        pass

    class E:
        pass

    # changing original does not change cloned
    provider.register(D, scope=scope)
    assert isinstance(world.get(D), D)
    assert world.test.maybe_provide_from(cloned, D) is None

    # changing cloned does not change original
    cloned.register(E, scope=scope)
    assert isinstance(world.test.maybe_provide_from(cloned, E).unwrapped, E)
    with pytest.raises(DependencyNotFoundError):
        world.get(E)
Exemple #2
0
def test_register(singleton: bool):
    with world.test.empty():
        provider = ServiceProvider()
        provider.register(A, scope=Scope.singleton() if singleton else None)
        assert world.test.maybe_provide_from(provider,
                                             A).is_singleton() is singleton
        assert isinstance(
            world.test.maybe_provide_from(provider, A).unwrapped, A)
Exemple #3
0
def test_parameterized(scope: Scope):
    provider = ServiceProvider()
    provider.register(A, scope=scope)

    s = world.test.maybe_provide_from(provider,
                                      Parameterized(
                                          A, dict(val=object))).unwrapped
    assert isinstance(s, A)
    assert dict(val=object) == s.kwargs
Exemple #4
0
def test_custom_scope(provider: ServiceProvider):
    dummy_scope = world.scopes.new(name='dummy')

    class MyService:
        pass

    provider.register(MyService, scope=dummy_scope)

    my_service = world.get(MyService)
    assert my_service is world.get(MyService)
    world.scopes.reset(dummy_scope)
    assert my_service is not world.get(MyService)
Exemple #5
0
def test_simple(provider: ServiceProvider, scope: Scope):
    provider.register(A, scope=scope)
    assert isinstance(world.get(A), A)
    assert repr(A) in repr(provider)
Exemple #6
0
def test_sanity_checks(provider: ServiceProvider, klass, scope):
    with pytest.raises((AssertionError, TypeError)):
        provider.register(klass, scope=scope)
Exemple #7
0
def test_exists(provider: ServiceProvider, scope: Scope):
    provider.register(A, scope=scope)
    assert not provider.exists(object())
    assert provider.exists(A)
    assert provider.exists(Parameterized(A, dict(a=1)))
    assert not provider.exists(Parameterized(B, dict(a=1)))
Exemple #8
0
def test_freeze(provider: ServiceProvider, scope: Scope):
    world.freeze()

    with pytest.raises(FrozenWorldError):
        provider.register(A, scope=scope)
Exemple #9
0
def test_duplicate_error(provider: ServiceProvider, scope: Scope):
    provider.register(A, scope=scope)

    with pytest.raises(DuplicateDependencyError):
        provider.register(A, scope=scope)