Пример #1
0
    def test_inject_resolver_decorator(self):
        counter = Counter()

        ij = Injector()
        @ij.resolver('c')
        def resolver(keyname='provider_called', increment=1):
            counter['resolver_called'] += 1
            def provider():
                counter[keyname] += increment
                return counter
            return provider

        def test(c, other=inject('c', keyname='special_called', increment=10)):
            self.assertTrue(other is c)
            c['counter_used'] += 1

        ij.call_inject(test)
        self.assertEqual(2, counter['resolver_called'])
        self.assertEqual(1, counter['provider_called'])
        self.assertEqual(10, counter['special_called'])
        self.assertEqual(1, counter['counter_used'])

        ij.call_inject(test)
        self.assertEqual(2, counter['resolver_called'])  # !!! Should be cached and not called again
        self.assertEqual(2, counter['provider_called'])
        self.assertEqual(20, counter['special_called'])
        self.assertEqual(2, counter['counter_used'])
Пример #2
0
 def test_inject_value(self):
     ij = Injector()
     value = []
     ij.add_value('val', value)
     def test(val, other=inject('val')):
         self.assertTrue(val is other)
         self.assertTrue(val is value)
         val.append(5)
     ij.call_inject(test)
     self.assertEqual([5], value)
Пример #3
0
    def test_wrap_decorator(self):
        ij = Injector()

        @ij.wrap
        def test(a):
            return a

        with self.assertRaises(InjectError):
            test()

        ij.add_value('a', 5)
        self.assertEquals(5, test())
        self.assertEquals(6, test(a=6))
Пример #4
0
    def test_wrap_decorator(self):
        ij = Injector()

        @ij.wrap
        def test(a):
            return a

        with self.assertRaises(InjectError):
            test()

        ij.add_value('a', 5)
        self.assertEquals(5, test())
        self.assertEquals(6, test(a=6))
Пример #5
0
    def test_resolver_alias(self):
        counter = Counter()

        def resolver(keyname='provider_called', increment=1):
            counter['resolver_called'] += 1

            def provider():
                counter[keyname] += increment
                return counter

            return provider

        def test(a, b, c, d, e, f):
            self.assertTrue(a is b)
            self.assertTrue(a is c)
            self.assertTrue(a is d)
            self.assertTrue(a is e)
            self.assertTrue(a is f)
            a['counter_used'] += 1

        ij = Injector()
        ij.add_resolver('a', resolver, alias="b")
        ij.add_resolver('c', resolver, alias=("d", "e", "f"))

        ij.call_inject(test)
        self.assertEqual(6, counter['resolver_called'])
        self.assertEqual(6, counter['provider_called'])
        self.assertEqual(1, counter['counter_used'])
Пример #6
0
    def test_inject_resolver(self):
        counter = Counter()

        def resolver(keyname='provider_called', increment=1):
            counter['resolver_called'] += 1

            def provider():
                counter[keyname] += increment
                return counter

            return provider

        def test(c, other=inject('c', keyname='special_called', increment=10)):
            self.assertTrue(other is c)
            c['counter_used'] += 1

        ij = Injector()
        ij.add_resolver('c', resolver)

        ij.call_inject(test)
        self.assertEqual(2, counter['resolver_called'])
        self.assertEqual(1, counter['provider_called'])
        self.assertEqual(10, counter['special_called'])
        self.assertEqual(1, counter['counter_used'])

        ij.call_inject(test)
        self.assertEqual(2, counter['resolver_called']
                         )  # !!! Should be cached and not called again
        self.assertEqual(2, counter['provider_called'])
        self.assertEqual(20, counter['special_called'])
        self.assertEqual(2, counter['counter_used'])
Пример #7
0
    def test_inject_provider_decorator(self):
        counter = Counter()
        ij = Injector()

        @ij.provider('c')
        def provider():
            counter['provider_called'] += 1
            return counter

        def test(c, other=inject('c')):
            self.assertTrue(other is c)
            c['counter_used'] += 1

        ij.call_inject(test)
        self.assertEqual(2, counter['provider_called'])
        self.assertEqual(1, counter['counter_used'])
