def test_list_binding_with_named_arguments(self):
        self.binding_registry.register(
            RegisteredMultiBinding(
                MultiBinding(
                    MyType,
                    [
                        ItemBinding(bound_instance=self.named_instance),
                    ],
                    named="my_name",
                ),
                item_bindings=[
                    RegisteredBinding(InstanceBinding(MyType, self.named_instance, named="my_name"))
                ]
            )
        )
        self.binding_registry.register(
            RegisteredMultiBinding(
                MultiBinding(
                    MyType,
                    [
                        ItemBinding(bound_instance=self.my_instance),
                    ],
                ),
                item_bindings=[
                    RegisteredBinding(InstanceBinding(MyType, self.my_instance))
                ]
            )
        )
        self.binding_registry.register(RegisteredBinding(self.my_named_instance_binding))
        self.binding_registry.register(RegisteredBinding(SelfBinding(MyType)))

        context = InjectionContext(Target(List[MyType], "my_name"), self.state)
        provider = self.provider_creator.get_provider(context)
        list_instance = provider.get()
        self.assertEqual([self.named_instance], list_instance)
Beispiel #2
0
 def test_register_multi_binding_saves_binding_to_known_type_in_order(self):
     item_binding_1 = ItemBinding(MyType)
     registered_item_binding_1 = RegisteredBinding(SelfBinding(MyType))
     item_binding_2 = ItemBinding(bound_instance=MyType())
     registered_item_binding_2 = RegisteredBinding(
         InstanceBinding(MyType, item_binding_2.bound_instance))
     binding_1 = RegisteredMultiBinding(MultiBinding(
         MyType, [item_binding_1]),
                                        item_bindings=[
                                            registered_item_binding_1,
                                        ])
     binding_2 = RegisteredMultiBinding(MultiBinding(
         MyType, [item_binding_2], override_bindings=False),
                                        item_bindings=[
                                            registered_item_binding_2,
                                        ])
     self.binding_registry.register(binding_1)
     self.binding_registry.register(binding_2)
     registered_binding = self.binding_registry.get_binding(
         Target(List[MyType]))
     self.assertIsInstance(registered_binding, RegisteredMultiBinding)
     self.assertIsInstance(registered_binding.raw_binding, MultiBinding)
     self.assertEqual(
         [registered_item_binding_1, registered_item_binding_2],
         registered_binding.item_bindings)
Beispiel #3
0
 def test_register_multi_binding_with_override(self):
     item_binding_1 = ItemBinding(MyType)
     item_binding_2 = ItemBinding(bound_instance=MyType())
     binding_1 = RegisteredMultiBinding(
         MultiBinding(MyType, [item_binding_1]))
     binding_2 = RegisteredMultiBinding(
         MultiBinding(MyType, [item_binding_2], override_bindings=True))
     self.binding_registry.register(binding_1)
     self.binding_registry.register(binding_2)
     binding = self.binding_registry.get_binding(Target(
         List[MyType])).raw_binding
     self.assertIsInstance(binding, MultiBinding)
     self.assertEqual([item_binding_2], binding.item_bindings)
Beispiel #4
0
    def test_create_from_class_binding(self):
        binding = RegisteredMultiBinding(
            MultiBinding(MyType, [ItemBinding(bound_class=MyType)]),
            item_bindings=[RegisteredBinding(SelfBinding(MyType))])

        provider = self.adapter.create(binding, self.context)

        list_instance = provider.get()
        self.assertEqual(1, len(list_instance))
        self.assertIsInstance(list_instance[0], MyType)
Beispiel #5
0
    def test_create_from_instance_binding(self):
        binding = RegisteredMultiBinding(
            MultiBinding(MyType,
                         [ItemBinding(bound_instance=self.my_instance)]),
            item_bindings=[
                RegisteredBinding(InstanceBinding(MyType, self.my_instance))
            ])
        provider = self.adapter.create(binding, self.context)

        list_instance = provider.get()
        self.assertEqual([self.my_instance], list_instance)
    def test_create_from_provider_binding(self):
        provider = create_autospec(Provider, spec_set=True)
        instance = MyType()
        provider.get.return_value = instance
        binding = RegisteredMultiBinding(MultiBinding(MyType, [ItemBinding(bound_provider=provider)]), item_bindings=[
            RegisteredBinding(ProviderBinding(MyType, provider))
        ])

        provider = self.adapter.create(binding, self.context)

        list_instance = provider.get()
        self.assertEqual([instance], list_instance)
