def test_build_module_stubs(self): entries = [ FunctionDefinition.from_callable(Dummy.a_static_method), FunctionDefinition.from_callable(Dummy.a_class_method.__func__), FunctionDefinition.from_callable(Dummy.an_instance_method), FunctionDefinition.from_callable(simple_add), ] simple_add_stub = _func_stub_from_callable(simple_add) to_strip = ['typing'] dummy_stub = ClassStub( 'Dummy', function_stubs=[ _func_stub_from_callable(Dummy.a_class_method.__func__, to_strip), _func_stub_from_callable(Dummy.an_instance_method, to_strip), _func_stub_from_callable(Dummy.a_static_method, to_strip), ]) imports = {'typing': {'Any', 'Optional'}} expected = { 'tests.test_stubs': ModuleStub(function_stubs=[simple_add_stub]), 'tests.util': ModuleStub(class_stubs=[dummy_stub], imports_stub=ImportBlockStub(imports)), } self.maxDiff = None assert build_module_stubs(entries) == expected
def test_render(self): cm_stub = _func_stub_from_callable(Dummy.a_class_method) im_stub = _func_stub_from_callable(Dummy.an_instance_method) func_stubs = (cm_stub, im_stub) test_stub = ClassStub('Test', function_stubs=func_stubs) test2_stub = ClassStub('Test2', function_stubs=func_stubs) class_stubs = (test_stub, test2_stub) mod_stub = ModuleStub(function_stubs=func_stubs, class_stubs=class_stubs) expected = "\n\n\n".join([ cm_stub.render(), im_stub.render(), test_stub.render(), test2_stub.render(), ]) assert mod_stub.render() == expected
def test_render(self): cm_stub = _func_stub_from_callable(Dummy.a_class_method) im_stub = _func_stub_from_callable(Dummy.an_instance_method) func_stubs = (cm_stub, im_stub) test_stub = ClassStub('Test', function_stubs=func_stubs) test2_stub = ClassStub('Test2', function_stubs=func_stubs) other_class_stubs = module_stub_for_method_with_typed_dict['tests.util'].class_stubs.values() class_stubs = (*other_class_stubs, test_stub, test2_stub) typed_dict_class_stubs = module_stub_for_method_with_typed_dict['tests.util'].typed_dict_class_stubs mod_stub = ModuleStub(function_stubs=func_stubs, class_stubs=class_stubs, typed_dict_class_stubs=typed_dict_class_stubs) expected = '\n'.join([ 'class DummyAnInstanceMethodTypedDict(TypedDict):', ' c: int', '', '', 'class FooTypedDict(TypedDict):', ' a: int', ' b: str', '', '', '@classmethod', 'def a_class_method(foo: Any) -> Optional[frame]: ...', '', '', 'def an_instance_method(self, foo: Any, bar: Any) -> Optional[frame]: ...', '', '', 'class Dummy:', ' def an_instance_method(self, foo: \'FooTypedDict\', bar: int) ' + '-> \'DummyAnInstanceMethodTypedDict\': ...', '', '', 'class Test:', ' @classmethod', ' def a_class_method(foo: Any) -> Optional[frame]: ...', ' def an_instance_method(self, foo: Any, bar: Any) -> Optional[frame]: ...', '', '', 'class Test2:', ' @classmethod', ' def a_class_method(foo: Any) -> Optional[frame]: ...', ' def an_instance_method(self, foo: Any, bar: Any) -> Optional[frame]: ...', ]) assert mod_stub.render() == expected
def test_build_index(self): idxb = StubIndexBuilder('tests') idxb.log(CallTrace(untyped_helper, {'x': int, 'y': str}, str)) sig = Signature.from_callable(untyped_helper) sig = sig.replace(parameters=[ Parameter('x', Parameter.POSITIONAL_OR_KEYWORD, annotation=int), Parameter('y', Parameter.POSITIONAL_OR_KEYWORD, annotation=str), ], return_annotation=str) mod_stub = ModuleStub(function_stubs=[ FunctionStub('untyped_helper', sig, FunctionKind.MODULE) ]) expected = {'tests.test_stubs': mod_stub} assert idxb.get_stubs() == expected
'tests.util': ModuleStub( function_stubs=(), class_stubs=[ ClassStub( name='Dummy', function_stubs=[ FunctionStub( name='an_instance_method', signature=Signature( parameters=[ Parameter(name='self', kind=Parameter.POSITIONAL_OR_KEYWORD, annotation=Parameter.empty), Parameter(name='foo', kind=Parameter.POSITIONAL_OR_KEYWORD, annotation=make_forward_ref('FooTypedDict')), Parameter(name='bar', kind=Parameter.POSITIONAL_OR_KEYWORD, annotation=int), ], return_annotation=make_forward_ref('DummyAnInstanceMethodTypedDict'), ), kind=FunctionKind.INSTANCE, strip_modules=['mypy_extensions'], is_async=False, ), ], ), ], imports_stub=ImportBlockStub(typed_dict_import_map), typed_dict_class_stubs=[ ClassStub( name='FooTypedDict(TypedDict)', function_stubs=[], attribute_stubs=[ AttributeStub('a', int), AttributeStub('b', str), ] ), ClassStub( # We use the name of the method, `Dummy.an_instance_method`, # to get `DummyAnInstanceMethodTypedDict`. name='DummyAnInstanceMethodTypedDict(TypedDict)', function_stubs=[], attribute_stubs=[ AttributeStub('c', int), ] ), ], )