Пример #8
0
    def test_inject_provider_decorator(self):
        counter = Counter()
        ij = Injector()

        @ij.provider('c')
        def provider():
            counter['provider_called'] += 1
            return counter

        def test(c, other=inject('c')):
            self.assertTrue(other is c)
            c['counter_used'] += 1

        ij.call_inject(test)
        self.assertEqual(2, counter['provider_called'])
        self.assertEqual(1, counter['counter_used'])
Пример #9
0
    def test_remove_provider(self):
        ij = Injector()
        ij.add_value('val', 5)
        ij.remove('val')

        def test(val):
            pass

        with self.assertRaises(InjectError):
            ij.call_inject(test)
Пример #10
0
    def test_resolver_alias(self):
        counter = Counter()

        def resolver(keyname='provider_called', increment=1):
            counter['resolver_called'] += 1
            def provider():
                counter[keyname] += increment
                return counter
            return provider

        def test(a, b, c, d, e, f):
            self.assertTrue(a is b)
            self.assertTrue(a is c)
            self.assertTrue(a is d)
            self.assertTrue(a is e)
            self.assertTrue(a is f)
            a['counter_used'] += 1

        ij = Injector()
        ij.add_resolver('a', resolver, alias="b")
        ij.add_resolver('c', resolver, alias=("d", "e", "f"))

        ij.call_inject(test)
        self.assertEqual(6, counter['resolver_called'])
        self.assertEqual(6, counter['provider_called'])
        self.assertEqual(1, counter['counter_used'])
Пример #11
0
 def test_remove_provider(self):
     ij = Injector()
     ij.add_value('val', 5)
     ij.remove('val')
     def test(val): pass
     with self.assertRaises(InjectError):
         ij.call_inject(test)
Пример #12
0
    def test_inspection(self):
        def test(a,
                 _b,
                 c=5,
                 d=inject('x'),
                 e=inject('x2', foo='foo', bar="baz"),
                 *f,
                 **g):
            pass

        self._common_checks(Injector().inspect(test))
Пример #13
0
    def test_inspect_class(self):
        class Foo:
            def __init__(self,
                         a,
                         _b,
                         c=5,
                         d=inject('x'),
                         e=inject('x2', foo='foo', bar="baz"),
                         *f,
                         **g):
                pass

        self._common_checks(Injector().inspect(Foo))
Пример #14
0
    def test_inject_value(self):
        ij = Injector()
        value = []
        ij.add_value('val', value)

        def test(val, other=inject('val')):
            self.assertTrue(val is other)
            self.assertTrue(val is value)
            val.append(5)

        ij.call_inject(test)
        self.assertEqual([5], value)
Пример #15
0
    def test_inspection(self):
        def test(a,
                 _b,
                 c=5,
                 d=inject('x'),
                 e=inject('x2', 'foo', bar="baz"),
                 *f,
                 **g):
            pass

        results = dict(Injector().inspect(test))
        self.assertEqual(inject('a'), results['a'])
        self.assertEqual(inject('_b'), results['_b'])
        self.assertEqual(None, results.get('c'))
        self.assertEqual(inject('x'), results['d'])
        self.assertEqual(inject('x2', 'foo', bar="baz"), results['e'])
        self.assertEqual(None, results.get('f'))
        self.assertEqual(None, results.get('g'))
Пример #16
0
    def test_inspect_wrapped(self):
        def test(a,
                 _b,
                 c=5,
                 d=inject('x'),
                 e=inject('x2', foo='foo', bar="baz"),
                 *f,
                 **g):
            pass

        @functools.wraps(test)
        def wrapped():
            pass

        if not hasattr(wrapped, '__wrapped__'):
            # Python 3.2 added this. Without it we cannot unwrap.
            # This is just to satisfy the coverage in unsupported python versions
            wrapped.__wrapped__ = test

        self._common_checks(Injector().inspect(wrapped))
Пример #17
0
    def test_inspect_blacklist(self):
        def test(self, a):
            pass

        self.assertEquals(['a'], Injector().inspect(test).keys())