def test_from_methods(descriptor): def f(a, b=None): pass expected = Arguments.from_callable(f) result = Arguments.from_callable(descriptor(f)) for expected_arg, result_arg in zip(expected, result): assert expected_arg.name == result_arg.name assert expected_arg.has_default == result_arg.has_default assert expected_arg.type_hint == result_arg.type_hint
def test_extract_auto_provided_arg_dependency(type_hint, expected): def f(x: type_hint): pass arguments = Arguments.from_callable(f) assert extract_auto_provided_arg_dependency(arguments[0]) == expected def g(x: type_hint = None): pass arguments = Arguments.from_callable(g) assert extract_auto_provided_arg_dependency(arguments[0]) == expected
def test_unknown_antidote_annotations(): type_hint = Annotated[Dummy, AntidoteAnnotation()] def f(x: type_hint): pass arguments = Arguments.from_callable(f) with pytest.raises(TypeError): extract_annotated_arg_dependency(arguments[0]) with pytest.raises(TypeError): extract_annotated_dependency(type_hint)
def test_multiple_antidote_annotations(): type_hint = Annotated[Dummy, Get('dummy'), Get('dummy')] # noqa: F821 def f(x: type_hint): pass arguments = Arguments.from_callable(f) with pytest.raises(TypeError): extract_annotated_arg_dependency(arguments[0]) with pytest.raises(TypeError): extract_annotated_dependency(type_hint)
def test_arguments(): container = DependencyContainer() container.update_singletons(dict(a=12, b=24)) def f(a, b): pass arguments = Arguments.from_callable(f) @inject(arguments=arguments, use_names=True, container=container) def g(**kwargs): return kwargs assert dict(a=12, b=24) == g()
def test_from_callable(func, expected: Arguments): result = Arguments.from_callable(func) assert isinstance(result, Arguments) assert expected.has_var_positional == result.has_var_positional assert expected.has_var_keyword == result.has_var_keyword for expected_arg, result_arg in zip(expected, result): assert expected_arg.name == result_arg.name assert expected_arg.has_default == result_arg.has_default assert expected_arg.type_hint == result_arg.type_hint for expected_arg in expected: assert expected_arg.name in result result_arg = result[expected_arg.name] assert expected_arg.name == result_arg.name assert expected_arg.has_default == result_arg.has_default assert expected_arg.type_hint == result_arg.type_hint
def test_broken_type_hints_cpy353(monkeypatch): monkeypatch.setattr('antidote._internal.argspec.get_type_hints', raiser(Exception)) Arguments.from_callable(k)
def test_invalid_callable(): with pytest.raises(TypeError): Arguments.from_callable(object())