Ejemplo n.º 1
0
 def test_all_extension_docs(self):
     for extension_name in supported_extension_names():
         try:
             self.run_command(["extension", extension_name])
         except Exception:
             self.fail(
                 "The {!r} extension appears to be missing documentation".
                 format(extension_name))
Ejemplo n.º 2
0
class ExtensionCombinationTest(ProjectLoaderBaseTest):
    scenarios = multiply_scenarios(*(
        [[
            (
                "{} extension".format(extension_name),
                {
                    "extension_{}".format(extension_name): extension_name
                },
            ),
            (
                "no {} extension".format(extension_name),
                {
                    "extension_{}".format(extension_name): None
                },
            ),
        ] for extension_name in supported_extension_names()] or
        [[]]  # This guard can be removed once at least one extension is added
    ))

    def test_extensions_all_combinations_validate(self):
        common_bases = set(["core18", "core20"])

        # Determine extension list given scenarios
        extension_names = list()
        for member_pair in inspect.getmembers(self):
            name = member_pair[0]
            if name.startswith("extension_"):
                value = getattr(self, name)
                if value:
                    extension_names.append(value)
                    ext = find_extension(value)
                    common_bases &= set(ext.get_supported_bases())

        # This shouldn't have any validation issues
        if common_bases:
            base = common_bases.pop()
            self.make_snapcraft_project(
                textwrap.dedent("""\
                    name: test
                    version: "1"
                    summary: test
                    description: test
                    base: {base}
                    grade: stable
                    confinement: strict

                    apps:
                        test-app:
                            command: test-command
                            adapter: full
                            extensions: {extensions}

                    parts:
                        part1:
                            plugin: nil
                    """).format(base=base, extensions=extension_names))
        else:
            self.skipTest(f"no common base: {extension_names!r}")
Ejemplo n.º 3
0
def list_extensions(**kwargs):
    """List available extensions.

    This command has an alias of `extensions`.
    """

    extension_names = project_loader.supported_extension_names()

    if not extension_names:
        click.echo("No extensions supported")
        return

    extensions = []
    for extension_name in sorted(extension_names):
        extension = project_loader.find_extension(extension_name)
        extension_info = collections.OrderedDict()
        extension_info["Extension name"] = extension_name
        extension_info["Supported bases"] = ", ".join(sorted(extension.supported_bases))
        extensions.append(extension_info)

    click.echo(tabulate.tabulate(extensions, headers="keys"))