예제 #1
0
 def test_inject_value_list(self):
     processor = processors.ConstructorInjection()
     processor.container = IocContainer()
     event = sample_event('tests.watson.di.support.SampleDependencyAware')
     event.target['init'] = ['test']
     instance = processor(event)
     assert instance.first_arg == 'test'
예제 #2
0
 def test_definition_item_doesnt_exist(self):
     container = IocContainer({
         'definitions': {
             'test': {}
         }
     })
     container.get('test')
예제 #3
0
 def test_get_item(self):
     container = IocContainer({
         'definitions': {
             'test': {
                 'item': 'tests.watson.di.support.SampleDependency',
                 'type': 'singleton',
             },
             'test2': {
                 'item': 'tests.watson.di.support.sample_dependency',
                 'type': 'singleton',
             },
             'test3': {
                 'item': 'tests.watson.di.support.sample_dependency_with_args',
                 'type': 'singleton',
                 'init': {
                     'arg': 'some arg'
                 }
             }
         }
     })
     container.add('def', lambda container: 'something')
     assert isinstance(container.get('test'), SampleDependency)
     assert container.get('test2') == 'test'
     assert container.get('def') == 'something'
     assert container.get('def') == 'something'
     assert container.get('test3') == 'some arg'
예제 #4
0
 def test_create_container(self):
     container = IocContainer()
     assert repr(
         container
     ) == '<watson.di.container.IocContainer: 0 param(s), 0 definition(s)>'
     assert container.params == {}
     assert container.definitions == {}
예제 #5
0
 def test_set_from_str(self):
     processor = processors.SetterInjection()
     processor.container = IocContainer()
     event = sample_event('tests.watson.di.support.SampleDependencyAware')
     event.params['definition']['setter'] = {'basic_setter': 'arg'}
     event.target = SampleDependencyAware()
     processor(event)
     assert event.target.value == 'arg'
예제 #6
0
 def test_forward_no_method(self):
     controller = SampleActionController()
     controller.container = IocContainer()
     request = Request.from_environ(sample_environ())
     context = {'request': request}
     controller.event = types.Event('test', params={'context': context})
     controller.__action__ = 'do_method_forward'
     assert controller.do_method_forward() == 'Another Response'
예제 #7
0
 def test_inject_container(self):
     container = IocContainer()
     processor = processors.ContainerAware()
     processor.container = container
     event = sample_event('tests.watson.di.support.SampleDependencyAware')
     event.target = SampleDependencyAware()
     processor(event)
     assert event.target.container == container
예제 #8
0
 def test_inject_property(self):
     processor = processors.AttributeInjection()
     processor.container = IocContainer()
     event = sample_event('tests.watson.di.support.SampleDependencyAware')
     event.params['definition']['property'] = {'basic_property': 'test value'}
     event.target = SampleDependencyAware()
     processor(event)
     assert event.target.basic_property == 'test value'
예제 #9
0
 def test_set_from_dict(self):
     processor = processors.SetterInjection()
     processor.container = IocContainer()
     event = sample_event('tests.watson.di.support.SampleDependencyAware')
     event.params['definition']['setter'] = {'basic_dict_setter': {'kw1': 'one', 'kw2': 'two'}}
     event.target = SampleDependencyAware()
     processor(event)
     assert event.target.kw1 == 'one'
     assert event.target.kw2 == 'two'
예제 #10
0
    def container(self):
        """Returns the applications IocContainer.

        If no container has been created, a new container will be created
        based on the dependencies within the application configuration.
        """
        if not self._container:
            self.container = IocContainer(self.config['dependencies'])
        return self._container
예제 #11
0
파일: support.py 프로젝트: enigma/watson
 def __init__(self):
     self.container = IocContainer({
         'definitions': {
             'application.config': {
                 'item': {
                     'cache': {
                         'type': 'watson.cache.storage.Memory'
                     }
                 }
             }
         }
     })
예제 #12
0
 def test_prototype(self):
     container = IocContainer({
         'definitions': {
             'test': {
                 'item': 'tests.watson.di.support.SampleDependency',
                 'type': 'prototype'
             }
         }
     })
     test1 = container.get('test')
     test2 = container.get('test')
     assert test1 != test2
예제 #13
0
 def test_short_circuit(self):
     environ = sample_environ()
     route = LiteralRoute(
         'test',
         path='/',
         options={'controller': 'tests.watson.framework.support.ShortCircuitedController'})
     match = RouteMatch(route, {})
     context = {'request': Request.from_environ(environ), 'route_match': match}
     event = Event(
         'something',
         params={'container': IocContainer(), 'context': context})
     listener = listeners.DispatchExecute({'404': 'page/404'})
     response, view_model = listener(event)
     assert isinstance(response, Response)
예제 #14
0
 def test_overriden_template(self):
     environ = sample_environ()
     route = LiteralRoute(
         'test',
         path='/',
         options={'controller': 'tests.watson.framework.support.SampleActionController'})
     match = RouteMatch(route, {'action': 'view_model_template'})
     context = {'request': Request.from_environ(environ), 'route_match': match}
     event = Event(
         'something',
         params={'container': IocContainer(), 'context': context})
     listener = listeners.DispatchExecute({'404': 'page/500'})
     response, view_model = listener(event)
     assert isinstance(view_model, views.Model)
     assert view_model.template == 'sampleactioncontroller/404'
예제 #15
0
 def test_short_circuit(self):
     environ = sample_environ()
     route = Route('test',
                   path='/',
                   options={
                       'controller':
                       'tests.watson.mvc.support.ShortCircuitedController'
                   })
     match = RouteMatch(route, {
         'controller':
         'tests.watson.mvc.support.ShortCircuitedController'
     })
     event = Event('something',
                   params={
                       'route_match': match,
                       'container': IocContainer(),
                       'request': create_request_from_environ(environ)
                   })
     listener = listeners.DispatchExecute({'404': 'page/404'})
     response = listener(event)
     assert isinstance(response, Response)
예제 #16
0
 def test_initialized_invalid_dependency(self):
     processor = processors.ConstructorInjection()
     processor.container = IocContainer()
     event = sample_event('tests.watson.di.support.DoesNotExist')
     processor(event)
예제 #17
0
 def test_add_item(self):
     container = IocContainer()
     container.add('dep', lambda container: 'something')
     assert container.get('dep') == 'something'
예제 #18
0
 def test_attach_invalid_processor(self):
     container = IocContainer()
     container.attach_processor('event.container.pre', 'test')
예제 #19
0
 def test_add_instantiated(self):
     container = IocContainer()
     dep = SampleDependency()
     container.add('dep', dep)
     assert container.get('dep') == dep
예제 #20
0
 def test_definition_doesnt_exist(self):
     container = IocContainer()
     container.get('test')
예제 #21
0
 def test_add_dict(self):
     container = IocContainer()
     dep = {'something': 'test'}
     container.add('dep', dep)
     assert container.get('dep') == dep