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())
Exemple #2
0
    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())