def test__get_normalized_kwargs(self):
     def f(a, b, c):
         raise NotImplementedError()
     sig = FunctionSignature(f)
     self.assertEquals(
         sig.get_normalized_args((1,2,3), {}),
         dict(a=1, b=2, c=3)
         )
     with self.assertRaises(SignatureException):
         sig.get_normalized_args((1, 2, 3), dict(a=1))
    def _test_function_signature(self,
        func,
        expected_signature,
        has_varargs=False,
        has_varkwargs=False
        ):
        sig = FunctionSignature(func)

        self.assertEquals(len(expected_signature), len(sig._args))
        self.assertEquals(len(expected_signature), sig.get_num_args())
        for expected_arg, arg in zip(expected_signature, sig._args):
            if isinstance(expected_arg, tuple):
                expected_arg = ExpectedArg(*expected_arg)
            self.assertEquals(expected_arg.name,
                              arg.name)
            self.assertEquals(expected_arg.has_default,
                              arg.has_default())
            if expected_arg.has_default:
                self.assertEquals(expected_arg.default, arg.default)
        self.assertEquals(sig.has_variable_kwargs(), has_varkwargs)
        self.assertEquals(sig.has_variable_args(), has_varargs)
        self._test_missing_arguments(sig, expected_signature)
 def test__get_normalized_kwargs_unknown_keywords(self):
     def f(a, b, c, *args):
         raise NotImplementedError()
     sig = FunctionSignature(f)
     with self.assertRaises(UnknownArguments):
         sig.get_normalized_args((1, 2, 3, 4), dict(d=5))
 def test__get_normalized_kwargs_missing_positionals(self):
     def f(a, b, c, **kwargs):
         raise NotImplementedError()
     sig = FunctionSignature(f)
     with self.assertRaises(MissingArguments):
         sig.get_normalized_args((1,), dict(b=2, d=5))
 def test__binary_global_function(self):
     sig = FunctionSignature(time.time)
     self.assertEquals(sig._args, [])
     self.assertTrue(sig.has_variable_args())
     self.assertTrue(sig.has_variable_kwargs())
 def test__normalizing_kwargs_with_numbers(self):
     # this is supported in python, but interferes with the arg-normalizing logic
     sig = FunctionSignature(lambda *args, **kwargs: None)
     with self.assertRaises(InvalidKeywordArgument):
         sig.get_normalized_args((), {1:2})