def test_2(self):
     invoker = FunctionInvoker()
     invoker.provide_object('5')
     with self.assertRaises(TypeNotFoundError):
         invoker.invoke(func2) # abc has no type
     invoker.provide_object(8, provide_name='abce')
     self.assertEqual(invoker.invoke(func2), 8)
 def test_4(self):
     invoker = FunctionInvoker()
     invoker.provide_object('4', provide_name="abc")
     invoker.provide_object('5')
     invoker2 = invoker.create_transient()
     invoker2.provide_object('6')
     self.assertEqual(invoker.invoke(func1), '4')
     self.assertEqual(invoker2.invoke(func1), '4') # because match name and type, so return '4'
     invoker3 = invoker.create_transient()
     invoker3.provide_object('7', provide_name="abc")
     self.assertEqual(invoker.invoke(func1), '4')
     self.assertEqual(invoker2.invoke(func1), '4')
     self.assertEqual(invoker3.invoke(func1), '7')
    def test_3(self):
        invoker = FunctionInvoker()
        invoker.provide_object(3)
        self.assertEqual(invoker.invoke(func3), 3)

        invoker2 = FunctionInvoker()
        invoker2.provide_object(3)
        invoker2.provide_object('4')
        self.assertEqual(invoker2.invoke(func3), 3) # should match first type (int)

        invoker3 = FunctionInvoker()
        invoker3.provide_object('4')
        invoker3.provide_object(3)
        self.assertEqual(invoker3.invoke(func3), 3) # should match first type (int)

        invoker4 = FunctionInvoker()
        invoker4.provide_object('4', provide_name='abc')
        invoker4.provide_object(3)
        self.assertEqual(invoker4.invoke(func3), '4')
 def test_2(self):
     invoker = FunctionInvoker()
     invoker.provide_object('4')
     invoker.provide_object('5')
     self.assertEqual(invoker.invoke(func1), '5')
 def test_3(self):
     invoker = FunctionInvoker()
     invoker.provide_object('4', provide_name="abc")
     invoker.provide_object('5')
     self.assertEqual(invoker.invoke(func1), '4')
 def test_instance_method(self):
     invoker = FunctionInvoker()
     a = A([])
     invoker.provide_callable(lambda : [], provide_type=list)
     invoker.provide_callable(a.test_dict_1, invoker=invoker)
     self.assertIsInstance(invoker.invoke(a.test_dict_2), dict)
 def test_create_instance_deep_miss_A_arg(self):
     invoker = FunctionInvoker()
     invoker.provide_callable(A, provide_type=A)
     with self.assertRaises(TypeError):
         self.assertIsInstance(invoker.invoke(func5), A)
 def test_create_instance_deep(self):
     invoker = FunctionInvoker()
     invoker.provide_callable(lambda : [], provide_type=list)
     invoker.provide_callable(A, provide_type=A, invoker=invoker)
     self.assertIsInstance(invoker.invoke(func5), A)
 def test_create_instance_miss_type(self):
     with self.assertRaises(TypeError):
         invoker = FunctionInvoker()
         invoker.provide_callable(lambda : [])
 def test_create_instance(self):
     invoker = FunctionInvoker()
     invoker.provide_callable(lambda : [], provide_type=list)
     self.assertIsInstance(invoker.invoke(func4), list)