예제 #1
0
 def test_should_return_different_instances(self):
     pinsor = PinsorContainer()
     pinsor.addcomponent(FakeObj, key="comp.fake1")
     pinsor.addcomponent(FakeObj, key="comp.fake2")
     fake1 = pinsor.resolve(key="comp.fake1")
     fake2 = pinsor.resolve(key="comp.fake2")
     self.assertNotEqual(id(fake1), id(fake2))
예제 #2
0
 def test_should_return_new_instance_each_time_resolve_is_called_when_lifestyle_of_that_component_is_set_to_transient(self):
     pinsor = PinsorContainer()
     pinsor.addcomponent(FakeObj, depends=[], lifestyle = LifeStyle.transient)
     fakeobj1 = pinsor.resolve(FakeObj)
     fakeobj2 = pinsor.resolve(FakeObj)
     assert isinstance(fakeobj1, FakeObj)
     assert isinstance(fakeobj2, FakeObj)
     self.assertNotEqual(id(fakeobj1), id(fakeobj2))
예제 #3
0
 def test_should_throw_an_exception_when_circular_dependency_is_found(self):
     pinsor = PinsorContainer()
     pinsor.addcomponent(CircularDependencyA, depends=[CircularDependencyB])
     pinsor.addcomponent(CircularDependencyB, depends=[CircularDependencyA])
     try:
         depA = pinsor.resolve(CircularDependencyA)
     except CircularDependencyException:
         pass
     else:
         self.fail("This should raise an exception")
예제 #4
0
class working_with_explicit_interceptor_tests(unittest.TestCase):

    def setUp(self):
        self.commands = []
        self._container = PinsorContainer()
        self._container.register(Component.oftype(InterceptMe).depends([Instance(self.commands)]).interceptors([BeforeAfterCeptor(self.commands)]))
        self._comp = self._container.resolve(InterceptMe)

    def test_should_apply_behavior_before_method_call(self):
        self._comp.run("call me")
        self.assertNotEqual(len(self.commands), 1)
        self.assertEqual( self.commands[0] , "intercepted")
예제 #5
0
 def setUp(self):
     self.commands = []
     self._container = PinsorContainer()
     self._container.register(Component.oftype(InterceptMe).depends([Instance(self.commands)]).interceptors([BeforeAfterCeptor(self.commands)]))
     self._comp = self._container.resolve(InterceptMe)
예제 #6
0
class container_tests(unittest.TestCase):

    def setUp(self):
        self.pinsor = PinsorContainer()
        self.pinsor.addcomponent(FakeObj)

    def test_should_retrieve_class_instantiated(self):
        fakeinstance  = self.pinsor.resolve(FakeObj)
        assert isinstance(fakeinstance, FakeObj)

    def test_should_build_class_with_one_dependency(self):
        self.pinsor.addcomponent(NeedsFakeObj, depends=[FakeObj])
        needsfake = self.pinsor.resolve(NeedsFakeObj)
        assert isinstance(needsfake, NeedsFakeObj)
        assert needsfake.HasFakeObj()

    def test_should_instantiate_all_objects_in_dependency_tree(self):
        self.pinsor.addcomponent(NeedsFakeObj, depends=[FakeObj])
        self.pinsor.addcomponent(FakeObjWithArgs, depends=[FakeObj, NeedsFakeObj])
        fakeobj = self.pinsor.resolve(FakeObjWithArgs)
        assert isinstance(fakeobj, FakeObjWithArgs)
        assert fakeobj.DoesStuff()
    
    def test_should_return_same_instance_each_time_resolve_is_called_by_default(self):
        fakeobj1 = self.pinsor.resolve(FakeObj)
        fakeobj2 = self.pinsor.resolve(FakeObj)
        self.assertEqual(id(fakeobj1), id(fakeobj2))
    
    def test_should_return_new_instance_each_time_resolve_is_called_when_lifestyle_of_that_component_is_set_to_transient(self):
        pinsor = PinsorContainer()
        pinsor.addcomponent(FakeObj, depends=[], lifestyle = LifeStyle.transient)
        fakeobj1 = pinsor.resolve(FakeObj)
        fakeobj2 = pinsor.resolve(FakeObj)
        assert isinstance(fakeobj1, FakeObj)
        assert isinstance(fakeobj2, FakeObj)
        self.assertNotEqual(id(fakeobj1), id(fakeobj2))
        
    def test_should_be_able_to_resolve_by_component_key(self):
        pinsor = PinsorContainer()
        pinsor.addcomponent(FakeObj, key="comp.fakeobj")
        fakeobj = pinsor.resolve(key="comp.fakeobj")
        assert isinstance(fakeobj, FakeObj)
    
    def test_should_retrieve_dependencies_dependencies_by_key(self):
        pinsor = PinsorContainer()
        pinsor.addcomponent(FakeObj, key="comp.fakeobj")
        pinsor.addcomponent(NeedsFakeObj, depends = [Config("comp.fakeobj")])
        needsfake = pinsor.resolve(NeedsFakeObj)
        assert needsfake.HasFakeObj
    
    def test_should_throw_an_exception_when_circular_dependency_is_found(self):
        pinsor = PinsorContainer()
        pinsor.addcomponent(CircularDependencyA, depends=[CircularDependencyB])
        pinsor.addcomponent(CircularDependencyB, depends=[CircularDependencyA])
        try:
            depA = pinsor.resolve(CircularDependencyA)
        except CircularDependencyException:
            pass
        else:
            self.fail("This should raise an exception")
