def test_get_target_type_info(self): class Target1(Target): """Target1 docstring.""" pass class Target2(Target): """Target2 docstring.""" pass class Target3(Target): """Target3 docstring.""" pass # We shouldn't get as far as invoking the context factory, so it can be trivial. macro_factory = TargetMacro.Factory.wrap(lambda ctx: None, Target2) bfa = BuildFileAliases(targets={ 'target1': Target1, 'target2': macro_factory, 'target3': Target3, }, objects={}, context_aware_object_factories={}) extracter = BuildDictionaryInfoExtracter(bfa) args = BuildDictionaryInfoExtracter.basic_target_args self.assertEqual([ BuildSymbolInfo('target1', 'Target1 docstring.', [], args), BuildSymbolInfo('target2', 'Target2 docstring.', [], args), BuildSymbolInfo('target3', 'Target3 docstring.', [], args) ], extracter.get_target_type_info())
def test_get_object_factory_info(self): class Foo: """Foo docstring.""" def __call__(self, bar, baz=42): """ :param bar: Bar details. :param int baz: Baz details. """ bfa = BuildFileAliases(targets={}, objects={}, context_aware_object_factories={"foo": Foo}) extracter = BuildDictionaryInfoExtracter(bfa) self.assertEqual( [ BuildSymbolInfo( "foo", "Foo docstring.", [], [ FunctionArg("bar", "Bar details.", False, None), FunctionArg("baz", "Baz details.", True, 42), ], ) ], extracter.get_object_factory_info(), )
def test_get_object_factory_info(self): class Foo(object): """Foo docstring.""" def __call__(self, bar, baz=42): """ :param bar: Bar details. :param int baz: Baz details. """ bfa = BuildFileAliases(targets={}, objects={}, context_aware_object_factories={'foo': Foo}) extracter = BuildDictionaryInfoExtracter(bfa) self.assertEquals([ BuildSymbolInfo('foo', 'Foo docstring.', [], [ FunctionArg('bar', 'Bar details.', False, None), FunctionArg('baz', 'Baz details.', True, 42) ]) ], extracter.get_object_factory_info())
def test_get_object_info_datatype(self): class FooDatatype(datatype(['bar', 'baz'])): """Foo docstring.""" def __new__(cls, bar, baz=42): """ :param bar: Bar details. :param int baz: Baz details. """ return super(FooDatatype, cls).__new__(cls, bar, baz) bfa = BuildFileAliases( targets={}, objects={'foo': FooDatatype}, context_aware_object_factories={}, ) extracter = BuildDictionaryInfoExtracter(bfa) self.assertEquals([ BuildSymbolInfo('foo', 'Foo docstring.', [], [ FunctionArg('bar', 'Bar details.', False, None), FunctionArg('baz', 'Baz details.', True, 42) ]) ], extracter.get_object_info())