Beispiel #7
0
    def test_multi_binding(self):
        instance = MyType()
        provider = MyProvider
        self.module.multi_bind(
            MyType,
            [
                self.module.bind_item(to_class=MyType),
                self.module.bind_item(to_instance=instance),
                self.module.bind_item(to_provider=provider),
            ],
            scope=PerLookupScope,
            named="my_name",
            override_bindings=False,
        )

        self.assertEqual(
            {
                FrozenTarget(List[MyType], "my_name"):
                RegisteredMultiBinding(
                    MultiBinding(
                        MyType,
                        [
                            ItemBinding(bound_class=MyType),
                            ItemBinding(bound_instance=instance),
                            ItemBinding(bound_provider=provider),
                        ],
                        scope=PerLookupScope,
                        named="my_name",
                        override_bindings=False,
                    ),
                    item_bindings=[
                        RegisteredBinding(
                            SelfBinding(MyType,
                                        scope=PerLookupScope,
                                        named="my_name"), ),
                        RegisteredBinding(
                            InstanceBinding(MyType, instance,
                                            named="my_name"), ),
                        RegisteredBinding(
                            ProviderBinding(MyType,
                                            provider,
                                            scope=PerLookupScope,
                                            named="my_name"), )
                    ]),
                FrozenTarget(MyProvider, "my_name"):
                RegisteredBinding(
                    SelfBinding(
                        MyProvider, scope=PerLookupScope, named="my_name")),
                FrozenTarget(MyType, "my_name"):
                RegisteredBinding(
                    InstanceBinding(MyType, instance, named="my_name"))
            }, self.module.binding_registry.get_bindings_by_target())
    def test_create_scoped_provider(self):
        provider = self.adapter.create(RegisteredMultiBinding(
            MultiBinding(MyType, [ItemBinding(MyType)], scope=ThreadScope),
            item_bindings=[
                RegisteredBinding(SelfBinding(MyType, scope=ThreadScope))
            ]
        ), self.context)

        self.assertIsInstance(provider, ThreadScopedProvider)
        instance = provider.get()
        self.assertIsInstance(instance, list)
        self.assertEqual(1, len(instance))
        self.assertIsInstance(instance[0], MyType)
Beispiel #9
0
    def test_register_multi_binding_with_provider_binding_creates_self_binding(
            self):
        class MyProvider(Provider[str]):
            def get(self) -> str:
                return "hello"

        provider_binding = RegisteredBinding(ProviderBinding(str, MyProvider))
        multi_binding = RegisteredMultiBinding(
            MultiBinding(str, [provider_binding.raw_binding]),
            item_bindings=[provider_binding])
        self.binding_registry.register(multi_binding)

        provider_binding = self.binding_registry.get_binding(
            Target(MyProvider))
        self.assertIsInstance(provider_binding.raw_binding, SelfBinding)
        self.assertEqual(MyProvider, provider_binding.raw_binding.target_type)
 def test_list_binding_with_multi_binding(self):
     self.binding_registry.register(
         RegisteredMultiBinding(
             MultiBinding(
                 MyType,
                 [
                     ItemBinding(bound_instance=self.my_instance),
                     ItemBinding(MyType),
                 ],
             ),
             item_bindings=[
                 RegisteredBinding(InstanceBinding(MyType,
                                                   self.my_instance)),
                 RegisteredBinding(SelfBinding(MyType)),
             ]))
     context = InjectionContext(Target(List[MyType]), self.state)
     provider = self.provider_creator.get_provider(context)
     list_instance = provider.get()
     self.assertEqual([self.my_instance, ANY], list_instance)
     self.assertIsInstance(list_instance[1], MyType)
 def test_set_binding_with_multi_binding(self):
     self.binding_registry.register(
         RegisteredMultiBinding(
             MultiBinding(
                 MyType,
                 [
                     ItemBinding(bound_instance=self.my_instance),
                     ItemBinding(MyType),
                 ],
             ),
             item_bindings=[
                 RegisteredBinding(InstanceBinding(MyType,
                                                   self.my_instance)),
                 RegisteredBinding(SelfBinding(MyType)),
             ]))
     context = InjectionContext(Target(Set[MyType]), self.state)
     provider = self.provider_creator.get_provider(context)
     self.assertIsInstance(provider, FromClassProvider)
     set_instance = provider.get()
     self.assertIn(self.my_instance, set_instance)
     self.assertEqual(2, len(set_instance))
Beispiel #12
0
    def test_multi_binding_default_parameters(self):
        self.module.multi_bind(
            MyType,
            [
                self.module.bind_item(MyType),
            ],
        )

        self.assertEqual(
            {
                FrozenTarget(List[MyType]):
                RegisteredMultiBinding(
                    MultiBinding(
                        MyType,
                        [
                            ItemBinding(MyType),
                        ],
                        SingletonScope,
                        None,
                        True,
                    ),
                    item_bindings=[RegisteredBinding(SelfBinding(MyType), )]),
            }, self.module.binding_registry.get_bindings_by_target())
Beispiel #13
0
 def test_non_injectable_scope_raises_exception(self):
     with self.assertRaises(NonInjectableTypeError):
         self.adapter.create(
             RegisteredMultiBinding(
                 MultiBinding(MyType, [], scope=ImmediateScope)),
             self.context)