def test_provides_correct_implementation(): with Context(ConcreteComponent): c = Context.provide(configuration(BaseDependency)) assert isinstance(c, BaseDependency) assert isinstance(c, ConcreteComponent) with Context(AlternativeComponent): c = Context.provide(configuration(BaseDependency)) assert isinstance(c, BaseDependency) assert isinstance(c, AlternativeComponent)
def test_subtype_is_singleton(): @singleton class SomeComponentSingleton(SomeComponent): pass with Context(SomeComponentSingleton): s1 = Context.provide(configuration(SomeComponent)) s2 = Context.provide(configuration(SomeComponent)) assert s1 is s2 s3 = Context.provide(configuration(SomeComponentSingleton)) assert s1 is s3
def test_gets_most_specific(): class ConcreteComponentSub(ConcreteComponent): pass with Context(ConcreteComponent, ConcreteComponentSub): c = Context.provide(configuration(BaseDependency)) assert isinstance(c, ConcreteComponentSub)
def test_new_environment_in_thread(): def test(): with Context(AlternativeComponent): c1 = Context.provide(configuration(BaseDependency)) assert isinstance(c1, AlternativeComponent) with Context(ConcreteComponent): threading.Thread(target=test).start() c2 = Context.provide(configuration(BaseDependency)) assert isinstance(c2, ConcreteComponent)
def test(): component = Context.provide(configuration(SomeComponent)) assert isinstance(component, SomeComponent) test()
def test_provides_concrete_subclass(): with Context(ConcreteComponent): c = Context.provide(configuration(BaseDependency)) assert isinstance(c, BaseDependency) assert isinstance(c, ConcreteComponent)
def test_provides_concrete_dependency(): with Context(): c = Context.provide(configuration(SomeComponent)) assert isinstance(c, SomeComponent)
def test_singleton_is_always_same_instance(): with Context(): s1 = Context.provide(configuration(SomeSingleton)) s2 = Context.provide(configuration(SomeSingleton)) assert s1 is s2
def test_fails_with_ambiguous_dependencies(): with Context(ConcreteComponent, AlternativeComponent): with pytest.raises(AmbiguousDependencies): Context.provide(configuration(BaseDependency))
def test(): with Context(AlternativeComponent): c1 = Context.provide(configuration(BaseDependency)) assert isinstance(c1, AlternativeComponent)