mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
`dvc commit --help` was also completely broken, which is also fixed. This adds unit tests for completion generation for both zsh/bash, and tests that --help works for all commands.
49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
import logging
|
|
from argparse import SUPPRESS, ArgumentParser
|
|
from typing import Tuple
|
|
|
|
import pytest
|
|
import shtab
|
|
|
|
from dvc.cli import main
|
|
from dvc.cli.parser import get_main_parser
|
|
|
|
|
|
def command_tuples():
|
|
root: Tuple[str, ...] = ()
|
|
commands = [root]
|
|
|
|
def recurse_parser(parser: ArgumentParser, parents: Tuple[str, ...] = root) -> None:
|
|
for positional in parser._get_positional_actions():
|
|
if positional.help != SUPPRESS and isinstance(positional.choices, dict):
|
|
public_cmds = shtab.get_public_subcommands(positional)
|
|
for subcmd, subparser in positional.choices.items():
|
|
cmd = (*parents, subcmd)
|
|
if subcmd in public_cmds:
|
|
commands.append(cmd)
|
|
recurse_parser(subparser, cmd)
|
|
|
|
main_parser = get_main_parser()
|
|
recurse_parser(main_parser)
|
|
return sorted(commands)
|
|
|
|
|
|
def pytest_generate_tests(metafunc):
|
|
def ids(values):
|
|
if values:
|
|
return "-".join(values)
|
|
return "dvc"
|
|
|
|
metafunc.parametrize("command_tuples", command_tuples(), ids=ids)
|
|
|
|
|
|
def test_help(caplog, capsys, command_tuples):
|
|
with caplog.at_level(logging.INFO), pytest.raises(SystemExit) as e:
|
|
main([*command_tuples, "--help"])
|
|
assert e.value.code == 0
|
|
assert not caplog.text
|
|
|
|
out, err = capsys.readouterr()
|
|
assert not err
|
|
assert out
|