예제 #7
0
 def test_should_retrieve_dependencies_dependencies_by_key(self):
     pinsor = PinsorContainer()
     pinsor.addcomponent(FakeObj, key="comp.fakeobj")
     pinsor.addcomponent(NeedsFakeObj, depends = [Config("comp.fakeobj")])
     needsfake = pinsor.resolve(NeedsFakeObj)
     assert needsfake.HasFakeObj
예제 #8
0
 def test_should_be_able_to_resolve_by_component_key(self):
     pinsor = PinsorContainer()
     pinsor.addcomponent(FakeObj, key="comp.fakeobj")
     fakeobj = pinsor.resolve(key="comp.fakeobj")
     assert isinstance(fakeobj, FakeObj)
예제 #9
0
 def setUp(self):
     self.pinsor = PinsorContainer()
     self.pinsor.addcomponent(FakeObj)
예제 #10
0
class fluent_registration_of_objects_tests(unittest.TestCase):
    
    def setUp(self):
        self.pinsor = PinsorContainer()
        
    def test_should_pass_component_into_containter_by_class_name(self):
        self.pinsor.register(Component.oftype(FakeObj))
        fake = self.pinsor.resolve(FakeObj)
        assert isinstance(fake,FakeObj)
    
    def test_should_pass_component_into_container_and_set_key(self):
        self.pinsor.register(Component.oftype(FakeObj).named("comp.key"))
        assert self.pinsor.objectgraph["comp.key"].classtype == FakeObj
        fake = self.pinsor.resolve(key='comp.key');
        assert isinstance(fake, FakeObj)    
    
    def test_should_pass_more_than_one_component_into_container(self):
        self.pinsor.register(
                            Component.oftype(FakeObj).named("fake1"),
                            Component.oftype(FakeObj).named("fake2")
                             )
        fake1 = self.pinsor.resolve(key="fake1")
        fake2 = self.pinsor.resolve(key="fake2")
        assert isinstance(fake1, FakeObj)
        assert isinstance(fake2, FakeObj)
        
    def test_should_set_dependencies(self):
        self.pinsor.register(
                            Component.oftype(FakeObj),
                            Component.oftype(NeedsFakeObj).depends([FakeObj])
                            )
        needsfake = self.pinsor.resolve(NeedsFakeObj)
        assert needsfake.HasFakeObj()
    
    def test_should_set_lifestyle(self):
        self.pinsor.register(
                             Component.oftype(FakeObj).lifestyle(LifeStyle.transient())
                             )
        fake1 = self.pinsor.resolve(FakeObj)
        fake2 = self.pinsor.resolve(FakeObj)
        self.assertNotEqual(id(fake1), id(fake2))
        
    def test_should_set_multiple_options_at_once(self):
        self.pinsor.register(
                            Component.oftype(FakeObj),
                            Component.oftype(NeedsFakeObj).depends([FakeObj]).named("needs").lifestyle(LifeStyle.transient())
                            )
        com = self.pinsor.objectgraph["needs"]
        self.assertEqual(NeedsFakeObj, com.classtype)
        self.assertEqual("transient", com.lifestyle)
        self.assertEqual(FakeObj, com.depends[0])
        
    def test_should_be_able_to_register_by_key(self):
        self.pinsor.register(
                            Component.oftype(FakeObj).named("fake1"),
                            Component.oftype(FakeObj).named("fake2"),
                            Component.oftype(NeedsFakeObj).depends([Config("fake1")]).named("needs1"),
                            Component.oftype(NeedsFakeObj).depends([Config("fake2")]).named("needs2")
                            )
        fake2_id = id(self.pinsor.resolve(key="fake2"))
        needsfake = self.pinsor.resolve(key="needs2")
        fakefromneeds1_id = id(needsfake.FakeInstance())
        
    def test_should_be_able_register_a_param(self):
        fakeobj = FakeObj()
        self.pinsor.register(
                            Component.oftype(NeedsFakeObj).depends([Instance(fakeobj)])
                            )
                            
        fakefromneeds = self.pinsor.resolve(NeedsFakeObj)
        self.assertEqual(id(fakeobj), id(fakefromneeds.FakeInstance()))
예제 #11
0
 def setUp(self):
     self.pinsor = PinsorContainer()