def test_basic_parameters(
            self, advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate a combination of parameters.

		This exercises the code paths for a command with arguments, options and
		environment variables.
		"""
        @click.command()
        @click.option("--param", envvar="PARAM", help="A sample option")
        @click.option("--another", metavar="[FOO]", help="Another option")
        @click.option(
            "--choice",
            help="A sample option with choices",
            type=click.Choice(["Option1", "Option2"]),
        )
        @click.argument("ARG", envvar="ARG")
        def foobar(bar):
            """
			A sample command.
			"""

        ctx = click.Context(foobar, info_name="foobar")
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_no_line_wrapping(
            self, advanced_file_regression: AdvancedFileRegressionFixture):
        r"""
		Validate behavior when a \b character is present.

		https://click.palletsprojects.com/en/7.x/documentation/#preventing-rewrapping
		"""
        @click.group()
        def cli():
            """
			A sample command group.

			\b
			This is
			a paragraph
			without rewrapping.

			And this is a paragraph
			that will be rewrapped again.
			"""

        ctx = click.Context(cli, info_name="cli")
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_titles(self,
                    advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate a `click.Command` with nested titles.
		"""
        @click.command()
        @click.option("--name",
                      help="Name to say hello to.",
                      required=True,
                      type=str)
        def hello(name):
            """
			Prints hello to name given.

			Examples
			--------

			.. code:: bash

				my_cli hello --name "Jack"
			"""

        ctx = click.Context(hello, info_name="hello")
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_order_of_commands(
            self, advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate the order of commands.
		"""

        ctx = self._get_ctx()
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT,
                                         commands="world, hello"))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_no_commands(
            self, advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate an empty command group.
		"""

        ctx = self._get_ctx()
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT,
                                         commands=''))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_nested_none(
            self, advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate a nested command with 'nested' of 'none'.

		We should not list sub-commands.
		"""

        ctx = self._get_ctx()
        output = list(
            sphinx_click._format_command(ctx, nested=sphinx_click.NESTED_NONE))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_nested_full(
            self, advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate a nested command with 'nested' of 'full'.

		We should not list sub-commands since they're being handled separately.
		"""

        ctx = self._get_ctx()
        output = list(
            sphinx_click._format_command(ctx, nested=sphinx_click.NESTED_FULL))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_nested_short(
            self, advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate a nested command with 'nested' of 'short' (default).

		We should list minimal help texts for sub-commands since they're not
		being handled separately.
		"""

        ctx = self._get_ctx()
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_hidden(self):
        """
		Validate a `click.Command` with the `hidden` flag.
		"""
        @click.command(hidden=True)
        def foobar():
            """
			A sample command.
			"""

        ctx = click.Context(foobar, info_name="foobar")
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))
        assert '' == '\n'.join(output)
    def test_help_epilog(
            self, advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate formatting of explicit help and epilog strings.
		"""
        @click.command(help="A sample command.", epilog="A sample epilog.")
        @click.option("--param", help="A sample option")
        def foobar(bar):
            pass

        ctx = click.Context(foobar, info_name="foobar")
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_hidden(self,
                    advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Ensure 'hidden' subcommands are not shown.
		"""
        @click.command()
        def hello():
            """
			A sample command.
			"""

        @click.command()
        def world():
            """
			A world command.
			"""

        @click.command(hidden=True)
        def hidden():
            """
			A hidden command.
			"""

        class MyCLI(click.MultiCommand):
            _command_mapping = {
                "hello": hello,
                "world": world,
                "hidden": hidden,
            }

            def list_commands(self, ctx):
                return ["hello", "world", "hidden"]

            def get_command(self, ctx, name):
                return self._command_mapping[name]

        cli = MyCLI(help="A sample custom multicommand.")
        ctx = click.Context(cli, info_name="cli")
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))

        # Note that we do NOT expect this to show the 'hidden' command
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_no_parameters_group(
            self, advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate a `click.Group` with no parameters.

		This exercises the code paths for a group with *no* arguments, *no*
		options and *no* environment variables.
		"""
        @click.group()
        def cli():
            """
			A sample command group.
			"""

        ctx = click.Context(cli, info_name="cli")
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_basic_parameters_group(
            self, advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate a combination of parameters.

		This exercises the code paths for a group with arguments, options and
		environment variables.
		"""
        @click.group()
        @click.option("--param", envvar="PARAM", help="A sample option")
        @click.argument("ARG", envvar="ARG")
        def cli():
            """
			A sample command group.
			"""

        ctx = click.Context(cli, info_name="cli")
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_defaults(self,
                      advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate formatting of user documented defaults.
		"""
        @click.command()
        @click.option("--num-param", type=int, default=42, show_default=True)
        @click.option(
            "--param",
            default=lambda: None,
            show_default="Something computed at runtime",
        )
        def foobar(bar):
            """
			A sample command.
			"""

        ctx = click.Context(foobar, info_name="foobar")
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))
        advanced_file_regression.check('\n'.join(output), extension=".rst")
    def test_basics(self,
                    advanced_file_regression: AdvancedFileRegressionFixture):
        """
		Validate a custom ``click.MultiCommand`` with no parameters.

		This exercises the code paths to extract commands correctly from these commands.
		"""
        @click.command()
        def hello():
            """
			A sample command.
			"""

        @click.command()
        def world():
            """
			A world command.
			"""

        class MyCLI(click.MultiCommand):
            _command_mapping = {
                "hello": hello,
                "world": world,
            }

            def list_commands(self, ctx):
                return ["hello", "world"]

            def get_command(self, ctx, name):
                return self._command_mapping[name]

        cli = MyCLI(help="A sample custom multicommand.")
        ctx = click.Context(cli, info_name="cli")
        output = list(
            sphinx_click._format_command(ctx,
                                         nested=sphinx_click.NESTED_SHORT))
        advanced_file_regression.check('\n'.join(output), extension=".rst")